В этом примере показано, как проектировать lowpass. В примере описываются некоторые из наиболее часто используемых инструментов командной строки в DSP System Toolbox™. Также можно использовать приложение Filter Builder для реализации всех представленных здесь проектов. Для получения дополнительного проекта опций см. Раздел «Разработка низкочастотных конечных импульсных характеристик фильтров»
При разработке lowpass фильтра первый выбор, который вы делаете, - проектировать ли конечную импульсную характеристику или БИХ фильтр. Обычно вы выбираете конечную импульсную характеристику фильтры, когда важен линейный фазовый отклик. Конечная импульсная характеристика также, как правило, предпочтительны для реализации с фиксированной точкой, поскольку они обычно более устойчивы к эффектам квантования. Конечная импульсная характеристика также используются во многих высокоскоростных реализациях, таких как ПЛИС или ASIC, поскольку они подходят для конвейеризации. БИХ (в частности, биквадные фильтры) используются в приложениях (таких как обработка аудиосигнала), где линейность фазы не является проблемой. БИХ фильтры обычно более эффективны в вычислительном отношении в том смысле, что они могут соответствовать проект спецификациям с меньшим количеством коэффициентов, чем конечная импульсная характеристика фильтры. БИХ также имеют тенденцию иметь более короткий переходный процесс и меньшую задержку группы. Однако использование минимально-фазовых и многократных проектов может привести к конечной импульсной характеристике фильтров, сопоставимых с БИХ фильтрами с точки зрения групповой задержки и вычислительной эффективности.
Существует много практических ситуаций, в которых вы должны задать порядок фильтра. Одним из таких случаев является, если вы нацелены на оборудование, которое ограничило порядок фильтра определенным числом. Другой распространенный сценарий, когда вы вычислили доступный вычислительный бюджет (MIPS) для вашей реализации, и это обеспечивает вам ограниченный порядок фильтра. Конечная импульсная характеристика проекта функции в Наборе инструментов обработки сигналов (включая fir1
, firpm
, и firls
) все способны к разработке lowpass фильтров с заданным порядком. В DSP System Toolbox предпочтительная функция для создание фильтра конечной импульсной характеристики с заданным порядком firceqrip
. Эта функция проектирует оптимальные lowpass/highpass конечная импульсная характеристика с заданными значениями пульсации полосы пропускания/полосы упора и с заданной частотой края полосы пропускания. Частота ребра стоповой полосы определяется в результате проекта.
Проектируйте lowpass конечная импульсная характеристика для данных, отобранных с частотой дискретизации 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 кГц. Получите конечную импульсную характеристику фильтр минимального порядка с неравномерностью в полосе пропускания 0,01 дБ и 80 дБ затухания в полосе задерживания.
Fst = 10e3;
NumMin = firgr('minorder',[0 Fp/(Fs/2) Fst/(Fs/2) 1], [1 1 0 0],[Rp,Rst]);
Постройте график величины частотных характеристик для фильтра конечной импульсной характеристики минимального порядка, полученного с помощью 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 отсчетов с помощью КИХ-lowpass-фильтра 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.LowpassFilter
dsp.LowpassFilter
является альтернативой использованию firceqrip
и firgr
в сочетании с dsp.FIRFilter
. В основном, dsp.LowpassFilter
конденсирует двухэтапный процесс в один. dsp.LowpassFilter
обеспечивает те же преимущества, что и dsp.FIRFilter
обеспечивает поддержку с фиксированной точкой, поддержку генерации кода C, поддержку генерации HDL-кода и поддержку генерации кода ARM Cortex.
Проектируйте lowpass конечная импульсная характеристика для данных, отобранных с частотой дискретизации 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
Эллиптические фильтры являются БИХ аналогом оптимальных фильтров конечной импульсной характеристики равновесия. Соответственно, для разработки эллиптических фильтров можно использовать те же спецификации. Порядок фильтра, который вы получаете для БИХ, намного меньше, чем порядок соответствующей конечной импульсной характеристики.
Создайте эллиптический фильтр с той же частотой дискретизации, частотой отсечения, неравномерности в полосе пропускания ограничением и затуханием в полосе задерживания, что и конечной импульсной характеристикой фильтр 120-го порядка. Уменьшите порядок фильтра для эллиптического фильтра до 10.
N = 10; LP_IIR = dsp.LowpassFilter('SampleRate',Fs,'FilterType','IIR',... 'DesignForMinimumOrder',false,'FilterOrder',N,... 'PassbandFrequency',Fp,'PassbandRipple',Ap,'StopbandAttenuation',Ast);
Сравните проекты конечной импульсной характеристики и БИХ. Вычислите стоимость двух реализаций.
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
Фильтры конечной импульсной характеристики и БИХ имеют сходные величины отклики. Стоимость БИХ составляет около 1/6 стоимости конечной импульсной характеристики.
БИХ разработан как биквадный фильтр. Для применения фильтра к данным используйте те же команды, что и в случае конечной импульсной характеристики.
Фильтруйте 10 секунд белого Гауссова шума с нулевым средним и единичным стандартным отклонением в системах координат 256 выборки с помощью lowpass 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
может использоваться в таких случаях.