mirror of
https://github.com/f4exb/sdrangel.git
synced 2024-11-25 01:18:38 -05:00
WDSP: impulse responses refactoring (5)
This commit is contained in:
parent
12f4d0a0fd
commit
ef0255f2bb
@ -1005,7 +1005,7 @@ void RXA::updateNBPFilters()
|
|||||||
if (a->fnfrun)
|
if (a->fnfrun)
|
||||||
{
|
{
|
||||||
a->calc_impulse();
|
a->calc_impulse();
|
||||||
a->fircore->setImpulse(a->impulse.data(), 1);
|
a->fircore->setImpulse(a->impulse, 1);
|
||||||
}
|
}
|
||||||
if (b->bpsnba->fnfrun)
|
if (b->bpsnba->fnfrun)
|
||||||
{
|
{
|
||||||
@ -1096,7 +1096,7 @@ void RXA::nbpSetNotchesRun(int _run)
|
|||||||
b->fnfrun = a->master_run;
|
b->fnfrun = a->master_run;
|
||||||
bpsnbaCheck(mode, _run);
|
bpsnbaCheck(mode, _run);
|
||||||
b->calc_impulse(); // recalc nbp impulse response
|
b->calc_impulse(); // recalc nbp impulse response
|
||||||
b->fircore->setImpulse(b->impulse.data(), 0); // calculate new filter masks
|
b->fircore->setImpulse(b->impulse, 0); // calculate new filter masks
|
||||||
bpsnbaSet();
|
bpsnbaSet();
|
||||||
b->fircore->setUpdate(); // apply new filter masks
|
b->fircore->setUpdate(); // apply new filter masks
|
||||||
}
|
}
|
||||||
@ -1113,7 +1113,7 @@ void RXA::nbpSetWindow(int _wintype)
|
|||||||
{
|
{
|
||||||
a->wintype = _wintype;
|
a->wintype = _wintype;
|
||||||
a->calc_impulse();
|
a->calc_impulse();
|
||||||
a->fircore->setImpulse(a->impulse.data(), 1);
|
a->fircore->setImpulse(a->impulse, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (b->wintype != _wintype)
|
if (b->wintype != _wintype)
|
||||||
@ -1134,7 +1134,7 @@ void RXA::nbpSetAutoIncrease(int _autoincr)
|
|||||||
{
|
{
|
||||||
a->autoincr = _autoincr;
|
a->autoincr = _autoincr;
|
||||||
a->calc_impulse();
|
a->calc_impulse();
|
||||||
a->fircore->setImpulse(a->impulse.data(), 1);
|
a->fircore->setImpulse(a->impulse, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (b->autoincr != _autoincr)
|
if (b->autoincr != _autoincr)
|
||||||
|
@ -926,7 +926,7 @@ void TXA::setBandpassNC(int _nc)
|
|||||||
1,
|
1,
|
||||||
a->gain / (double)(2 * a->size)
|
a->gain / (double)(2 * a->size)
|
||||||
);
|
);
|
||||||
a->fircore->setNc(a->nc, impulse.data());
|
a->fircore->setNc(impulse);
|
||||||
}
|
}
|
||||||
|
|
||||||
a = bp1;
|
a = bp1;
|
||||||
@ -945,7 +945,7 @@ void TXA::setBandpassNC(int _nc)
|
|||||||
1,
|
1,
|
||||||
a->gain / (double)(2 * a->size)
|
a->gain / (double)(2 * a->size)
|
||||||
);
|
);
|
||||||
a->fircore->setNc(a->nc, impulse.data());
|
a->fircore->setNc(impulse);
|
||||||
}
|
}
|
||||||
|
|
||||||
a = bp2;
|
a = bp2;
|
||||||
@ -964,7 +964,7 @@ void TXA::setBandpassNC(int _nc)
|
|||||||
1,
|
1,
|
||||||
a->gain / (double)(2 * a->size)
|
a->gain / (double)(2 * a->size)
|
||||||
);
|
);
|
||||||
a->fircore->setNc(a->nc, impulse.data());
|
a->fircore->setNc(impulse);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ BANDPASS::BANDPASS(
|
|||||||
1,
|
1,
|
||||||
gain / (double)(2 * size)
|
gain / (double)(2 * size)
|
||||||
);
|
);
|
||||||
fircore = new FIRCORE(size, in, out, nc, mp, impulse.data());
|
fircore = new FIRCORE(size, in, out, mp, impulse);
|
||||||
}
|
}
|
||||||
|
|
||||||
BANDPASS::~BANDPASS()
|
BANDPASS::~BANDPASS()
|
||||||
@ -119,7 +119,7 @@ void BANDPASS::setSamplerate(int _rate)
|
|||||||
1,
|
1,
|
||||||
gain / (double) (2 * size)
|
gain / (double) (2 * size)
|
||||||
);
|
);
|
||||||
fircore->setImpulse(impulse.data(), 1);
|
fircore->setImpulse(impulse, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BANDPASS::setSize(int _size)
|
void BANDPASS::setSize(int _size)
|
||||||
@ -139,7 +139,7 @@ void BANDPASS::setSize(int _size)
|
|||||||
1,
|
1,
|
||||||
gain / (double) (2 * size)
|
gain / (double) (2 * size)
|
||||||
);
|
);
|
||||||
fircore->setImpulse(impulse.data(), 1);
|
fircore->setImpulse(impulse, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BANDPASS::setGain(double _gain, int _update)
|
void BANDPASS::setGain(double _gain, int _update)
|
||||||
@ -156,7 +156,7 @@ void BANDPASS::setGain(double _gain, int _update)
|
|||||||
1,
|
1,
|
||||||
gain / (double) (2 * size)
|
gain / (double) (2 * size)
|
||||||
);
|
);
|
||||||
fircore->setImpulse(impulse.data(), _update);
|
fircore->setImpulse(impulse, _update);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BANDPASS::calcBandpassFilter(double _f_low, double _f_high, double _gain)
|
void BANDPASS::calcBandpassFilter(double _f_low, double _f_high, double _gain)
|
||||||
@ -177,7 +177,7 @@ void BANDPASS::calcBandpassFilter(double _f_low, double _f_high, double _gain)
|
|||||||
1,
|
1,
|
||||||
gain / (double)(2 * size)
|
gain / (double)(2 * size)
|
||||||
);
|
);
|
||||||
fircore->setImpulse(impulse.data(), 1);
|
fircore->setImpulse(impulse, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -203,7 +203,7 @@ void BANDPASS::setBandpassFreqs(double _f_low, double _f_high)
|
|||||||
gain / (double)(2 * size)
|
gain / (double)(2 * size)
|
||||||
);
|
);
|
||||||
|
|
||||||
fircore->setImpulse(impulse.data(), 0);
|
fircore->setImpulse(impulse, 0);
|
||||||
f_low = _f_low;
|
f_low = _f_low;
|
||||||
f_high = _f_high;
|
f_high = _f_high;
|
||||||
fircore->setUpdate();
|
fircore->setUpdate();
|
||||||
@ -227,7 +227,7 @@ void BANDPASS::SetBandpassNC(int _nc)
|
|||||||
1,
|
1,
|
||||||
gain / (double)( 2 * size)
|
gain / (double)( 2 * size)
|
||||||
);
|
);
|
||||||
fircore->setNc(nc, impulse.data());
|
fircore->setNc(impulse);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -176,7 +176,7 @@ void BPSNBA::recalc_bpsnba_filter(int update)
|
|||||||
b->gain = gain;
|
b->gain = gain;
|
||||||
b->autoincr = autoincr;
|
b->autoincr = autoincr;
|
||||||
b->calc_impulse();
|
b->calc_impulse();
|
||||||
b->fircore->setImpulse(b->impulse.data(), update);
|
b->fircore->setImpulse(b->impulse, update);
|
||||||
}
|
}
|
||||||
|
|
||||||
/********************************************************************************************************
|
/********************************************************************************************************
|
||||||
|
@ -37,7 +37,7 @@ void CFIR::calc()
|
|||||||
std::vector<float> impulse;
|
std::vector<float> impulse;
|
||||||
scale = 1.0 / (float)(2 * size);
|
scale = 1.0 / (float)(2 * size);
|
||||||
cfir_impulse (impulse, nc, DD, R, Pairs, runrate, cicrate, cutoff, xtype, xbw, 1, scale, wintype);
|
cfir_impulse (impulse, nc, DD, R, Pairs, runrate, cicrate, cutoff, xtype, xbw, 1, scale, wintype);
|
||||||
p = new FIRCORE(size, in, out, nc, mp, impulse.data());
|
p = new FIRCORE(size, in, out, mp, impulse);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CFIR::decalc()
|
void CFIR::decalc()
|
||||||
|
@ -68,16 +68,16 @@ EMPHP::EMPHP(
|
|||||||
FCurve::fc_impulse (
|
FCurve::fc_impulse (
|
||||||
impulse,
|
impulse,
|
||||||
nc,
|
nc,
|
||||||
f_low,
|
(float) f_low,
|
||||||
f_high,
|
(float) f_high,
|
||||||
-20.0 * log10(f_high / f_low),
|
(float) (-20.0 * log10(f_high / f_low)),
|
||||||
0.0,
|
0.0,
|
||||||
ctype,
|
ctype,
|
||||||
rate,
|
(float) rate,
|
||||||
1.0 / (2.0 * size),
|
(float) (1.0 / (2.0 * size)),
|
||||||
0, 0
|
0, 0
|
||||||
);
|
);
|
||||||
p = new FIRCORE(size, in, out, nc, mp, impulse.data());
|
p = new FIRCORE(size, in, out, mp, impulse);
|
||||||
}
|
}
|
||||||
|
|
||||||
EMPHP::~EMPHP()
|
EMPHP::~EMPHP()
|
||||||
@ -121,7 +121,7 @@ void EMPHP::setSamplerate(int _rate)
|
|||||||
1.0 / (2.0 * size),
|
1.0 / (2.0 * size),
|
||||||
0, 0
|
0, 0
|
||||||
);
|
);
|
||||||
p->setImpulse(impulse.data(), 1);
|
p->setImpulse(impulse, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EMPHP::setSize(int _size)
|
void EMPHP::setSize(int _size)
|
||||||
@ -142,7 +142,7 @@ void EMPHP::setSize(int _size)
|
|||||||
0,
|
0,
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
p->setImpulse(impulse.data(), 1);
|
p->setImpulse(impulse, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/********************************************************************************************************
|
/********************************************************************************************************
|
||||||
@ -174,17 +174,17 @@ void EMPHP::setNC(int _nc)
|
|||||||
FCurve::fc_impulse (
|
FCurve::fc_impulse (
|
||||||
impulse,
|
impulse,
|
||||||
nc,
|
nc,
|
||||||
f_low,
|
(float) f_low,
|
||||||
f_high,
|
(float) f_high,
|
||||||
-20.0 * log10(f_high / f_low),
|
(float) (-20.0 * log10(f_high / f_low)),
|
||||||
0.0,
|
0.0,
|
||||||
ctype,
|
ctype,
|
||||||
rate,
|
(float) rate,
|
||||||
1.0 / (2.0 * size),
|
(float) (1.0 / (2.0 * size)),
|
||||||
0,
|
0,
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
p->setNc(nc, impulse.data());
|
p->setNc(impulse);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -208,7 +208,7 @@ void EMPHP::setFreqs(double low, double high)
|
|||||||
0,
|
0,
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
p->setImpulse(impulse.data(), 1);
|
p->setImpulse(impulse, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
18
wdsp/eqp.cpp
18
wdsp/eqp.cpp
@ -244,7 +244,7 @@ EQP::EQP(
|
|||||||
wintype = _wintype;
|
wintype = _wintype;
|
||||||
samplerate = (double) _samplerate;
|
samplerate = (double) _samplerate;
|
||||||
eq_impulse (impulse, nc, nfreqs, F.data(), G.data(), samplerate, 1.0 / (2.0 * size), ctfmode, wintype);
|
eq_impulse (impulse, nc, nfreqs, F.data(), G.data(), samplerate, 1.0 / (2.0 * size), ctfmode, wintype);
|
||||||
fircore = new FIRCORE(size, in, out, nc, mp, impulse.data());
|
fircore = new FIRCORE(size, in, out, mp, impulse);
|
||||||
}
|
}
|
||||||
|
|
||||||
EQP::~EQP()
|
EQP::~EQP()
|
||||||
@ -277,7 +277,7 @@ void EQP::setSamplerate(int rate)
|
|||||||
std::vector<float> impulse;
|
std::vector<float> impulse;
|
||||||
samplerate = rate;
|
samplerate = rate;
|
||||||
eq_impulse (impulse, nc, nfreqs, F.data(), G.data(), samplerate, 1.0 / (2.0 * size), ctfmode, wintype);
|
eq_impulse (impulse, nc, nfreqs, F.data(), G.data(), samplerate, 1.0 / (2.0 * size), ctfmode, wintype);
|
||||||
fircore->setImpulse(impulse.data(), 1);
|
fircore->setImpulse(impulse, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EQP::setSize(int _size)
|
void EQP::setSize(int _size)
|
||||||
@ -286,7 +286,7 @@ void EQP::setSize(int _size)
|
|||||||
size = _size;
|
size = _size;
|
||||||
fircore->setSize(size);
|
fircore->setSize(size);
|
||||||
eq_impulse (impulse, nc, nfreqs, F.data(), G.data(), samplerate, 1.0 / (2.0 * size), ctfmode, wintype);
|
eq_impulse (impulse, nc, nfreqs, F.data(), G.data(), samplerate, 1.0 / (2.0 * size), ctfmode, wintype);
|
||||||
fircore->setImpulse(impulse.data(), 1);
|
fircore->setImpulse(impulse, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/********************************************************************************************************
|
/********************************************************************************************************
|
||||||
@ -308,7 +308,7 @@ void EQP::setNC(int _nc)
|
|||||||
{
|
{
|
||||||
nc = _nc;
|
nc = _nc;
|
||||||
eq_impulse (impulse, nc, nfreqs, F.data(), G.data(), samplerate, 1.0 / (2.0 * size), ctfmode, wintype);
|
eq_impulse (impulse, nc, nfreqs, F.data(), G.data(), samplerate, 1.0 / (2.0 * size), ctfmode, wintype);
|
||||||
fircore->setNc(nc, impulse.data());
|
fircore->setNc(impulse);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -330,7 +330,7 @@ void EQP::setProfile(int _nfreqs, const float* _F, const float* _G)
|
|||||||
std::copy(_F, _F + (_nfreqs + 1), F.begin());
|
std::copy(_F, _F + (_nfreqs + 1), F.begin());
|
||||||
std::copy(_G, _G + (_nfreqs + 1), G.begin());
|
std::copy(_G, _G + (_nfreqs + 1), G.begin());
|
||||||
eq_impulse (impulse, nc, nfreqs, F.data(), G.data(), samplerate, 1.0 / (2.0 * size), ctfmode, wintype);
|
eq_impulse (impulse, nc, nfreqs, F.data(), G.data(), samplerate, 1.0 / (2.0 * size), ctfmode, wintype);
|
||||||
fircore->setImpulse(impulse.data(), 1);
|
fircore->setImpulse(impulse, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EQP::setCtfmode(int _mode)
|
void EQP::setCtfmode(int _mode)
|
||||||
@ -338,7 +338,7 @@ void EQP::setCtfmode(int _mode)
|
|||||||
std::vector<float> impulse;
|
std::vector<float> impulse;
|
||||||
ctfmode = _mode;
|
ctfmode = _mode;
|
||||||
eq_impulse (impulse, nc, nfreqs, F.data(), G.data(), samplerate, 1.0 / (2.0 * size), ctfmode, wintype);
|
eq_impulse (impulse, nc, nfreqs, F.data(), G.data(), samplerate, 1.0 / (2.0 * size), ctfmode, wintype);
|
||||||
fircore->setImpulse(impulse.data(), 1);
|
fircore->setImpulse(impulse, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EQP::setWintype(int _wintype)
|
void EQP::setWintype(int _wintype)
|
||||||
@ -346,7 +346,7 @@ void EQP::setWintype(int _wintype)
|
|||||||
std::vector<float> impulse;
|
std::vector<float> impulse;
|
||||||
wintype = _wintype;
|
wintype = _wintype;
|
||||||
eq_impulse (impulse, nc, nfreqs, F.data(), G.data(), samplerate, 1.0 / (2.0 * size), ctfmode, wintype);
|
eq_impulse (impulse, nc, nfreqs, F.data(), G.data(), samplerate, 1.0 / (2.0 * size), ctfmode, wintype);
|
||||||
fircore->setImpulse(impulse.data(), 1);
|
fircore->setImpulse(impulse, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EQP::setGrphEQ(const int *rxeq)
|
void EQP::setGrphEQ(const int *rxeq)
|
||||||
@ -366,7 +366,7 @@ void EQP::setGrphEQ(const int *rxeq)
|
|||||||
G[4] = (float)rxeq[3];
|
G[4] = (float)rxeq[3];
|
||||||
ctfmode = 0;
|
ctfmode = 0;
|
||||||
eq_impulse (impulse, nc, nfreqs, F.data(), G.data(), samplerate, 1.0 / (2.0 * size), ctfmode, wintype);
|
eq_impulse (impulse, nc, nfreqs, F.data(), G.data(), samplerate, 1.0 / (2.0 * size), ctfmode, wintype);
|
||||||
fircore->setImpulse(impulse.data(), 1);
|
fircore->setImpulse(impulse, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EQP::setGrphEQ10(const int *rxeq)
|
void EQP::setGrphEQ10(const int *rxeq)
|
||||||
@ -389,7 +389,7 @@ void EQP::setGrphEQ10(const int *rxeq)
|
|||||||
G[i] = (float)rxeq[i];
|
G[i] = (float)rxeq[i];
|
||||||
ctfmode = 0;
|
ctfmode = 0;
|
||||||
eq_impulse (impulse, nc, nfreqs, F.data(), G.data(), samplerate, 1.0 / (2.0 * size), ctfmode, wintype);
|
eq_impulse (impulse, nc, nfreqs, F.data(), G.data(), samplerate, 1.0 / (2.0 * size), ctfmode, wintype);
|
||||||
fircore->setImpulse(impulse.data(), 1);
|
fircore->setImpulse(impulse, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace WDSP
|
} // namespace WDSP
|
||||||
|
@ -99,7 +99,7 @@ void FIRCORE::calc(int _flip)
|
|||||||
if (mp)
|
if (mp)
|
||||||
FIR::mp_imp (nc, impulse, imp, 16, 0);
|
FIR::mp_imp (nc, impulse, imp, 16, 0);
|
||||||
else
|
else
|
||||||
std::copy(impulse.begin(), impulse.begin() + nc * 2, imp.begin());
|
std::copy(impulse.begin(), impulse.end(), imp.begin());
|
||||||
|
|
||||||
for (int i = 0; i < nfor; i++)
|
for (int i = 0; i < nfor; i++)
|
||||||
{
|
{
|
||||||
@ -122,20 +122,19 @@ FIRCORE::FIRCORE(
|
|||||||
int _size,
|
int _size,
|
||||||
float* _in,
|
float* _in,
|
||||||
float* _out,
|
float* _out,
|
||||||
int _nc,
|
|
||||||
int _mp,
|
int _mp,
|
||||||
const float* _impulse
|
const std::vector<float>& _impulse
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
size = _size;
|
size = _size;
|
||||||
in = _in;
|
in = _in;
|
||||||
out = _out;
|
out = _out;
|
||||||
nc = _nc;
|
nc = (int) (_impulse.size() / 2);
|
||||||
mp = _mp;
|
mp = _mp;
|
||||||
plan();
|
plan();
|
||||||
impulse.resize(nc * 2);
|
impulse.resize(_impulse.size());
|
||||||
imp.resize(nc * 2);
|
imp.resize(_impulse.size());
|
||||||
std::copy(_impulse, _impulse + nc * 2, impulse.begin());
|
std::copy(_impulse.begin(), _impulse.end(), impulse.begin());
|
||||||
calc(1);
|
calc(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -204,21 +203,29 @@ void FIRCORE::setSize(int _size)
|
|||||||
calc(1);
|
calc(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FIRCORE::setImpulse(const float* _impulse, int _update)
|
void FIRCORE::setImpulse(const std::vector<float>& _impulse, int _update)
|
||||||
{
|
{
|
||||||
std::copy(_impulse, _impulse + nc * 2, impulse.begin());
|
auto imp_nc = (int) (_impulse.size() / 2);
|
||||||
calc(_update);
|
|
||||||
|
if (imp_nc == nc) // to be on the safe side but setNc would be called if impulse size changes
|
||||||
|
{
|
||||||
|
std::copy(_impulse.begin(), _impulse.end(), impulse.begin());
|
||||||
|
calc(_update);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
setNc(_impulse);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void FIRCORE::setNc(int _nc, const float* _impulse)
|
void FIRCORE::setNc(const std::vector<float>& _impulse)
|
||||||
{
|
{
|
||||||
// because of FFT planning, this will probably cause a glitch in audio if done during dataflow
|
// because of FFT planning, this will probably cause a glitch in audio if done during dataflow
|
||||||
deplan();
|
deplan();
|
||||||
nc = _nc;
|
nc = (int) (_impulse.size() / 2);
|
||||||
plan();
|
plan();
|
||||||
imp.resize(nc * 2);
|
imp.resize(nc * 2);
|
||||||
impulse.resize(nc * 2);
|
impulse.resize(nc * 2);
|
||||||
std::copy(_impulse, _impulse + nc * 2, impulse.begin());
|
std::copy(_impulse.begin(), _impulse.end(), impulse.begin());
|
||||||
calc(1);
|
calc(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -70,9 +70,8 @@ public:
|
|||||||
int size,
|
int size,
|
||||||
float* in,
|
float* in,
|
||||||
float* out,
|
float* out,
|
||||||
int nc,
|
|
||||||
int mp,
|
int mp,
|
||||||
const float* impulse
|
const std::vector<float>& impulse
|
||||||
);
|
);
|
||||||
FIRCORE(const FIRCORE&) = delete;
|
FIRCORE(const FIRCORE&) = delete;
|
||||||
FIRCORE& operator=(const FIRCORE& other) = delete;
|
FIRCORE& operator=(const FIRCORE& other) = delete;
|
||||||
@ -82,8 +81,8 @@ public:
|
|||||||
void execute();
|
void execute();
|
||||||
void setBuffers(float* in, float* out);
|
void setBuffers(float* in, float* out);
|
||||||
void setSize(int size);
|
void setSize(int size);
|
||||||
void setImpulse(const float* impulse, int update);
|
void setImpulse(const std::vector<float>& impulse, int update);
|
||||||
void setNc(int nc, const float* impulse);
|
void setNc(const std::vector<float>& impulse);
|
||||||
void setMp(int mp);
|
void setMp(int mp);
|
||||||
void setUpdate();
|
void setUpdate();
|
||||||
|
|
||||||
|
20
wdsp/fmd.cpp
20
wdsp/fmd.cpp
@ -159,11 +159,11 @@ FMD::FMD(
|
|||||||
0,
|
0,
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
pde = new FIRCORE(size, audio.data(), out, nc_de, mp_de, impulse.data());
|
pde = new FIRCORE(size, audio.data(), out, mp_de, impulse);
|
||||||
// audio filter
|
// audio filter
|
||||||
std::vector<float> impulseb;
|
std::vector<float> impulseb;
|
||||||
FIR::fir_bandpass(impulseb, nc_aud, 0.8 * f_low, 1.1 * f_high, rate, 0, 1, afgain / (2.0 * size));
|
FIR::fir_bandpass(impulseb, nc_aud, 0.8 * f_low, 1.1 * f_high, rate, 0, 1, afgain / (2.0 * size));
|
||||||
paud = new FIRCORE(size, out, out, nc_aud, mp_aud, impulseb.data());
|
paud = new FIRCORE(size, out, out, mp_aud, impulseb);
|
||||||
}
|
}
|
||||||
|
|
||||||
FMD::~FMD()
|
FMD::~FMD()
|
||||||
@ -266,11 +266,11 @@ void FMD::setSamplerate(int _rate)
|
|||||||
0,
|
0,
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
pde->setImpulse(impulse.data(), 1);
|
pde->setImpulse(impulse, 1);
|
||||||
// audio filter
|
// audio filter
|
||||||
std::vector<float> impulseb;
|
std::vector<float> impulseb;
|
||||||
FIR::fir_bandpass(impulseb, nc_aud, 0.8 * f_low, 1.1 * f_high, rate, 0, 1, afgain / (2.0 * size));
|
FIR::fir_bandpass(impulseb, nc_aud, 0.8 * f_low, 1.1 * f_high, rate, 0, 1, afgain / (2.0 * size));
|
||||||
paud->setImpulse(impulseb.data(), 1);
|
paud->setImpulse(impulseb, 1);
|
||||||
plim->setSamplerate((int) rate);
|
plim->setSamplerate((int) rate);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -296,12 +296,12 @@ void FMD::setSize(int _size)
|
|||||||
0,
|
0,
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
pde = new FIRCORE(size, audio.data(), out, nc_de, mp_de, impulse.data());
|
pde = new FIRCORE(size, audio.data(), out, mp_de, impulse);
|
||||||
// audio filter
|
// audio filter
|
||||||
delete paud;
|
delete paud;
|
||||||
std::vector<float> impulseb;
|
std::vector<float> impulseb;
|
||||||
FIR::fir_bandpass(impulseb, nc_aud, 0.8 * f_low, 1.1 * f_high, rate, 0, 1, afgain / (2.0 * size));
|
FIR::fir_bandpass(impulseb, nc_aud, 0.8 * f_low, 1.1 * f_high, rate, 0, 1, afgain / (2.0 * size));
|
||||||
paud = new FIRCORE(size, out, out, nc_aud, mp_aud, impulseb.data());
|
paud = new FIRCORE(size, out, out, mp_aud, impulseb);
|
||||||
plim->setSize(size);
|
plim->setSize(size);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -348,7 +348,7 @@ void FMD::setNCde(int nc)
|
|||||||
0,
|
0,
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
pde->setNc(nc_de, impulse.data());
|
pde->setNc(impulse);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -368,7 +368,7 @@ void FMD::setNCaud(int nc)
|
|||||||
nc_aud = nc;
|
nc_aud = nc;
|
||||||
std::vector<float> impulse;
|
std::vector<float> impulse;
|
||||||
FIR::fir_bandpass(impulse, nc_aud, 0.8 * f_low, 1.1 * f_high, rate, 0, 1, afgain / (2.0 * size));
|
FIR::fir_bandpass(impulse, nc_aud, 0.8 * f_low, 1.1 * f_high, rate, 0, 1, afgain / (2.0 * size));
|
||||||
paud->setNc(nc_aud, impulse.data());
|
paud->setNc(impulse);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -421,11 +421,11 @@ void FMD::setAFFilter(double low, double high)
|
|||||||
0,
|
0,
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
pde->setImpulse(impulse.data(), 1);
|
pde->setImpulse(impulse, 1);
|
||||||
// audio filter
|
// audio filter
|
||||||
std::vector<float> impulseb;
|
std::vector<float> impulseb;
|
||||||
FIR::fir_bandpass (impulseb, nc_aud, 0.8 * f_low, 1.1 * f_high, rate, 0, 1, afgain / (2.0 * size));
|
FIR::fir_bandpass (impulseb, nc_aud, 0.8 * f_low, 1.1 * f_high, rate, 0, 1, afgain / (2.0 * size));
|
||||||
paud->setImpulse(impulseb.data(), 1);
|
paud->setImpulse(impulseb, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -82,7 +82,7 @@ FMMOD::FMMOD(
|
|||||||
mp = _mp;
|
mp = _mp;
|
||||||
calc();
|
calc();
|
||||||
FIR::fir_bandpass(impulse, nc, -bp_fc, +bp_fc, samplerate, 0, 1, 1.0 / (2 * size));
|
FIR::fir_bandpass(impulse, nc, -bp_fc, +bp_fc, samplerate, 0, 1, 1.0 / (2 * size));
|
||||||
p = new FIRCORE(size, out, out, nc, mp, impulse.data());
|
p = new FIRCORE(size, out, out, mp, impulse);
|
||||||
}
|
}
|
||||||
|
|
||||||
FMMOD::~FMMOD()
|
FMMOD::~FMMOD()
|
||||||
@ -143,7 +143,7 @@ void FMMOD::setSamplerate(int _rate)
|
|||||||
samplerate = _rate;
|
samplerate = _rate;
|
||||||
calc();
|
calc();
|
||||||
FIR::fir_bandpass(impulse, nc, -bp_fc, +bp_fc, samplerate, 0, 1, 1.0 / (2 * size));
|
FIR::fir_bandpass(impulse, nc, -bp_fc, +bp_fc, samplerate, 0, 1, 1.0 / (2 * size));
|
||||||
p->setImpulse(impulse.data(), 1);
|
p->setImpulse(impulse, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FMMOD::setSize(int _size)
|
void FMMOD::setSize(int _size)
|
||||||
@ -153,7 +153,7 @@ void FMMOD::setSize(int _size)
|
|||||||
calc();
|
calc();
|
||||||
p->setSize(size);
|
p->setSize(size);
|
||||||
FIR::fir_bandpass(impulse, nc, -bp_fc, +bp_fc, samplerate, 0, 1, 1.0 / (2 * size));
|
FIR::fir_bandpass(impulse, nc, -bp_fc, +bp_fc, samplerate, 0, 1, 1.0 / (2 * size));
|
||||||
p->setImpulse(impulse.data(), 1);
|
p->setImpulse(impulse, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/********************************************************************************************************
|
/********************************************************************************************************
|
||||||
@ -167,7 +167,7 @@ void FMMOD::setDeviation(float _deviation)
|
|||||||
double _bp_fc = f_high + _deviation;
|
double _bp_fc = f_high + _deviation;
|
||||||
std::vector<float> impulse;
|
std::vector<float> impulse;
|
||||||
FIR::fir_bandpass (impulse, nc, -_bp_fc, +_bp_fc, samplerate, 0, 1, 1.0 / (2 * size));
|
FIR::fir_bandpass (impulse, nc, -_bp_fc, +_bp_fc, samplerate, 0, 1, 1.0 / (2 * size));
|
||||||
p->setImpulse(impulse.data(), 0);
|
p->setImpulse(impulse, 0);
|
||||||
deviation = _deviation;
|
deviation = _deviation;
|
||||||
// mod
|
// mod
|
||||||
sphase = 0.0;
|
sphase = 0.0;
|
||||||
@ -197,7 +197,7 @@ void FMMOD::setNC(int _nc)
|
|||||||
{
|
{
|
||||||
nc = _nc;
|
nc = _nc;
|
||||||
FIR::fir_bandpass (impulse, nc, -bp_fc, +bp_fc, samplerate, 0, 1, 1.0 / (2 * size));
|
FIR::fir_bandpass (impulse, nc, -bp_fc, +bp_fc, samplerate, 0, 1, 1.0 / (2 * size));
|
||||||
p->setNc(nc, impulse.data());
|
p->setNc(impulse);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -220,7 +220,7 @@ void FMMOD::setAFFreqs(float _low, float _high)
|
|||||||
f_high = _high;
|
f_high = _high;
|
||||||
bp_fc = deviation + f_high;
|
bp_fc = deviation + f_high;
|
||||||
FIR::fir_bandpass (impulse, nc, -bp_fc, +bp_fc, samplerate, 0, 1, 1.0 / (2 * size));
|
FIR::fir_bandpass (impulse, nc, -bp_fc, +bp_fc, samplerate, 0, 1, 1.0 / (2 * size));
|
||||||
p->setImpulse(impulse.data(), 1);
|
p->setImpulse(impulse, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,7 +49,7 @@ void FMSQ::calc()
|
|||||||
G[2] = 3.0;
|
G[2] = 3.0;
|
||||||
G[3] = (float) (+20.0 * log10(20000.0 / *pllpole));
|
G[3] = (float) (+20.0 * log10(20000.0 / *pllpole));
|
||||||
EQP::eq_impulse (impulse, nc, 3, F.data(), G.data(), rate, 1.0 / (2.0 * size), 0, 0);
|
EQP::eq_impulse (impulse, nc, 3, F.data(), G.data(), rate, 1.0 / (2.0 * size), 0, 0);
|
||||||
p = new FIRCORE(size, trigger, noise.data(), nc, mp, impulse.data());
|
p = new FIRCORE(size, trigger, noise.data(), mp, impulse);
|
||||||
// noise averaging
|
// noise averaging
|
||||||
avm = exp(-1.0 / (rate * avtau));
|
avm = exp(-1.0 / (rate * avtau));
|
||||||
onem_avm = 1.0 - avm;
|
onem_avm = 1.0 - avm;
|
||||||
@ -291,7 +291,7 @@ void FMSQ::setNC(int _nc)
|
|||||||
{
|
{
|
||||||
nc = _nc;
|
nc = _nc;
|
||||||
EQP::eq_impulse (impulse, nc, 3, F.data(), G.data(), rate, 1.0 / (2.0 * size), 0, 0);
|
EQP::eq_impulse (impulse, nc, 3, F.data(), G.data(), rate, 1.0 / (2.0 * size), 0, 0);
|
||||||
p->setNc(nc, impulse.data());
|
p->setNc(impulse);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,7 +37,7 @@ void ICFIR::calc_icfir (ICFIR *a)
|
|||||||
std::vector<float> impulse;
|
std::vector<float> impulse;
|
||||||
a->scale = 1.0f / (float)(2 * a->size);
|
a->scale = 1.0f / (float)(2 * a->size);
|
||||||
icfir_impulse (impulse, a->nc, a->DD, a->R, a->Pairs, (float) a->runrate, (float) a->cicrate, a->cutoff, a->xtype, a->xbw, 1, a->scale, a->wintype);
|
icfir_impulse (impulse, a->nc, a->DD, a->R, a->Pairs, (float) a->runrate, (float) a->cicrate, a->cutoff, a->xtype, a->xbw, 1, a->scale, a->wintype);
|
||||||
a->p = new FIRCORE(a->size, a->in, a->out, a->nc, a->mp, impulse.data());
|
a->p = new FIRCORE(a->size, a->in, a->out, a->mp, impulse);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ICFIR::decalc_icfir (ICFIR *a)
|
void ICFIR::decalc_icfir (ICFIR *a)
|
||||||
|
12
wdsp/nbp.cpp
12
wdsp/nbp.cpp
@ -333,7 +333,7 @@ void NBP::calc_lightweight()
|
|||||||
gain / (float)(2 * size),
|
gain / (float)(2 * size),
|
||||||
wintype
|
wintype
|
||||||
);
|
);
|
||||||
fircore->setImpulse(impulse.data(), 1);
|
fircore->setImpulse(impulse, 1);
|
||||||
// print_impulse ("nbp.txt", size + 1, impulse, 1, 0);
|
// print_impulse ("nbp.txt", size + 1, impulse, 1, 0);
|
||||||
}
|
}
|
||||||
hadnotch = havnotch;
|
hadnotch = havnotch;
|
||||||
@ -438,7 +438,7 @@ NBP::NBP(
|
|||||||
bplow.resize(maxpb);
|
bplow.resize(maxpb);
|
||||||
bphigh.resize(maxpb);
|
bphigh.resize(maxpb);
|
||||||
calc_impulse ();
|
calc_impulse ();
|
||||||
fircore = new FIRCORE(size, in, out, nc, mp, impulse.data());
|
fircore = new FIRCORE(size, in, out, mp, impulse);
|
||||||
}
|
}
|
||||||
|
|
||||||
NBP::~NBP()
|
NBP::~NBP()
|
||||||
@ -470,7 +470,7 @@ void NBP::setSamplerate(int _rate)
|
|||||||
{
|
{
|
||||||
rate = _rate;
|
rate = _rate;
|
||||||
calc_impulse ();
|
calc_impulse ();
|
||||||
fircore->setImpulse(impulse.data(), 1);
|
fircore->setImpulse(impulse, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void NBP::setSize(int _size)
|
void NBP::setSize(int _size)
|
||||||
@ -479,13 +479,13 @@ void NBP::setSize(int _size)
|
|||||||
size = _size;
|
size = _size;
|
||||||
fircore->setSize(size);
|
fircore->setSize(size);
|
||||||
calc_impulse ();
|
calc_impulse ();
|
||||||
fircore->setImpulse(impulse.data(), 1);
|
fircore->setImpulse(impulse, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void NBP::setNc()
|
void NBP::setNc()
|
||||||
{
|
{
|
||||||
calc_impulse();
|
calc_impulse();
|
||||||
fircore->setNc(nc, impulse.data());
|
fircore->setNc(impulse);
|
||||||
}
|
}
|
||||||
|
|
||||||
void NBP::setMp()
|
void NBP::setMp()
|
||||||
@ -513,7 +513,7 @@ void NBP::SetFreqs(double _flow, double _fhigh)
|
|||||||
flow = _flow;
|
flow = _flow;
|
||||||
fhigh = _fhigh;
|
fhigh = _fhigh;
|
||||||
calc_impulse();
|
calc_impulse();
|
||||||
fircore->setImpulse(impulse.data(), 1);
|
fircore->setImpulse(impulse, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user