В этом примере показано, как проектировать фильтры нижних частот. В примере представлены некоторые из наиболее часто используемых инструментов командной строки в системной Toolbox™ DSP. Кроме того, для реализации всех представленных здесь проектов можно использовать приложение Filter Builder. Дополнительные варианты конструкции см. в разделе Проектирование фильтров КИХ нижних частот.
При проектировании фильтра нижних частот первым выбором является проектирование фильтра FIR или IIR. Как правило, фильтры FIR выбираются в тех случаях, когда важна линейная фазовая характеристика. КИХ-фильтры также имеют тенденцию быть предпочтительными для реализаций с фиксированной точкой, поскольку они обычно более устойчивы к эффектам квантования. Фильтры FIR также используются во многих высокоскоростных реализациях, таких как FPGA или ASIC, поскольку они пригодны для конвейерной обработки. БИХ-фильтры (в частности биквадные фильтры) используются в приложениях (таких как обработка звуковых сигналов), где фазовая линейность не является проблемой. Фильтры БИХ обычно более эффективны в вычислительном отношении в том смысле, что они могут соответствовать спецификациям конструкции с меньшим количеством коэффициентов, чем фильтры ПИХ. БИХ-фильтры также имеют тенденцию иметь более короткий переходный отклик и меньшую групповую задержку. Однако использование минимально-фазовых и многоскоростных схем может привести к тому, что КИХ-фильтры сравнимы с БИХ-фильтрами с точки зрения групповой задержки и вычислительной эффективности.
Существует много практических ситуаций, в которых необходимо указать порядок фильтрации. Один из таких случаев - если вы нацелены на оборудование, которое ограничило порядок фильтрации определенным числом. Другой распространенный сценарий - когда вы рассчитали доступный вычислительный бюджет (MIPS) для вашей реализации, и это дает вам ограниченный порядок фильтрации. Функции проектирования FIR в панели инструментов обработки сигналов (включая fir1, firpm, и firls) все способны проектировать фильтры нижних частот с заданным порядком. В DSP System Toolbox предпочтительной функцией для низкочастотного FIR-фильтра с указанным порядком является firceqrip. Эта функция конструирует оптимальные эквироптовые фильтры нижних/верхних частот с заданными значениями пульсаций полосы пропускания/полосы останова и заданной частотой границы полосы пропускания. Частота границы стоп-полосы определяется в результате конструкции.
Разработать фильтр КИХ нижних частот для данных, дискретизированных на частоте 48 кГц. Граничная частота полосы пропускания составляет 8 кГц. Пульсация полосы пропускания составляет 0,01 дБ, а затухание полосы останова - 80 дБ. Ограничьте порядок фильтрации значением 120.
N = 120; Fs = 48e3; Fp = 8e3; Ap = 0.01; Ast = 80;
Получение максимального отклонения для пульсаций полосы пропускания и полосы останова в линейных единицах.
Rp = (10^(Ap/20) - 1)/(10^(Ap/20) + 1); Rst = 10^(-Ast/20);
Проектирование фильтра с использованием firceqrip и просмотр частотной характеристики величины.
NUM = firceqrip(N,Fp/(Fs/2),[Rp Rst],'passedge'); fvtool(NUM,'Fs',Fs)

Результирующая частота границы полосы останова составляет около 9,64 кГц.
Другой конструктивной функцией для оптимальных эквириппных фильтров является firgr. firgr может проектировать фильтр, который удовлетворяет ограничениям пульсации полосы пропускания/полосы останова, а также заданной ширине перехода с наименьшим возможным порядком фильтрации. Например, если частота границы стоп-полосы задана как 10 кГц, результирующий фильтр имеет порядок 100, а не 120-й фильтр, разработанный с помощью firceqrip. Меньший порядок фильтрации является результатом большей полосы перехода.
Укажите частоту границы полосы останова 10 кГц. Получить фильтр FIR минимального порядка с пульсацией полосы пропускания 0,01 дБ и 80 дБ затухания полосы останова.
Fst = 10e3;
NumMin = firgr('minorder',[0 Fp/(Fs/2) Fst/(Fs/2) 1], [1 1 0 0],[Rp,Rst]);
Постройте график частотных откликов величины для фильтра FIR минимального порядка, полученного с помощью firgr и 120-й фильтр, разработанный с firceqrip. В результате конструирования минимального порядка получается фильтр с порядком 100. Область перехода фильтра 120-го порядка, как и ожидалось, уже, чем область перехода фильтра порядка 100.
hvft = fvtool(NUM,1,NumMin,1,'Fs',Fs); legend(hvft,'N = 120','N = 100')

Чтобы применить фильтр к данным, можно использовать filter или можно использовать dsp.FIRFilter. dsp.FIRFilter имеет преимущество управления состоянием при выполнении в цикле. dsp.FIRFilter также имеет возможности фиксированной точки и поддерживает генерацию кода C, генерацию кода HDL и оптимизированную генерацию кода для ARM ® Cortex ® M и ARM Cortex A.
Фильтр 10 секунд белого шума с нулевым средним и единичным стандартным отклонением в кадрах 256 выборок с фильтром нижних частот FIR 120-го порядка. Просмотрите результат на анализаторе спектра.
LP_FIR = dsp.FIRFilter('Numerator',NUM); SA = dsp.SpectrumAnalyzer('SampleRate',Fs,'SpectralAverages',5); tic while toc < 10 x = randn(256,1); y = LP_FIR(x); step(SA,y); end

