Проект фильтра Lowpass в MATLAB

Этот пример показывает, как разработать фильтры 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.LowpassFilter

dsp.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

Можно использовать 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 могут использоваться для таких случаев.

Похожие темы