mirror of
https://github.com/f4exb/sdrangel.git
synced 2024-11-10 18:43:28 -05:00
WDSP: rework SSQL and PANEL classes
This commit is contained in:
parent
71fe079ee3
commit
cd38f356d0
@ -680,7 +680,7 @@ void WDSPRxSink::applySettings(const WDSPRxSettings& settings, bool force)
|
|||||||
|| (m_settings.m_squelchThreshold != settings.m_squelchThreshold)
|
|| (m_settings.m_squelchThreshold != settings.m_squelchThreshold)
|
||||||
|| (m_settings.m_squelchMode != settings.m_squelchMode) || force)
|
|| (m_settings.m_squelchMode != settings.m_squelchMode) || force)
|
||||||
{
|
{
|
||||||
WDSP::SSQL::SetSSQLRun(*m_rxa, 0);
|
m_rxa->ssql->setRun(0);
|
||||||
m_rxa->amsq->setRun(0);
|
m_rxa->amsq->setRun(0);
|
||||||
m_rxa->fmsq->setRun(0);
|
m_rxa->fmsq->setRun(0);
|
||||||
|
|
||||||
@ -690,9 +690,9 @@ void WDSPRxSink::applySettings(const WDSPRxSettings& settings, bool force)
|
|||||||
{
|
{
|
||||||
case WDSPRxProfile::SquelchModeVoice:
|
case WDSPRxProfile::SquelchModeVoice:
|
||||||
{
|
{
|
||||||
WDSP::SSQL::SetSSQLRun(*m_rxa, 1);
|
m_rxa->ssql->setRun(1);
|
||||||
double threshold = 0.0075 * settings.m_squelchThreshold;
|
double threshold = 0.0075 * settings.m_squelchThreshold;
|
||||||
WDSP::SSQL::SetSSQLThreshold(*m_rxa, threshold);
|
m_rxa->ssql->setThreshold(threshold);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case WDSPRxProfile::SquelchModeAM:
|
case WDSPRxProfile::SquelchModeAM:
|
||||||
@ -717,11 +717,11 @@ void WDSPRxSink::applySettings(const WDSPRxSettings& settings, bool force)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ((m_settings.m_ssqlTauMute != settings.m_ssqlTauMute) || force) {
|
if ((m_settings.m_ssqlTauMute != settings.m_ssqlTauMute) || force) {
|
||||||
WDSP::SSQL::SetSSQLTauMute(*m_rxa, settings.m_ssqlTauMute);
|
m_rxa->ssql->setTauMute(settings.m_ssqlTauMute);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((m_settings.m_ssqlTauUnmute != settings.m_ssqlTauUnmute) || force) {
|
if ((m_settings.m_ssqlTauUnmute != settings.m_ssqlTauUnmute) || force) {
|
||||||
WDSP::SSQL::SetSSQLTauUnMute(*m_rxa, settings.m_ssqlTauUnmute);
|
m_rxa->ssql->setTauUnMute(settings.m_ssqlTauUnmute);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((m_settings.m_amsqMaxTail != settings.m_amsqMaxTail) || force) {
|
if ((m_settings.m_amsqMaxTail != settings.m_amsqMaxTail) || force) {
|
||||||
@ -743,7 +743,7 @@ void WDSPRxSink::applySettings(const WDSPRxSettings& settings, bool force)
|
|||||||
// Audio panel
|
// Audio panel
|
||||||
|
|
||||||
if ((m_settings.m_volume != settings.m_volume) || force) {
|
if ((m_settings.m_volume != settings.m_volume) || force) {
|
||||||
WDSP::PANEL::SetPanelGain1(*m_rxa, settings.m_volume);
|
m_rxa->panel->setGain1(settings.m_volume);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((m_settings.m_audioBinaural != settings.m_audioBinaural)
|
if ((m_settings.m_audioBinaural != settings.m_audioBinaural)
|
||||||
@ -752,13 +752,13 @@ void WDSPRxSink::applySettings(const WDSPRxSettings& settings, bool force)
|
|||||||
{
|
{
|
||||||
if (settings.m_audioBinaural)
|
if (settings.m_audioBinaural)
|
||||||
{
|
{
|
||||||
WDSP::PANEL::SetPanelCopy(*m_rxa, settings.m_audioFlipChannels ? 3 : 0);
|
m_rxa->panel->setCopy(settings.m_audioFlipChannels ? 3 : 0);
|
||||||
WDSP::PANEL::SetPanelPan(*m_rxa, settings.m_audioPan);
|
m_rxa->panel->setPan(settings.m_audioPan);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
WDSP::PANEL::SetPanelCopy(*m_rxa, settings.m_audioFlipChannels ? 2 : 1);
|
m_rxa->panel->setCopy(settings.m_audioFlipChannels ? 2 : 1);
|
||||||
WDSP::PANEL::SetPanelPan(*m_rxa, 0.5);
|
m_rxa->panel->setPan(0.5);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
28
wdsp/RXA.cpp
28
wdsp/RXA.cpp
@ -515,7 +515,7 @@ RXA* RXA::create_rxa (
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Syllabic squelch (Voice suelch) - Not in the block diagram
|
// Syllabic squelch (Voice suelch) - Not in the block diagram
|
||||||
rxa->ssql = SSQL::create_ssql(
|
rxa->ssql = new SSQL(
|
||||||
0, // run
|
0, // run
|
||||||
rxa->dsp_size, // size
|
rxa->dsp_size, // size
|
||||||
rxa->midbuff, // pointer to input buffer
|
rxa->midbuff, // pointer to input buffer
|
||||||
@ -532,7 +532,7 @@ RXA* RXA::create_rxa (
|
|||||||
2000.0); // max freq for f_to_v converter
|
2000.0); // max freq for f_to_v converter
|
||||||
|
|
||||||
// PatchPanel
|
// PatchPanel
|
||||||
rxa->panel = PANEL::create_panel (
|
rxa->panel = new PANEL(
|
||||||
1, // run
|
1, // run
|
||||||
rxa->dsp_size, // size
|
rxa->dsp_size, // size
|
||||||
rxa->midbuff, // pointer to input buffer
|
rxa->midbuff, // pointer to input buffer
|
||||||
@ -565,8 +565,8 @@ RXA* RXA::create_rxa (
|
|||||||
void RXA::destroy_rxa (RXA *rxa)
|
void RXA::destroy_rxa (RXA *rxa)
|
||||||
{
|
{
|
||||||
delete (rxa->rsmpout);
|
delete (rxa->rsmpout);
|
||||||
PANEL::destroy_panel (rxa->panel);
|
delete (rxa->panel);
|
||||||
SSQL::destroy_ssql (rxa->ssql);
|
delete (rxa->ssql);
|
||||||
delete (rxa->mpeak);
|
delete (rxa->mpeak);
|
||||||
delete (rxa->speak);
|
delete (rxa->speak);
|
||||||
delete (rxa->cbl);
|
delete (rxa->cbl);
|
||||||
@ -629,8 +629,8 @@ void RXA::flush_rxa (RXA *rxa)
|
|||||||
rxa->cbl->flush();
|
rxa->cbl->flush();
|
||||||
rxa->speak->flush();
|
rxa->speak->flush();
|
||||||
rxa->mpeak->flush();
|
rxa->mpeak->flush();
|
||||||
SSQL::flush_ssql (rxa->ssql);
|
rxa->ssql->flush();
|
||||||
PANEL::flush_panel (rxa->panel);
|
rxa->panel->flush();
|
||||||
rxa->rsmpout->flush();
|
rxa->rsmpout->flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -668,8 +668,8 @@ void RXA::xrxa (RXA *rxa)
|
|||||||
rxa->cbl->execute();
|
rxa->cbl->execute();
|
||||||
rxa->speak->execute();
|
rxa->speak->execute();
|
||||||
rxa->mpeak->execute();
|
rxa->mpeak->execute();
|
||||||
SSQL::xssql (rxa->ssql);
|
rxa->ssql->execute();
|
||||||
PANEL::xpanel (rxa->panel);
|
rxa->panel->execute();
|
||||||
rxa->amsq->execute();
|
rxa->amsq->execute();
|
||||||
rxa->rsmpout->execute();
|
rxa->rsmpout->execute();
|
||||||
}
|
}
|
||||||
@ -775,8 +775,8 @@ void RXA::setDSPSamplerate (RXA *rxa, int dsp_rate)
|
|||||||
rxa->cbl->setSamplerate(rxa->dsp_rate);
|
rxa->cbl->setSamplerate(rxa->dsp_rate);
|
||||||
rxa->speak->setSamplerate(rxa->dsp_rate);
|
rxa->speak->setSamplerate(rxa->dsp_rate);
|
||||||
rxa->mpeak->setSamplerate(rxa->dsp_rate);
|
rxa->mpeak->setSamplerate(rxa->dsp_rate);
|
||||||
SSQL::setSamplerate_ssql (rxa->ssql, rxa->dsp_rate);
|
rxa->ssql->setSamplerate(rxa->dsp_rate);
|
||||||
PANEL::setSamplerate_panel (rxa->panel, rxa->dsp_rate);
|
rxa->panel->setSamplerate(rxa->dsp_rate);
|
||||||
// output resampler
|
// output resampler
|
||||||
rxa->rsmpout->setBuffers(rxa->midbuff, rxa->outbuff);
|
rxa->rsmpout->setBuffers(rxa->midbuff, rxa->outbuff);
|
||||||
rxa->rsmpout->setInRate(rxa->dsp_rate);
|
rxa->rsmpout->setInRate(rxa->dsp_rate);
|
||||||
@ -858,10 +858,10 @@ void RXA::setDSPBuffsize (RXA *rxa, int dsp_size)
|
|||||||
rxa->speak->setSize(rxa->dsp_size);
|
rxa->speak->setSize(rxa->dsp_size);
|
||||||
rxa->mpeak->setBuffers(rxa->midbuff, rxa->midbuff);
|
rxa->mpeak->setBuffers(rxa->midbuff, rxa->midbuff);
|
||||||
rxa->mpeak->setSize(rxa->dsp_size);
|
rxa->mpeak->setSize(rxa->dsp_size);
|
||||||
SSQL::setBuffers_ssql (rxa->ssql, rxa->midbuff, rxa->midbuff);
|
rxa->ssql->setBuffers(rxa->midbuff, rxa->midbuff);
|
||||||
SSQL::setSize_ssql (rxa->ssql, rxa->dsp_size);
|
rxa->ssql->setSize(rxa->dsp_size);
|
||||||
PANEL::setBuffers_panel (rxa->panel, rxa->midbuff, rxa->midbuff);
|
rxa->panel->setBuffers(rxa->midbuff, rxa->midbuff);
|
||||||
PANEL::setSize_panel (rxa->panel, rxa->dsp_size);
|
rxa->panel->setSize(rxa->dsp_size);
|
||||||
// output resampler
|
// output resampler
|
||||||
rxa->rsmpout->setBuffers(rxa->midbuff, rxa->outbuff);
|
rxa->rsmpout->setBuffers(rxa->midbuff, rxa->outbuff);
|
||||||
rxa->rsmpout->setSize(rxa->dsp_size);
|
rxa->rsmpout->setSize(rxa->dsp_size);
|
||||||
|
14
wdsp/TXA.cpp
14
wdsp/TXA.cpp
@ -103,7 +103,7 @@ TXA* TXA::create_txa (
|
|||||||
txa->dsp_rate, // sample rate
|
txa->dsp_rate, // sample rate
|
||||||
2); // mode
|
2); // mode
|
||||||
|
|
||||||
txa->panel = PANEL::create_panel (
|
txa->panel = new PANEL(
|
||||||
1, // run
|
1, // run
|
||||||
txa->dsp_size, // size
|
txa->dsp_size, // size
|
||||||
txa->midbuff, // pointer to input buffer
|
txa->midbuff, // pointer to input buffer
|
||||||
@ -549,7 +549,7 @@ void TXA::destroy_txa (TXA *txa)
|
|||||||
delete (txa->amsq);
|
delete (txa->amsq);
|
||||||
delete (txa->micmeter);
|
delete (txa->micmeter);
|
||||||
delete (txa->phrot);
|
delete (txa->phrot);
|
||||||
PANEL::destroy_panel (txa->panel);
|
delete (txa->panel);
|
||||||
delete (txa->gen0);
|
delete (txa->gen0);
|
||||||
delete (txa->rsmpin);
|
delete (txa->rsmpin);
|
||||||
delete[] (txa->midbuff);
|
delete[] (txa->midbuff);
|
||||||
@ -565,7 +565,7 @@ void TXA::flush_txa (TXA* txa)
|
|||||||
std::fill(txa->midbuff, txa->midbuff + 2 * txa->dsp_size * 2, 0);
|
std::fill(txa->midbuff, txa->midbuff + 2 * txa->dsp_size * 2, 0);
|
||||||
txa->rsmpin->flush();
|
txa->rsmpin->flush();
|
||||||
txa->gen0->flush();
|
txa->gen0->flush();
|
||||||
PANEL::flush_panel (txa->panel);
|
txa->panel->flush ();
|
||||||
txa->phrot->flush();
|
txa->phrot->flush();
|
||||||
txa->micmeter->flush ();
|
txa->micmeter->flush ();
|
||||||
txa->amsq->flush ();
|
txa->amsq->flush ();
|
||||||
@ -599,7 +599,7 @@ void xtxa (TXA* txa)
|
|||||||
{
|
{
|
||||||
txa->rsmpin->execute(); // input resampler
|
txa->rsmpin->execute(); // input resampler
|
||||||
txa->gen0->execute(); // input signal generator
|
txa->gen0->execute(); // input signal generator
|
||||||
PANEL::xpanel (txa->panel); // includes MIC gain
|
txa->panel->execute(); // includes MIC gain
|
||||||
txa->phrot->execute(); // phase rotator
|
txa->phrot->execute(); // phase rotator
|
||||||
txa->micmeter->execute (); // MIC meter
|
txa->micmeter->execute (); // MIC meter
|
||||||
txa->amsq->xcap (); // downward expander capture
|
txa->amsq->xcap (); // downward expander capture
|
||||||
@ -697,7 +697,7 @@ void TXA::setDSPSamplerate (TXA *txa, int dsp_rate)
|
|||||||
txa->rsmpin->setOutRate(txa->dsp_rate);
|
txa->rsmpin->setOutRate(txa->dsp_rate);
|
||||||
// dsp_rate blocks
|
// dsp_rate blocks
|
||||||
txa->gen0->setSamplerate(txa->dsp_rate);
|
txa->gen0->setSamplerate(txa->dsp_rate);
|
||||||
PANEL::setSamplerate_panel (txa->panel, txa->dsp_rate);
|
txa->panel->setSamplerate(txa->dsp_rate);
|
||||||
txa->phrot->setSamplerate(txa->dsp_rate);
|
txa->phrot->setSamplerate(txa->dsp_rate);
|
||||||
txa->micmeter->setSamplerate (txa->dsp_rate);
|
txa->micmeter->setSamplerate (txa->dsp_rate);
|
||||||
txa->amsq->setSamplerate (txa->dsp_rate);
|
txa->amsq->setSamplerate (txa->dsp_rate);
|
||||||
@ -758,8 +758,8 @@ void TXA::setDSPBuffsize (TXA *txa, int dsp_size)
|
|||||||
// dsp_size blocks
|
// dsp_size blocks
|
||||||
txa->gen0->setBuffers(txa->midbuff, txa->midbuff);
|
txa->gen0->setBuffers(txa->midbuff, txa->midbuff);
|
||||||
txa->gen0->setSize(txa->dsp_size);
|
txa->gen0->setSize(txa->dsp_size);
|
||||||
PANEL::setBuffers_panel (txa->panel, txa->midbuff, txa->midbuff);
|
txa->panel->setBuffers(txa->midbuff, txa->midbuff);
|
||||||
PANEL::setSize_panel (txa->panel, txa->dsp_size);
|
txa->panel->setSize(txa->dsp_size);
|
||||||
txa->phrot->setBuffers(txa->midbuff, txa->midbuff);
|
txa->phrot->setBuffers(txa->midbuff, txa->midbuff);
|
||||||
txa->phrot->setSize(txa->dsp_size);
|
txa->phrot->setSize(txa->dsp_size);
|
||||||
txa->micmeter->setBuffers (txa->midbuff);
|
txa->micmeter->setBuffers (txa->midbuff);
|
||||||
|
@ -66,6 +66,8 @@ public:
|
|||||||
int enum_gain,
|
int enum_gain,
|
||||||
double* pgain
|
double* pgain
|
||||||
);
|
);
|
||||||
|
METER(const METER&) = delete;
|
||||||
|
METER& operator=(const METER& other) = delete;
|
||||||
~METER() = default;
|
~METER() = default;
|
||||||
|
|
||||||
void flush();
|
void flush();
|
||||||
|
@ -32,103 +32,94 @@ warren@wpratt.com
|
|||||||
|
|
||||||
namespace WDSP {
|
namespace WDSP {
|
||||||
|
|
||||||
PANEL* PANEL::create_panel (
|
PANEL::PANEL(
|
||||||
int run,
|
int _run,
|
||||||
int size,
|
int _size,
|
||||||
float* in,
|
float* _in,
|
||||||
float* out,
|
float* _out,
|
||||||
double gain1,
|
double _gain1,
|
||||||
double gain2I,
|
double _gain2I,
|
||||||
double gain2Q,
|
double _gain2Q,
|
||||||
int inselect,
|
int _inselect,
|
||||||
int copy
|
int _copy
|
||||||
)
|
) :
|
||||||
|
run(_run),
|
||||||
|
size(_size),
|
||||||
|
in(_in),
|
||||||
|
out(_out),
|
||||||
|
gain1(_gain1),
|
||||||
|
gain2I(_gain2I),
|
||||||
|
gain2Q(_gain2Q),
|
||||||
|
inselect(_inselect),
|
||||||
|
copy(_copy)
|
||||||
{
|
{
|
||||||
PANEL* a = new PANEL;
|
|
||||||
a->run = run;
|
|
||||||
a->size = size;
|
|
||||||
a->in = in;
|
|
||||||
a->out = out;
|
|
||||||
a->gain1 = gain1;
|
|
||||||
a->gain2I = gain2I;
|
|
||||||
a->gain2Q = gain2Q;
|
|
||||||
a->inselect = inselect;
|
|
||||||
a->copy = copy;
|
|
||||||
return a;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void PANEL::destroy_panel (PANEL *a)
|
void PANEL::flush()
|
||||||
{
|
{
|
||||||
delete (a);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void PANEL::flush_panel (PANEL *)
|
void PANEL::execute()
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void PANEL::xpanel (PANEL *a)
|
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
double I, Q;
|
double I, Q;
|
||||||
double gainI = a->gain1 * a->gain2I;
|
double gainI = gain1 * gain2I;
|
||||||
double gainQ = a->gain1 * a->gain2Q;
|
double gainQ = gain1 * gain2Q;
|
||||||
// inselect is either 0(neither), 1(Q), 2(I), or 3(both)
|
// inselect is either 0(neither), 1(Q), 2(I), or 3(both)
|
||||||
switch (a->copy)
|
switch (copy)
|
||||||
{
|
{
|
||||||
case 0: // no copy
|
case 0: // no copy
|
||||||
for (i = 0; i < a->size; i++)
|
for (i = 0; i < size; i++)
|
||||||
{
|
{
|
||||||
I = a->in[2 * i + 0] * (a->inselect >> 1);
|
I = in[2 * i + 0] * (inselect >> 1);
|
||||||
Q = a->in[2 * i + 1] * (a->inselect & 1);
|
Q = in[2 * i + 1] * (inselect & 1);
|
||||||
a->out[2 * i + 0] = gainI * I;
|
out[2 * i + 0] = gainI * I;
|
||||||
a->out[2 * i + 1] = gainQ * Q;
|
out[2 * i + 1] = gainQ * Q;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 1: // copy I to Q (then Q == I)
|
case 1: // copy I to Q (then Q == I)
|
||||||
for (i = 0; i < a->size; i++)
|
for (i = 0; i < size; i++)
|
||||||
{
|
{
|
||||||
I = a->in[2 * i + 0] * (a->inselect >> 1);
|
I = in[2 * i + 0] * (inselect >> 1);
|
||||||
Q = I;
|
Q = I;
|
||||||
a->out[2 * i + 0] = gainI * I;
|
out[2 * i + 0] = gainI * I;
|
||||||
a->out[2 * i + 1] = gainQ * Q;
|
out[2 * i + 1] = gainQ * Q;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 2: // copy Q to I (then I == Q)
|
case 2: // copy Q to I (then I == Q)
|
||||||
for (i = 0; i < a->size; i++)
|
for (i = 0; i < size; i++)
|
||||||
{
|
{
|
||||||
Q = a->in[2 * i + 1] * (a->inselect & 1);
|
Q = in[2 * i + 1] * (inselect & 1);
|
||||||
I = Q;
|
I = Q;
|
||||||
a->out[2 * i + 0] = gainI * I;
|
out[2 * i + 0] = gainI * I;
|
||||||
a->out[2 * i + 1] = gainQ * Q;
|
out[2 * i + 1] = gainQ * Q;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 3: // reverse (I=>Q and Q=>I)
|
case 3: // reverse (I=>Q and Q=>I)
|
||||||
for (i = 0; i < a->size; i++)
|
for (i = 0; i < size; i++)
|
||||||
{
|
{
|
||||||
Q = a->in[2 * i + 0] * (a->inselect >> 1);
|
Q = in[2 * i + 0] * (inselect >> 1);
|
||||||
I = a->in[2 * i + 1] * (a->inselect & 1);
|
I = in[2 * i + 1] * (inselect & 1);
|
||||||
a->out[2 * i + 0] = gainI * I;
|
out[2 * i + 0] = gainI * I;
|
||||||
a->out[2 * i + 1] = gainQ * Q;
|
out[2 * i + 1] = gainQ * Q;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void PANEL::setBuffers_panel (PANEL *a, float* in, float* out)
|
void PANEL::setBuffers(float* _in, float* _out)
|
||||||
{
|
{
|
||||||
a->in = in;
|
in = _in;
|
||||||
a->out = out;
|
out = _out;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PANEL::setSamplerate_panel (PANEL *, int)
|
void PANEL::setSamplerate(int)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void PANEL::setSize_panel (PANEL *a, int size)
|
void PANEL::setSize(int _size)
|
||||||
{
|
{
|
||||||
a->size = size;
|
size = _size;
|
||||||
}
|
}
|
||||||
|
|
||||||
/********************************************************************************************************
|
/********************************************************************************************************
|
||||||
@ -137,54 +128,54 @@ void PANEL::setSize_panel (PANEL *a, int size)
|
|||||||
* *
|
* *
|
||||||
********************************************************************************************************/
|
********************************************************************************************************/
|
||||||
|
|
||||||
void PANEL::SetPanelRun (RXA& rxa, int run)
|
void PANEL::setRun(int _run)
|
||||||
{
|
{
|
||||||
rxa.panel->run = run;
|
run = _run;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PANEL::SetPanelSelect (RXA& rxa, int select)
|
void PANEL::setSelect(int _select)
|
||||||
{
|
{
|
||||||
rxa.panel->inselect = select;
|
inselect = _select;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PANEL::SetPanelGain1 (RXA& rxa, double gain)
|
void PANEL::setGain1(double _gain)
|
||||||
{
|
{
|
||||||
rxa.panel->gain1 = gain;
|
gain1 = _gain;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PANEL::SetPanelGain2 (RXA& rxa, double gainI, double gainQ)
|
void PANEL::setGain2(double _gainI, double _gainQ)
|
||||||
{
|
{
|
||||||
rxa.panel->gain2I = gainI;
|
gain2I = _gainI;
|
||||||
rxa.panel->gain2Q = gainQ;
|
gain2Q = _gainQ;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PANEL::SetPanelPan (RXA& rxa, double pan)
|
void PANEL::setPan(double _pan)
|
||||||
{
|
{
|
||||||
double gain1, gain2;
|
double gain1, gain2;
|
||||||
|
|
||||||
if (pan <= 0.5)
|
if (_pan <= 0.5)
|
||||||
{
|
{
|
||||||
gain1 = 1.0;
|
gain1 = 1.0;
|
||||||
gain2 = sin (pan * PI);
|
gain2 = sin (_pan * PI);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
gain1 = sin (pan * PI);
|
gain1 = sin (_pan * PI);
|
||||||
gain2 = 1.0;
|
gain2 = 1.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
rxa.panel->gain2I = gain1;
|
gain2I = gain1;
|
||||||
rxa.panel->gain2Q = gain2;
|
gain2Q = gain2;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PANEL::SetPanelCopy (RXA& rxa, int copy)
|
void PANEL::setCopy(int _copy)
|
||||||
{
|
{
|
||||||
rxa.panel->copy = copy;
|
copy = _copy;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PANEL::SetPanelBinaural (RXA& rxa, int bin)
|
void PANEL::setBinaural(int _bin)
|
||||||
{
|
{
|
||||||
rxa.panel->copy = 1 - bin;
|
copy = 1 - _bin;
|
||||||
}
|
}
|
||||||
|
|
||||||
/********************************************************************************************************
|
/********************************************************************************************************
|
||||||
@ -193,25 +184,14 @@ void PANEL::SetPanelBinaural (RXA& rxa, int bin)
|
|||||||
* *
|
* *
|
||||||
********************************************************************************************************/
|
********************************************************************************************************/
|
||||||
|
|
||||||
void PANEL::SetPanelRun (TXA& txa, int run)
|
void PANEL::setSelectTx(int _select)
|
||||||
{
|
{
|
||||||
txa.panel->run = run;
|
if (_select == 1)
|
||||||
}
|
copy = 3;
|
||||||
|
|
||||||
void PANEL::SetPanelGain1 (TXA& txa, double gain)
|
|
||||||
{
|
|
||||||
txa.panel->gain1 = gain;
|
|
||||||
//print_message ("micgainset.txt", "Set MIC Gain to", (int)(100.0 * gain), 0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
void PANEL::SetPanelSelect (TXA& txa, int select)
|
|
||||||
{
|
|
||||||
if (select == 1)
|
|
||||||
txa.panel->copy = 3;
|
|
||||||
else
|
else
|
||||||
txa.panel->copy = 0;
|
copy = 0;
|
||||||
|
|
||||||
txa.panel->inselect = select;
|
inselect = _select;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace WDSP
|
} // namespace WDSP
|
||||||
|
@ -48,7 +48,7 @@ public:
|
|||||||
int inselect;
|
int inselect;
|
||||||
int copy;
|
int copy;
|
||||||
|
|
||||||
static PANEL* create_panel (
|
PANEL(
|
||||||
int run,
|
int run,
|
||||||
int size,
|
int size,
|
||||||
float* in,
|
float* in,
|
||||||
@ -59,24 +59,25 @@ public:
|
|||||||
int inselect,
|
int inselect,
|
||||||
int copy
|
int copy
|
||||||
);
|
);
|
||||||
static void destroy_panel (PANEL *a);
|
PANEL(const PANEL&) = delete;
|
||||||
static void flush_panel (PANEL *a);
|
PANEL& operator=(const PANEL& other) = delete;
|
||||||
static void xpanel (PANEL *a);
|
~PANEL() = default;
|
||||||
static void setBuffers_panel (PANEL *a, float* in, float* out);
|
|
||||||
static void setSamplerate_panel (PANEL *a, int rate);
|
void flush();
|
||||||
static void setSize_panel (PANEL *a, int size);
|
void execute();
|
||||||
|
void setBuffers(float* in, float* out);
|
||||||
|
void setSamplerate(int rate);
|
||||||
|
void setSize(int size);
|
||||||
// RXA Properties
|
// RXA Properties
|
||||||
static void SetPanelRun (RXA& rxa, int run);
|
void setRun(int run);
|
||||||
static void SetPanelSelect (RXA& rxa, int select);
|
void setSelect(int select);
|
||||||
static void SetPanelGain1 (RXA& rxa, double gain);
|
void setGain1(double gain);
|
||||||
static void SetPanelGain2 (RXA& rxa, double gainI, double gainQ);
|
void setGain2(double gainI, double gainQ);
|
||||||
static void SetPanelPan (RXA& rxa, double pan);
|
void setPan(double pan);
|
||||||
static void SetPanelCopy (RXA& rxa, int copy);
|
void setCopy(int copy);
|
||||||
static void SetPanelBinaural (RXA& rxa, int bin);
|
void setBinaural(int bin);
|
||||||
// TXA Properties
|
// TXA Properties
|
||||||
static void SetPanelRun (TXA& txa, int run);
|
void setSelectTx(int select);
|
||||||
static void SetPanelGain1 (TXA& txa, double gain);
|
|
||||||
static void SetPanelSelect (TXA& txa, int select);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace WDSP
|
} // namespace WDSP
|
||||||
|
311
wdsp/ssql.cpp
311
wdsp/ssql.cpp
@ -117,127 +117,122 @@ void FTOV::execute()
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void SSQL::compute_ssql_slews(SSQL *a)
|
void SSQL::compute_slews()
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
double delta, theta;
|
double delta, theta;
|
||||||
delta = PI / (double)a->ntup;
|
delta = PI / (double) ntup;
|
||||||
theta = 0.0;
|
theta = 0.0;
|
||||||
for (i = 0; i <= a->ntup; i++)
|
for (int i = 0; i <= ntup; i++)
|
||||||
{
|
{
|
||||||
a->cup[i] = a->muted_gain + (1.0 - a->muted_gain) * 0.5 * (1.0 - cos(theta));
|
cup[i] = muted_gain + (1.0 - muted_gain) * 0.5 * (1.0 - cos(theta));
|
||||||
theta += delta;
|
theta += delta;
|
||||||
}
|
}
|
||||||
delta = PI / (double)a->ntdown;
|
delta = PI / (double)ntdown;
|
||||||
theta = 0.0;
|
theta = 0.0;
|
||||||
for (i = 0; i <= a->ntdown; i++)
|
for (int i = 0; i <= ntdown; i++)
|
||||||
{
|
{
|
||||||
a->cdown[i] = a->muted_gain + (1.0 - a->muted_gain) * 0.5 * (1.0 + cos(theta));
|
cdown[i] = muted_gain + (1.0 - muted_gain) * 0.5 * (1.0 + cos(theta));
|
||||||
theta += delta;
|
theta += delta;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SSQL::calc_ssql (SSQL *a)
|
void SSQL::calc()
|
||||||
{
|
{
|
||||||
a->b1 = new float[a->size * 2]; // (float*) malloc0 (a->size * sizeof (complex));
|
b1 = new float[size * 2]; // (float*) malloc0 (size * sizeof (complex));
|
||||||
a->dcbl = new CBL(1, a->size, a->in, a->b1, 0, a->rate, 0.02);
|
dcbl = new CBL(1, size, in, b1, 0, rate, 0.02);
|
||||||
a->ibuff = new float[a->size]; // (float*) malloc0 (a->size * sizeof (float));
|
ibuff = new float[size]; // (float*) malloc0 (size * sizeof (float));
|
||||||
a->ftovbuff = new float[a->size]; // (float*) malloc0(a->size * sizeof (float));
|
ftovbuff = new float[size]; // (float*) malloc0(size * sizeof (float));
|
||||||
a->cvtr = new FTOV(1, a->size, a->rate, a->ftov_rsize, a->ftov_fmax, a->ibuff, a->ftovbuff);
|
cvtr = new FTOV(1, size, rate, ftov_rsize, ftov_fmax, ibuff, ftovbuff);
|
||||||
a->lpbuff = new float[a->size]; // (float*) malloc0 (a->size * sizeof (float));
|
lpbuff = new float[size]; // (float*) malloc0 (size * sizeof (float));
|
||||||
a->filt = new DBQLP(1, a->size, a->ftovbuff, a->lpbuff, a->rate, 11.3, 1.0, 1.0, 1);
|
filt = new DBQLP(1, size, ftovbuff, lpbuff, rate, 11.3, 1.0, 1.0, 1);
|
||||||
a->wdbuff = new int[a->size]; // (int*) malloc0 (a->size * sizeof (int));
|
wdbuff = new int[size]; // (int*) malloc0 (size * sizeof (int));
|
||||||
a->tr_signal = new int[a->size]; // (int*) malloc0 (a->size * sizeof (int));
|
tr_signal = new int[size]; // (int*) malloc0 (size * sizeof (int));
|
||||||
// window detector
|
// window detector
|
||||||
a->wdmult = exp (-1.0 / (a->rate * a->wdtau));
|
wdmult = exp (-1.0 / (rate * wdtau));
|
||||||
a->wdaverage = 0.0;
|
wdaverage = 0.0;
|
||||||
// trigger
|
// trigger
|
||||||
a->tr_voltage = a->tr_thresh;
|
tr_voltage = tr_thresh;
|
||||||
a->mute_mult = 1.0 - exp (-1.0 / (a->rate * a->tr_tau_mute));
|
mute_mult = 1.0 - exp (-1.0 / (rate * tr_tau_mute));
|
||||||
a->unmute_mult = 1.0 - exp (-1.0 / (a->rate * a->tr_tau_unmute));
|
unmute_mult = 1.0 - exp (-1.0 / (rate * tr_tau_unmute));
|
||||||
// level change
|
// level change
|
||||||
a->ntup = (int)(a->tup * a->rate);
|
ntup = (int)(tup * rate);
|
||||||
a->ntdown = (int)(a->tdown * a->rate);
|
ntdown = (int)(tdown * rate);
|
||||||
a->cup = new float[a->ntup + 1]; // (float*) malloc0 ((a->ntup + 1) * sizeof (float));
|
cup = new float[ntup + 1]; // (float*) malloc0 ((ntup + 1) * sizeof (float));
|
||||||
a->cdown = new float[a->ntdown + 1]; // (float*) malloc0 ((a->ntdown + 1) * sizeof (float));
|
cdown = new float[ntdown + 1]; // (float*) malloc0 ((ntdown + 1) * sizeof (float));
|
||||||
compute_ssql_slews (a);
|
compute_slews();
|
||||||
// control
|
// control
|
||||||
a->state = 0;
|
state = 0;
|
||||||
a->count = 0;
|
count = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SSQL::decalc_ssql (SSQL *a)
|
void SSQL::decalc()
|
||||||
{
|
{
|
||||||
delete[] (a->tr_signal);
|
delete[] (tr_signal);
|
||||||
delete[] (a->wdbuff);
|
delete[] (wdbuff);
|
||||||
delete (a->filt);
|
delete (filt);
|
||||||
delete[] (a->lpbuff);
|
delete[] (lpbuff);
|
||||||
delete (a->cvtr);
|
delete (cvtr);
|
||||||
delete[] (a->ftovbuff);
|
delete[] (ftovbuff);
|
||||||
delete[] (a->ibuff);
|
delete[] (ibuff);
|
||||||
delete (a->dcbl);
|
delete (dcbl);
|
||||||
delete[] (a->b1);
|
delete[] (b1);
|
||||||
delete[] (a->cdown);
|
delete[] (cdown);
|
||||||
delete[] (a->cup);
|
delete[] (cup);
|
||||||
}
|
}
|
||||||
|
|
||||||
SSQL* SSQL::create_ssql (
|
SSQL::SSQL(
|
||||||
int run,
|
int _run,
|
||||||
int size,
|
int _size,
|
||||||
float* in,
|
float* _in,
|
||||||
float* out,
|
float* _out,
|
||||||
int rate,
|
int _rate,
|
||||||
double tup,
|
double _tup,
|
||||||
double tdown,
|
double _tdown,
|
||||||
double muted_gain,
|
double _muted_gain,
|
||||||
double tau_mute,
|
double _tau_mute,
|
||||||
double tau_unmute,
|
double _tau_unmute,
|
||||||
double wthresh,
|
double _wthresh,
|
||||||
double tr_thresh,
|
double _tr_thresh,
|
||||||
int rsize,
|
int _rsize,
|
||||||
double fmax
|
double _fmax
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
SSQL *a = new SSQL;
|
run = _run;
|
||||||
a->run = run;
|
size = _size;
|
||||||
a->size = size;
|
in = _in;
|
||||||
a->in = in;
|
out = _out;
|
||||||
a->out = out;
|
rate = _rate;
|
||||||
a->rate = rate;
|
tup = _tup;
|
||||||
a->tup = tup;
|
tdown = _tdown;
|
||||||
a->tdown = tdown;
|
muted_gain = _muted_gain;
|
||||||
a->muted_gain = muted_gain;
|
tr_tau_mute = _tau_mute;
|
||||||
a->tr_tau_mute = tau_mute;
|
tr_tau_unmute = _tau_unmute;
|
||||||
a->tr_tau_unmute = tau_unmute;
|
wthresh = _wthresh; // PRIMARY SQUELCH THRESHOLD CONTROL
|
||||||
a->wthresh = wthresh; // PRIMARY SQUELCH THRESHOLD CONTROL
|
tr_thresh = _tr_thresh; // value between tr_ss_unmute and tr_ss_mute, default = 0.8197
|
||||||
a->tr_thresh = tr_thresh; // value between tr_ss_unmute and tr_ss_mute, default = 0.8197
|
tr_ss_mute = 1.0;
|
||||||
a->tr_ss_mute = 1.0;
|
tr_ss_unmute = 0.3125;
|
||||||
a->tr_ss_unmute = 0.3125;
|
wdtau = 0.5;
|
||||||
a->wdtau = 0.5;
|
ftov_rsize = _rsize;
|
||||||
a->ftov_rsize = rsize;
|
ftov_fmax = _fmax;
|
||||||
a->ftov_fmax = fmax;
|
calc();
|
||||||
calc_ssql (a);
|
|
||||||
return a;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SSQL::destroy_ssql (SSQL *a)
|
SSQL::~SSQL()
|
||||||
{
|
{
|
||||||
decalc_ssql (a);
|
decalc();
|
||||||
delete (a);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SSQL::flush_ssql (SSQL *a)
|
void SSQL::flush()
|
||||||
{
|
{
|
||||||
|
std::fill(b1, b1 + size * 2, 0);
|
||||||
std::fill(a->b1, a->b1 + a->size * 2, 0);
|
dcbl->flush();
|
||||||
a->dcbl->flush();
|
memset (ibuff, 0, size * sizeof (float));
|
||||||
memset (a->ibuff, 0, a->size * sizeof (float));
|
memset (ftovbuff, 0, size * sizeof (float));
|
||||||
memset (a->ftovbuff, 0, a->size * sizeof (float));
|
cvtr->flush();
|
||||||
a->cvtr->flush();
|
memset (lpbuff, 0, size * sizeof (float));
|
||||||
memset (a->lpbuff, 0, a->size * sizeof (float));
|
filt->flush();
|
||||||
a->filt->flush();
|
memset (wdbuff, 0, size * sizeof (int));
|
||||||
memset (a->wdbuff, 0, a->size * sizeof (int));
|
memset (tr_signal, 0, size * sizeof (int));
|
||||||
memset (a->tr_signal, 0, a->size * sizeof (int));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
enum _ssqlstate
|
enum _ssqlstate
|
||||||
@ -248,98 +243,98 @@ enum _ssqlstate
|
|||||||
DECREASE
|
DECREASE
|
||||||
};
|
};
|
||||||
|
|
||||||
void SSQL::xssql (SSQL *a)
|
void SSQL::execute()
|
||||||
{
|
{
|
||||||
if (a->run)
|
if (run)
|
||||||
{
|
{
|
||||||
a->dcbl->execute(); // dc block the input signal
|
dcbl->execute(); // dc block the input signal
|
||||||
for (int i = 0; i < a->size; i++) // extract 'I' component
|
for (int i = 0; i < size; i++) // extract 'I' component
|
||||||
a->ibuff[i] = a->b1[2 * i];
|
ibuff[i] = b1[2 * i];
|
||||||
a->cvtr->execute(); // convert frequency to voltage, ignoring amplitude
|
cvtr->execute(); // convert frequency to voltage, ignoring amplitude
|
||||||
// WriteAudioWDSP(20.0, a->rate, a->size, a->ftovbuff, 4, 0.99);
|
// WriteAudioWDSP(20.0, rate, size, ftovbuff, 4, 0.99);
|
||||||
a->filt->execute(); // low-pass filter
|
filt->execute(); // low-pass filter
|
||||||
// WriteAudioWDSP(20.0, a->rate, a->size, a->lpbuff, 4, 0.99);
|
// WriteAudioWDSP(20.0, rate, size, lpbuff, 4, 0.99);
|
||||||
// calculate the output of the window detector for each sample
|
// calculate the output of the window detector for each sample
|
||||||
for (int i = 0; i < a->size; i++)
|
for (int i = 0; i < size; i++)
|
||||||
{
|
{
|
||||||
a->wdaverage = a->wdmult * a->wdaverage + (1.0 - a->wdmult) * a->lpbuff[i];
|
wdaverage = wdmult * wdaverage + (1.0 - wdmult) * lpbuff[i];
|
||||||
if ((a->lpbuff[i] - a->wdaverage) > a->wthresh || (a->wdaverage - a->lpbuff[i]) > a->wthresh)
|
if ((lpbuff[i] - wdaverage) > wthresh || (wdaverage - lpbuff[i]) > wthresh)
|
||||||
a->wdbuff[i] = 0; // signal unmute
|
wdbuff[i] = 0; // signal unmute
|
||||||
else
|
else
|
||||||
a->wdbuff[i] = 1; // signal mute
|
wdbuff[i] = 1; // signal mute
|
||||||
}
|
}
|
||||||
// calculate the trigger signal for each sample
|
// calculate the trigger signal for each sample
|
||||||
for (int i = 0; i < a->size; i++)
|
for (int i = 0; i < size; i++)
|
||||||
{
|
{
|
||||||
if (a->wdbuff[i] == 0)
|
if (wdbuff[i] == 0)
|
||||||
a->tr_voltage += (a->tr_ss_unmute - a->tr_voltage) * a->unmute_mult;
|
tr_voltage += (tr_ss_unmute - tr_voltage) * unmute_mult;
|
||||||
if (a->wdbuff[i] == 1)
|
if (wdbuff[i] == 1)
|
||||||
a->tr_voltage += (a->tr_ss_mute - a->tr_voltage) * a->mute_mult;
|
tr_voltage += (tr_ss_mute - tr_voltage) * mute_mult;
|
||||||
if (a->tr_voltage > a->tr_thresh) a->tr_signal[i] = 0; // muted
|
if (tr_voltage > tr_thresh) tr_signal[i] = 0; // muted
|
||||||
else a->tr_signal[i] = 1; // unmuted
|
else tr_signal[i] = 1; // unmuted
|
||||||
}
|
}
|
||||||
// execute state machine; calculate audio output
|
// execute state machine; calculate audio output
|
||||||
for (int i = 0; i < a->size; i++)
|
for (int i = 0; i < size; i++)
|
||||||
{
|
{
|
||||||
switch (a->state)
|
switch (state)
|
||||||
{
|
{
|
||||||
case MUTED:
|
case MUTED:
|
||||||
if (a->tr_signal[i] == 1)
|
if (tr_signal[i] == 1)
|
||||||
{
|
{
|
||||||
a->state = INCREASE;
|
state = INCREASE;
|
||||||
a->count = a->ntup;
|
count = ntup;
|
||||||
}
|
}
|
||||||
a->out[2 * i + 0] = a->muted_gain * a->in[2 * i + 0];
|
out[2 * i + 0] = muted_gain * in[2 * i + 0];
|
||||||
a->out[2 * i + 1] = a->muted_gain * a->in[2 * i + 1];
|
out[2 * i + 1] = muted_gain * in[2 * i + 1];
|
||||||
break;
|
break;
|
||||||
case INCREASE:
|
case INCREASE:
|
||||||
a->out[2 * i + 0] = a->in[2 * i + 0] * a->cup[a->ntup - a->count];
|
out[2 * i + 0] = in[2 * i + 0] * cup[ntup - count];
|
||||||
a->out[2 * i + 1] = a->in[2 * i + 1] * a->cup[a->ntup - a->count];
|
out[2 * i + 1] = in[2 * i + 1] * cup[ntup - count];
|
||||||
if (a->count-- == 0)
|
if (count-- == 0)
|
||||||
a->state = UNMUTED;
|
state = UNMUTED;
|
||||||
break;
|
break;
|
||||||
case UNMUTED:
|
case UNMUTED:
|
||||||
if (a->tr_signal[i] == 0)
|
if (tr_signal[i] == 0)
|
||||||
{
|
{
|
||||||
a->state = DECREASE;
|
state = DECREASE;
|
||||||
a->count = a->ntdown;
|
count = ntdown;
|
||||||
}
|
}
|
||||||
a->out[2 * i + 0] = a->in[2 * i + 0];
|
out[2 * i + 0] = in[2 * i + 0];
|
||||||
a->out[2 * i + 1] = a->in[2 * i + 1];
|
out[2 * i + 1] = in[2 * i + 1];
|
||||||
break;
|
break;
|
||||||
case DECREASE:
|
case DECREASE:
|
||||||
a->out[2 * i + 0] = a->in[2 * i + 0] * a->cdown[a->ntdown - a->count];
|
out[2 * i + 0] = in[2 * i + 0] * cdown[ntdown - count];
|
||||||
a->out[2 * i + 1] = a->in[2 * i + 1] * a->cdown[a->ntdown - a->count];
|
out[2 * i + 1] = in[2 * i + 1] * cdown[ntdown - count];
|
||||||
if (a->count-- == 0)
|
if (count-- == 0)
|
||||||
a->state = MUTED;
|
state = MUTED;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (a->in != a->out)
|
else if (in != out)
|
||||||
std::copy(a->in, a->in + a->size * 2, a->out);
|
std::copy(in, in + size * 2, out);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SSQL::setBuffers_ssql (SSQL *a, float* in, float* out)
|
void SSQL::setBuffers(float* _in, float* _out)
|
||||||
{
|
{
|
||||||
decalc_ssql (a);
|
decalc();
|
||||||
a->in = in;
|
in = _in;
|
||||||
a->out = out;
|
out = _out;
|
||||||
calc_ssql (a);
|
calc();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SSQL::setSamplerate_ssql (SSQL *a, int rate)
|
void SSQL::setSamplerate(int _rate)
|
||||||
{
|
{
|
||||||
decalc_ssql (a);
|
decalc();
|
||||||
a->rate = rate;
|
rate = _rate;
|
||||||
calc_ssql (a);
|
calc();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SSQL::setSize_ssql (SSQL *a, int size)
|
void SSQL::setSize(int _size)
|
||||||
{
|
{
|
||||||
decalc_ssql (a);
|
decalc();
|
||||||
a->size = size;
|
size = _size;
|
||||||
calc_ssql (a);
|
calc();
|
||||||
}
|
}
|
||||||
|
|
||||||
/********************************************************************************************************
|
/********************************************************************************************************
|
||||||
@ -348,34 +343,32 @@ void SSQL::setSize_ssql (SSQL *a, int size)
|
|||||||
* *
|
* *
|
||||||
********************************************************************************************************/
|
********************************************************************************************************/
|
||||||
|
|
||||||
void SSQL::SetSSQLRun (RXA& rxa, int run)
|
void SSQL::setRun(int _run)
|
||||||
{
|
{
|
||||||
rxa.ssql->run = run;
|
run = _run;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SSQL::SetSSQLThreshold (RXA& rxa, double threshold)
|
void SSQL::setThreshold(double _threshold)
|
||||||
{
|
{
|
||||||
// 'threshold' should be between 0.0 and 1.0
|
// 'threshold' should be between 0.0 and 1.0
|
||||||
// WU2O testing: 0.16 is a good default for 'threshold'; => 0.08 for 'wthresh'
|
// WU2O testing: 0.16 is a good default for 'threshold'; => 0.08 for 'wthresh'
|
||||||
rxa.ssql->wthresh = threshold / 2.0;
|
wthresh = _threshold / 2.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SSQL::SetSSQLTauMute (RXA& rxa, double tau_mute)
|
void SSQL::setTauMute(double _tau_mute)
|
||||||
{
|
{
|
||||||
// reasonable (wide) range is 0.1 to 2.0
|
// reasonable (wide) range is 0.1 to 2.0
|
||||||
// WU2O testing: 0.1 is good default value
|
// WU2O testing: 0.1 is good default value
|
||||||
SSQL *a = rxa.ssql;
|
tr_tau_mute = _tau_mute;
|
||||||
a->tr_tau_mute = tau_mute;
|
mute_mult = 1.0 - exp (-1.0 / (rate * tr_tau_mute));
|
||||||
a->mute_mult = 1.0 - exp (-1.0 / (a->rate * a->tr_tau_mute));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SSQL::SetSSQLTauUnMute (RXA& rxa, double tau_unmute)
|
void SSQL::setTauUnMute(double _tau_unmute)
|
||||||
{
|
{
|
||||||
// reasonable (wide) range is 0.1 to 1.0
|
// reasonable (wide) range is 0.1 to 1.0
|
||||||
// WU2O testing: 0.1 is good default value
|
// WU2O testing: 0.1 is good default value
|
||||||
SSQL *a = rxa.ssql;
|
tr_tau_unmute = _tau_unmute;
|
||||||
a->tr_tau_unmute = tau_unmute;
|
unmute_mult = 1.0 - exp (-1.0 / (rate * tr_tau_unmute));
|
||||||
a->unmute_mult = 1.0 - exp (-1.0 / (a->rate * a->tr_tau_unmute));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace WDSP
|
} // namespace WDSP
|
||||||
|
@ -117,7 +117,7 @@ public:
|
|||||||
double unmute_mult; // multiplier for successive voltage calcs when unmuted
|
double unmute_mult; // multiplier for successive voltage calcs when unmuted
|
||||||
int* tr_signal; // trigger signal, 0 or 1
|
int* tr_signal; // trigger signal, 0 or 1
|
||||||
|
|
||||||
static SSQL* create_ssql (
|
SSQL(
|
||||||
int run,
|
int run,
|
||||||
int size,
|
int size,
|
||||||
float* in,
|
float* in,
|
||||||
@ -133,22 +133,25 @@ public:
|
|||||||
int rsize,
|
int rsize,
|
||||||
double fmax
|
double fmax
|
||||||
);
|
);
|
||||||
static void destroy_ssql (SSQL *a);
|
SSQL(const SSQL&) = delete;
|
||||||
static void flush_ssql (SSQL *a);
|
SSQL& operator=(const SSQL& other) = delete;
|
||||||
static void xssql (SSQL *a);
|
~SSQL();
|
||||||
static void setBuffers_ssql (SSQL *a, float* in, float* out);
|
|
||||||
static void setSamplerate_ssql (SSQL *a, int rate);
|
void flush();
|
||||||
static void setSize_ssql (SSQL *a, int size);
|
void execute();
|
||||||
|
void setBuffers(float* in, float* out);
|
||||||
|
void setSamplerate(int rate);
|
||||||
|
void setSize(int size);
|
||||||
// RXA Properties
|
// RXA Properties
|
||||||
static void SetSSQLRun (RXA& rxa, int run);
|
void setRun(int run);
|
||||||
static void SetSSQLThreshold (RXA& rxa, double threshold);
|
void setThreshold(double threshold);
|
||||||
static void SetSSQLTauMute (RXA& rxa, double tau_mute);
|
void setTauMute(double tau_mute);
|
||||||
static void SetSSQLTauUnMute (RXA& rxa, double tau_unmute);
|
void setTauUnMute(double tau_unmute);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static void compute_ssql_slews(SSQL *a);
|
void compute_slews();
|
||||||
static void calc_ssql (SSQL *a);
|
void calc();
|
||||||
static void decalc_ssql (SSQL *a);
|
void decalc();
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace WDSP
|
} // namespace WDSP
|
||||||
|
Loading…
Reference in New Issue
Block a user