fir2

Основанные на частотной дискретизации конечные импульсные характеристики создания фильтра

Описание

пример

b = fir2(n,f,m) возвращает nКонечная импульсная характеристика I порядка с частотно-амплитудными характеристиками, заданными в векторах f и m. Функция линейно интерполирует желаемую частотную характеристику на плотную сетку и затем использует обратное преобразование Фурье и окно Хэмминга, чтобы получить коэффициенты фильтра.

пример

b = fir2(n,f,m,npt,lap) задает npt, число точек в интерполяционной сетке и lap, длина области, которая fir2 вставляет вокруг повторяющихся частотных точек, которые задают шаги в частотной характеристики.

пример

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

Примечание:   Использование fir1 для оконных стандартных lowpass, bandpass, highpass, bandstop и многополосных строений.

Примеры

свернуть все

Загрузите MAT-файл chirp. Файл содержит сигнал, y, дискретизированный с частотой Fs = 8192 Гц. Сигнал имеет большую часть степени выше Fs/ 4 = 2048 Гц, или половина частоты Найквиста. Добавьте случайный шум к сигналу.

load chirp
y = y + randn(size(y))/25;
t = (0:length(y)-1)/Fs;

Спроектируйте фильтр верхней конечной импульсной характеристики 34-го порядка, чтобы ослабить компоненты сигнала ниже Fs/4. Задайте нормированную частоту среза 0,48, которая соответствует приблизительно 1966 Гц. Визуализируйте частотную характеристику фильтра.

f = [0 0.48 0.48 1];
mhi = [0 0 1 1];
bhi = fir2(34,f,mhi);

freqz(bhi,1,[],Fs)

Figure contains 2 axes. Axes 1 contains an object of type line. Axes 2 contains an object of type line.

Пропустите сигнал щебета. Постройте график сигнала до и после фильтрации.

outhi = filter(bhi,1,y);

figure
subplot(2,1,1)
plot(t,y)
title('Original Signal')
ylim([-1.2 1.2])

subplot(2,1,2)
plot(t,outhi)
title('Higpass Filtered Signal')
xlabel('Time (s)')
ylim([-1.2 1.2])

Figure contains 2 axes. Axes 1 with title Original Signal contains an object of type line. Axes 2 with title Higpass Filtered Signal contains an object of type line.

Смените фильтр с верхнего на lowpass. Используйте тот же порядок и отключение. Снова отфильтровайте сигнал. Результатом в основном является шум.

mlo = [1 1 0 0];
blo = fir2(34,f,mlo);
outlo = filter(blo,1,y);

subplot(2,1,1)
plot(t,y)
title('Original Signal')
ylim([-1.2 1.2])

subplot(2,1,2)
plot(t,outlo)
title('Lowpass Filtered Signal')
xlabel('Time (s)')
ylim([-1.2 1.2])

Figure contains 2 axes. Axes 1 with title Original Signal contains an object of type line. Axes 2 with title Lowpass Filtered Signal contains an object of type line.

Спроектируйте lowpass 30-го порядка с нормализованной частотой среза 0.6π рад/образец. Постройте график идеальной частотной характеристики, наложенной на фактическую частотную характеристику.

f = [0 0.6 0.6 1];
m = [1 1 0 0];

b1 = fir2(30,f,m);
[h1,w] = freqz(b1,1);

plot(f,m,w/pi,abs(h1))
xlabel('\omega / \pi')
lgs = {'Ideal','fir2 default'};
legend(lgs)

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Ideal, fir2 default.

Перепроектируйте фильтр с помощью сетки интерполяции с 64 точками.

b2 = fir2(30,f,m,64);
h2 = freqz(b2,1);

hold on
plot(w/pi,abs(h2))
lgs{3} = 'npt = 64';
legend(lgs)

Figure contains an axes. The axes contains 3 objects of type line. These objects represent Ideal, fir2 default, npt = 64.

Перепроектируйте фильтр с помощью сетки интерполяции с 64 точками и интервала с 13 точками вокруг частоты среза.

b3 = fir2(30,f,m,64,13);
h3 = freqz(b3,1);

