fir1

Создание оконного КИХ-фильтра

Описание

пример

b = fir1(n,Wn) использует Окно Хэмминга, чтобы спроектировать nth-порядок lowpass, полоса пропускания или многополосный КИХ фильтрует с линейной фазой. Тип фильтра зависит от числа элементов Wn.

пример

b = fir1(n,Wn,ftype) проектирует lowpass, highpass, полосу пропускания, bandstop, или многополосный фильтр, в зависимости от значения ftype и число элементов Wn.

пример

b = fir1(___,window) проектирует фильтр с помощью вектора, заданного в window и любой из аргументов от предыдущих синтаксисов.

b = fir1(___,scaleopt) дополнительно задает, нормирован ли ответ величины фильтра.

Примечание:   используйте fir2 для оконных фильтров с произвольной частотной характеристикой.

Примеры

свернуть все

Спроектируйте КИХ-полосовой фильтр 48-го порядка с полосой пропускания 0.35πω0.65π рад/выборка. Визуализируйте его величину и фазовые отклики.

b = fir1(48,[0.35 0.65]);
freqz(b,1,512)

Загрузите chirp.mat. Файл содержит сигнал, y, это имеет большую часть его силы выше Fs/4, или половина частоты Найквиста. Частота дискретизации составляет 8 192 Гц.

Спроектируйте КИХ 34-го порядка highpass фильтр, чтобы ослабить компоненты сигнала ниже Fs/4. Используйте частоту среза 0,48 и Окно Чебышева с 30 дБ пульсации.

load chirp

t = (0:length(y)-1)/Fs;

bhi = fir1(34,0.48,'high',chebwin(35,30));
freqz(bhi,1)

Отфильтруйте сигнал. Отобразите исходные и highpass-отфильтрованные сигналы. Используйте ту же шкалу оси Y в обоих графиках.

outhi = filter(bhi,1,y);

subplot(2,1,1)
plot(t,y)
title('Original Signal')
ys = ylim;

subplot(2,1,2)
plot(t,outhi)
title('Highpass Filtered Signal')
xlabel('Time (s)')
ylim(ys)

Спроектируйте фильтр lowpass с теми же спецификациями. Отфильтруйте сигнал и сравните результат с оригиналом. Используйте ту же шкалу оси Y в обоих графиках.

blo = fir1(34,0.48,chebwin(35,30));

outlo = filter(blo,1,y);

subplot(2,1,1)
plot(t,y)
title('Original Signal')
ys = ylim;

subplot(2,1,2)
plot(t,outlo)
title('Lowpass Filtered Signal')
xlabel('Time (s)')
ylim(ys)

Спроектируйте КИХ-фильтр 46-го порядка, который ослабляет нормированные частоты ниже 0.4π рад/выборка и между 0.6π и 0.9π рад/выборка. Вызовите его bM.

ord = 46;

low = 0.4;
bnd = [0.6 0.9];

bM = fir1(ord,[low bnd]);

Перепроектируйте bM так, чтобы это передало полосы, это ослабляло и останавливает другие частоты. Вызовите новый фильтр bW. Используйте fvtool отобразить частотные характеристики фильтров.

bW = fir1(ord,[low bnd],'DC-1');

hfvt = fvtool(bM,1,bW,1);
legend(hfvt,'bM','bW')

Перепроектируйте bM использование окна Hann. ('DC-0' является дополнительным.) Сравнивают ответы величины проектов Хэмминга и Хэнна.

hM = fir1(ord,[low bnd],'DC-0',hann(ord+1));

hfvt = fvtool(bM,1,hM,1);
legend(hfvt,'Hamming','Hann')

Перепроектируйте bW использование окна Туки. Сравните ответы величины проектов Хэмминга и Туки.

tW = fir1(ord,[low bnd],'DC-1',tukeywin(ord+1));

hfvt = fvtool(bW,1,tW,1);
legend(hfvt,'Hamming','Tukey')

