Я работаю над классом DSP (obj-c++) для новокаина, но мои фильтры только кажутся вызвать шум/искажение сигнала.
Я разместил свой полный код и коэффициенты здесь: https://gist.github.com/2702844 Но в основном это сводится к:
// Deinterleaving...
// DSP'ing one channel:
NVDSP *handleDSP = [[NVDSP alloc] init];
[handleDSP setSamplingRate:audioManager.samplingRate];
float cornerFrequency = 6000.0f;
float Q = 0.5f;
[handleDSP setHPF:cornerFrequency Q:Q];
[handleDSP applyFilter:audioData length:numFrames];
// DSP other channel in the same way
// Interleaving and sending to audio output (Novocaine block)
Полный код/контекст см. в сути.
Коэффициенты:
2012-05-15 17:54:18.858 nvdsp[700:16703] b0: 0.472029
2012-05-15 17:54:18.859 nvdsp[700:16703] b1: -0.944059
2012-05-15 17:54:18.860 nvdsp[700:16703] b2: 0.472029
2012-05-15 17:54:18.861 nvdsp[700:16703] a1: -0.748175
2012-05-15 17:54:18.861 nvdsp[700:16703] a2: 0.139942
(все разделить на a0
)
Поскольку я предположил, что коэффициенты находятся в порядке: { b0/a0, b1/a0, b2/a0, a1/a0, a2/a0 }
(см.: to-vdsp-deq22">Коэффициенты IIR для пикового эквалайзера, как передать их в vDSP_deq22?)
Что вызывает искажение/шум (фильтры не работают)?
a
, а чтоb
в вашем случае. Также возможно, что нумерация идет задом наперед. - person Oliver Charlesworth   schedule 15.05.2012b0, b1, b2, a1, a2
: objective-audio.jp /2008/02/biquad-filter.html - person sougonde   schedule 16.05.2012