dsp.LowpassFilterdsp.LowpassFilter является альтернативой использованию firceqrip и firgr совместно с dsp.FIRFilter. В основном, dsp.LowpassFilter конденсирует двухстадийный процесс в один. dsp.LowpassFilter обеспечивает те же преимущества, что и dsp.FIRFilter обеспечивает поддержку фиксированной точки, поддержку генерации кода C, поддержку генерации кода HDL и поддержку генерации кода ARM Cortex.
Разработать фильтр КИХ нижних частот для данных, дискретизированных на частоте 48 кГц. Граничная частота полосы пропускания составляет 8 кГц. Пульсация полосы пропускания составляет 0,01 дБ, а затухание полосы останова - 80 дБ. Ограничьте порядок фильтрации значением 120. Создать dsp.FIRFilter на основе ваших спецификаций.
LP_FIR = dsp.LowpassFilter('SampleRate',Fs,... 'DesignForMinimumOrder',false,'FilterOrder',N,... 'PassbandFrequency',Fp,'PassbandRipple',Ap,'StopbandAttenuation',Ast);
Коэффициенты в LP_FIR идентичны коэффициентам в NUM.
NUM_LP = tf(LP_FIR);
Вы можете использовать LP_FIR для прямой фильтрации данных, как показано в предыдущем примере. Можно также проанализировать фильтр с помощью FVTool или измерить отклик с помощью measure.
fvtool(LP_FIR,'Fs',Fs);
measure(LP_FIR)
ans = Sample Rate : 48 kHz Passband Edge : 8 kHz 3-dB Point : 8.5843 kHz 6-dB Point : 8.7553 kHz Stopband Edge : 9.64 kHz Passband Ripple : 0.01 dB Stopband Atten. : 79.9981 dB Transition Width : 1.64 kHz

Вы можете использовать dsp.LowpassFilter для проектирования фильтров минимального порядка и использования measure для проверки соответствия конструкции предписанным спецификациям. Порядок фильтра снова равен 100.
LP_FIR_minOrd = dsp.LowpassFilter('SampleRate',Fs,... 'DesignForMinimumOrder',true,'PassbandFrequency',Fp,... 'StopbandFrequency',Fst,'PassbandRipple',Ap,'StopbandAttenuation',Ast); measure(LP_FIR_minOrd) Nlp = order(LP_FIR_minOrd)
ans = Sample Rate : 48 kHz Passband Edge : 8 kHz 3-dB Point : 8.7136 kHz 6-dB Point : 8.922 kHz Stopband Edge : 10 kHz Passband Ripple : 0.0098641 dB Stopband Atten. : 80.122 dB Transition Width : 2 kHz Nlp = 100
Эллиптические фильтры являются аналогом IIR оптимальных эквиппельных FIR фильтров. Соответственно, для проектирования эллиптических фильтров можно использовать те же спецификации. Порядок фильтров, полученный для фильтра IIR, намного меньше, чем порядок соответствующего фильтра FIR.
Создайте эллиптический фильтр с той же частотой дискретизации, частотой отсечки, ограничением пульсации полосы пропускания и затуханием полосы останова, что и фильтр FIR 120-го порядка. Уменьшите порядок фильтрации эллиптического фильтра до 10.
N = 10; LP_IIR = dsp.LowpassFilter('SampleRate',Fs,'FilterType','IIR',... 'DesignForMinimumOrder',false,'FilterOrder',N,... 'PassbandFrequency',Fp,'PassbandRipple',Ap,'StopbandAttenuation',Ast);
Сравните конструкции FIR и IIR. Вычислите стоимость двух реализаций.
hfvt = fvtool(LP_FIR,LP_IIR,'Fs',Fs); legend(hfvt,'FIR Equiripple, N = 120', 'IIR Elliptic, N = 10'); cost_FIR = cost(LP_FIR) cost_IIR = cost(LP_IIR)
cost_FIR =
struct with fields:
NumCoefficients: 121
NumStates: 120
MultiplicationsPerInputSample: 121
AdditionsPerInputSample: 120
cost_IIR =
struct with fields:
NumCoefficients: 25
NumStates: 20
MultiplicationsPerInputSample: 25
AdditionsPerInputSample: 20

Фильтры FIR и IIR имеют сходные амплитудные характеристики. Стоимость фильтра IIR составляет около 1/6 стоимости фильтра FIR.
Фильтр БИХ выполнен в виде биквадратного фильтра. Чтобы применить фильтр к данным, используйте те же команды, что и в случае FIR.
Фильтр 10 секунд белого гауссова шума с нулевым средним и единичным стандартным отклонением в кадрах 256 выборок с фильтром нижних частот БИХ 10-го порядка. Просмотрите результат на анализаторе спектра.
SA = dsp.SpectrumAnalyzer('SampleRate',Fs,'SpectralAverages',5); tic while toc < 10 x = randn(256,1); y = LP_IIR(x); SA(y); end

Можно также разработать фильтры, позволяющие изменять частоту отсечения во время выполнения. dsp.VariableBandwidthFIRFilter и dsp.VariableBandwidthIIRFilter может использоваться для таких случаев.