Входные параметры

свернуть все

Порядок фильтра, заданный как целочисленный скаляр.

Для highpass и bandstop настроек, fir1 всегда использует ровного порядка фильтра. Порядок должен состоять даже в том, потому что нечетный порядок симметричные КИХ-фильтры должен иметь нулевое усиление на частоте Найквиста. Если вы задаете нечетный n для highpass или заграждающего фильтра, затем fir1 шаг n  1.

Типы данных: double

Ограничения частоты, заданные как скаляр, двухэлементный вектор или многоэлементный вектор. Все элементы Wn должен строго быть больше 0 и строго меньше, чем 1, где 1 соответствует частоте Найквиста: 0 < Wn < 1. Частота Найквиста является половиной  рад/выборка π или частота дискретизации.

  • Если Wn скаляр, затем fir1 проектирует lowpass или фильтр highpass с частотой среза Wn. Частота среза является частотой, на которой нормированное усиление фильтра составляет -6 дБ.

  • Если Wn двухэлементный векторный  [w1 w2], где w1 < w2, затем fir1 проектирует полосовой или заграждающий фильтр с более низкой частотой среза w1 и более высокая частота среза w2.

  • Если Wn многоэлементный векторный    [w1 w2 ... wn], где w1 < w2 < … < wn, затем fir1 возвращает nth-порядок многополосный фильтр с полосами 0 < ω < w1, w1 < ω < w2, …, wn< ω < 1.    

Типы данных: double

Отфильтруйте тип, заданный как одно из следующего:

  • 'low' задает фильтр lowpass с частотой среза Wn. 'low' значение по умолчанию для скалярного Wn.

  • 'high' задает фильтр highpass с частотой среза Wn.

  • 'bandpass' задает полосовой фильтр если Wn двухэлементный вектор. 'bandpass' значение по умолчанию когда Wn имеет два элемента.

  • 'stop' задает заграждающий фильтр если Wn двухэлементный вектор.

  • 'DC-0' указывает, что первая полоса многополосного фильтра является полосой задерживания. 'DC-0' значение по умолчанию когда Wn имеет больше чем два элемента.

  • 'DC-1' указывает, что первая полоса многополосного фильтра является полосой пропускания.

Окно, заданное как вектор. Вектор окна должен иметь n + 1 элемент. Если вы не задаете window, затем fir1 использует Окно Хэмминга. Для списка доступных окон смотрите Windows.

fir1 автоматически не увеличивает длину window при попытке спроектировать highpass или заграждающий фильтр нечетного порядка.

Пример: kaiser(n+1,0.5) задает окно Кайзера параметром формы 0.5, чтобы использовать с фильтром порядка n.

Пример: hamming(n+1) эквивалентно отъезду незаданного окна.

Типы данных: double

Опция нормализации, заданная как любой 'scale' или 'noscale'.

  • 'scale' нормирует коэффициенты так, чтобы ответ величины фильтра в центре полосы пропускания равнялся 1 (0 дБ).

  • 'noscale' не нормирует коэффициенты.

Выходные аргументы

свернуть все

Отфильтруйте коэффициенты, возвращенные как вектор-строка из длины n + 1. Коэффициенты сортируются в убывающих степенях переменной z Z-преобразования:

B (z) = b(1) + b(2)z + … + b(n+1)z–n.

Алгоритмы

fir1 использует приближение наименьших квадратов, чтобы вычислить коэффициенты фильтра и затем сглаживает импульсную характеристику с window.

Ссылки

[1] Комитет по Цифровой обработке сигналов Акустики IEEE, Речи, и Общества Обработки сигналов, программ редакторов для Цифровой обработки сигналов. Нью-Йорк: Нажатие IEEE, 1979, Алгоритм 5.2.

Расширенные возможности

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Смотрите также

| | | | | | | | | |

Представлено до R2006a