Я пытаюсь внедрить БИХ-фильтр 8-го порядка, и в каждой записке приложения и учебнике, которые я прочитал, говорится, что лучше всего использовать любой фильтр порядка более 2 в качестве разделов второго порядка. Я использовал tf2sos
в MATLAB, чтобы получить коэффициенты для секций второго порядка, что дало мне 6x4 коэффициентов для 4 секций второго порядка, как и ожидалось. До внедрения в качестве SOS фильтр 8-го порядка требовал сохранения 7 предыдущих значений выборки (а также выходных значений). Теперь при реализации в качестве секций второго порядка, как работает поток от ввода к выводу, нужно ли мне хранить только 2 предыдущих значения выборки? Или выход первого фильтра подается как x_in
во второй фильтр и так далее?
filters
filter-design
infinite-impulse-response
biquad
audio
image-processing
distance-metrics
algorithms
interpolation
audio
hardware
performance
sampling
computer-vision
dsp-core
music
frequency-spectrum
matlab
power-spectral-density
filter-design
ica
source-separation
fourier-transform
fourier-transform
sampling
bandpass
audio
algorithms
edge-detection
filters
computer-vision
stereo-vision
filters
finite-impulse-response
infinite-impulse-response
image-processing
blur
impulse-response
state-space
linear-systems
dft
floating-point
software-implementation
oscillator
matched-filter
digital-communications
digital-communications
deconvolution
continuous-signals
discrete-signals
transfer-function
image-processing
computer-vision
3d
anasimtiaz
источник
источник
Ответы:
Это последнее, что вы сказали («Или вывод первого фильтра подается как x_in во второй фильтр и так далее?»). Идея проста: вы рассматриваете биквадры как отдельные фильтры второго порядка, которые находятся в каскаде. Выход первого фильтра является входом второго и т. Д., Поэтому линии задержки распределены между фильтрами. Если вам необходимо оптимизировать структуру в среде с ограниченным объемом памяти, вы можете заметить, что смежные биквады имеют избыточную память с задержкой (т. Е. Последние несколько выходных выборок этапа 1 совпадают с последними несколькими входными выборками этапа 2, поэтому не нужно хранить их отдельно, как если бы вы просто внедрили фильтры в отдельности).
источник
На самом деле существует два способа реализации секций второго порядка: параллельный и последовательный. В последовательной версии выходы секции N являются входами секции N + 1. В параллельной версии все секции имеют один и тот же вход (и только один действительный ноль вместо сопряженной комплексной пары нулей), а выходные данные каждой секции просто суммируются. Эти два метода связаны через разложение по частям передаточной функции Z-домена. ВНИМАНИЕ: это численно сложная проблема, и стандартная реализация Matlab «остаток» может иметь очень большие числовые ошибки для типичных аудиофильтров, полюса которых находятся близко к единичному кругу.
источник
Вот небольшой демонстрационный код, чтобы показать, почему вам лучше каскадировать секции 2-го порядка.
Для фильтра нижних частот, приведенного в вышеприведенном примере, порядка порядка 12-13 числовые ошибки накапливаются, чтобы дать заметно различную импульсную характеристику для реализации, в которой не используются каскадные биквады. В зависимости от фильтра ваш пробег будет варьироваться.
ЗАКАЗАТЬ = 10
ЗАКАЗАТЬ = 13
источник
[sos gain] = tf2sos(b,a); // Rest of code for nn = 1:size(sos,1); Z = filter(sos(nn,1:3),sos(nn,4:6), Z ); end Z = filter(gain,1,Z);