source: cpp/frams/neuro/impl/neuroimpl-channels.cpp @ 1229

Last change on this file since 1229 was 1130, checked in by Maciej Komosinski, 4 years ago

Used std::min(), std::max() explicitly to avoid compiler confusion. Used std::size() explicitly instead of the equivalent macro

  • Property svn:eol-style set to native
File size: 962 bytes
Line 
1// This file is a part of Framsticks SDK.  http://www.framsticks.com/
2// Copyright (C) 1999-2021  Maciej Komosinski and Szymon Ulatowski.
3// See LICENSE.txt for details.
4
5#include "neuroimpl-channels.h"
6#include <algorithm>
7
8void NI_Channelize::go()
9{
10        setChannelCount(getInputCount());
11        for (int i = 0; i < getInputCount(); i++)
12                setState(getWeightedInputState(i), i);
13}
14
15void NI_ChMux::go()
16{
17        int c = getInputChannelCount(1);
18        if (c < 2) { setState(getWeightedInputState(1)); return; }
19        double s = getWeightedInputState(0);
20        s = (std::max(-1.0, std::min(1.0, s)) + 1.0) / 2.0; // 0..1
21        int i1;
22        i1 = (int)(s * (c - 1)); i1 = std::max(0, std::min(i1, c - 2));
23        double sw = 1.0 / (c - 1);
24        double s1 = sw * i1;
25        double w1 = fabs((s - s1) / sw);
26        double w2 = 1.0 - w1;
27        double is1 = getWeightedInputState(1, i1);
28        double is2 = getWeightedInputState(1, i1 + 1);
29        setState(is1 * w2 + is2 * w1);
30}
31
32void NI_ChSel::go()
33{
34        setState(getWeightedInputState(0, ch));
35}
Note: See TracBrowser for help on using the repository browser.