В этом примере показано, как спроектировать фильтры lowpass. Пример подсвечивает некоторые обычно используемые инструменты командной строки в DSP System Toolbox™. В качестве альтернативы можно использовать приложение Filter Builder, чтобы реализовать все проекты, представленные здесь. Для большего количества проектных решений смотрите Разработку Низкие КИХ-Фильтры Передачи.
При разработке фильтра lowpass предпочтительный выбор, который вы делаете, состоит в том, спроектировать ли БИХ-фильтр или КИХ. Вы обычно выбираете фильтры FIR, когда линейный фазовый отклик важен. КИХ-фильтры также имеют тенденцию быть предпочтенными для реализаций фиксированной точки, потому что они обычно более устойчивы к эффектам квантования. КИХ-фильтры также используются во многих высокоскоростных реализациях, таких как FPGAs или ASICs, потому что они подходят для конвейеризации. БИХ-фильтры (в конкретных фильтрах biquad) используются в приложениях (таких как обработка звукового сигнала), где линейность фазы не является беспокойством. БИХ-фильтры обычно в вычислительном отношении более эффективны в том смысле, что они могут выполнить техническим требованиям проекта с меньшим количеством коэффициентов, чем КИХ-фильтры. БИХ-фильтры также имеют тенденцию иметь более короткий переходный процесс и меньшую групповую задержку. Однако использование минимальной фазы и многоскоростных проектов может привести к КИХ-фильтрам, сопоставимым с БИХ-фильтрами в терминах групповой задержки и вычислительного КПД.
Существует много практических ситуаций, в которых необходимо задать порядка фильтра. Один такой случай - то, если вы предназначаетесь для оборудования, которое ограничило порядка фильтра к определенному номеру. Другой общий сценарий - когда вы вычислили доступный вычислительный бюджет (MIPS) для вашей реализации, и это предоставляет вам ограниченного порядка фильтра. КИХ-проект функционирует в Signal Processing Toolbox (включая fir1, firpm, и firls) все способны к разработке фильтров lowpass с заданным порядком. В DSP System Toolbox предпочтительной функцией для КИХ-создания фильтра lowpass с заданным порядком является firceqrip. Эта функция проектирует оптимальный equiripple 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 кГц.
Другой функцией проекта для оптимальных фильтров equiripple является 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 A.
Отфильтруйте 10 секунд белого шума с нулевым средним значением и модульным стандартным отклонением в системах координат 256 выборок с КИХ 120-го порядка фильтр lowpass. Просмотрите результат на спектре анализатор.
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.
Спроектируйте КИХ-фильтр 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
Эллиптические фильтры являются БИХ-дубликатом к оптимальным equiripple КИХ-фильтрам. Соответственно, можно использовать те же технические требования, чтобы спроектировать эллиптические фильтры. Порядок фильтра, которого вы получаете для БИХ-фильтра, намного меньше, чем порядок соответствующего КИХ-фильтра.
Спроектируйте эллиптический фильтр с той же частотой дискретизации, частотой среза, ограничением неравномерности в полосе пропускания и затуханием в полосе задерживания как КИХ-фильтр 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 стоимостью КИХ-фильтра.
БИХ-фильтр спроектирован как фильтр biquad. Чтобы применить фильтр к данным, используйте те же команды в качестве в КИХ-случае.
Отфильтруйте 10 секунд белого Гауссова шума с нулевым средним значением и модульным стандартным отклонением в системах координат 256 выборок с БИХ 10-го порядка фильтр lowpass. Просмотрите результат на спектре анализатор.
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 может использоваться для таких случаев.