plot(w/pi,abs(h3))
lgs{4} = 'lap = 13';
legend(lgs)

Figure contains an axes. The axes contains 4 objects of type line. These objects represent Ideal, fir2 default, npt = 64, lap = 13.

Спроектируйте конечная импульсная характеристика со следующей частотной характеристикой:

  • Синусоида между 0 и 0.18π рад/образец.

F1 = 0:0.01:0.18;
A1 = 0.5+sin(2*pi*7.5*F1)/4;
  • Кусочно-линейное сечение между 0.2π рад/образец и 0.78π рад/образец.

F2 = [0.2 0.38 0.4 0.55 0.562 0.585 0.6 0.78];
A2 = [0.5 2.3 1 1 -0.2 -0.2 1 1];
  • Квадратичное сечение между 0.79π рад/выборка и частота Найквиста.

F3 = 0.79:0.01:1;
A3 = 0.2+18*(1-F3).^2;

Проектируйте фильтр с помощью окна Хэмминга. Задайте порядок фильтра 50.

N = 50;

FreqVect = [F1 F2 F3];
AmplVect = [A1 A2 A3];

ham = fir2(N,FreqVect,AmplVect);

Повторите вычисление с помощью окна Кайзера, которое имеет параметр формы 3.

kai = fir2(N,FreqVect,AmplVect,kaiser(N+1,3));

Перепроектируйте фильтр с помощью designfilt функция. designfilt по умолчанию используется прямоугольное окно. Вычислите нулевую фазовую характеристику фильтра по 1024 точкам.

d = designfilt('arbmagfir','FilterOrder',N, ...
    'Frequencies',FreqVect,'Amplitudes',AmplVect);

[zd,wd] = zerophase(d,1024);

Отображение нулевых характеристик трех фильтров. Наложите идеальный ответ.

zerophase(ham,1)
hold on
zerophase(kai,1)
plot(wd/pi,zd)
plot(FreqVect,AmplVect,'k:')
legend('Hamming','Kaiser','designfilt','ideal')

Figure contains an axes. The axes with title Zero-phase response contains 4 objects of type line. These objects represent Hamming, Kaiser, designfilt, ideal.

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

свернуть все

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

Для строений с полосой пропускания на частоте Найквиста, fir2 всегда использует четный порядок. Если вы задаете нечетное n для одной из этих строений затем fir2 шаги n по 1.

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

Характеристики частота-амплитуда, заданные как векторы той же длины.

  • f является вектором частотных точек в области значений от 0 до 1, где 1 соответствует частоте Найквиста. Первая точка f должно быть 0, а последняя точка должна быть 1. f необходимо отсортировать в порядке увеличения. Повторяющиеся частотные точки разрешены и рассматриваются как шаги в частотной характеристики.

  • m - вектор, содержащий необходимую величину характеристику в каждой из точек, заданных в f.

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

Количество точек сетки, заданное как положительный целочисленный скаляр. npt должен быть больше половины порядка фильтра: npt > n/2.

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

Длина области вокруг повторяющихся частотных точек, заданная как положительный целочисленный скаляр.

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

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

fir2 не увеличивает автоматически длину window если вы пытаетесь спроектировать фильтр нечетного порядка с полосой пропускания на частоте Nyquist.

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

Пример: hamming(n+1) эквивалентно оставлению окна неопределенным.

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

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

свернуть все

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

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

Алгоритмы

fir2 использует частотную выборку для разработки фильтров. Функция линейно интерполирует необходимую частотную характеристику на плотную, равномерно разнесенную сетку длины npt. fir2 также настраивает области lap точки вокруг повторных значений f обеспечить крутые, но плавные переходы. Чтобы получить коэффициенты фильтра, функция применяет обратное быстрое преобразование Фурье к сетке и умножает на window.

Ссылки

[1] Джексон, Л. Б. Цифровые фильтры и обработка сигналов. 3rd Ed. Boston: Kluwer Academic Publishers, 1996.

[2] Митра, Санджит К. Цифровая обработка сигналов: компьютерный подход. Нью-Йорк: McGraw-Hill, 1998.

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

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