exponenta event banner

fir2

Конструкция фильтра ПИХ на основе выборки частоты

Описание

пример

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

пример

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

пример

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

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

Примеры

свернуть все

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

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

Проектирование фильтра верхних частот FIR 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.

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

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.

Спроектируйте фильтр нижних частот 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.

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

  • Синусоида между 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);

Повторите расчет, используя окно Kaiser с параметром формы 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 при попытке создать фильтр нечетного порядка с полосой пропускания на частоте Найквиста.

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

Пример: hamming(n+1) эквивалентно оставлению окна без указания.

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

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

свернуть все

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

B (z )  =b(1) + b(2)z + .. .  +b(n+1)z-n.

Алгоритмы

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

Ссылки

[1] Джексон, Л. Б. Цифровые фильтры и обработка сигналов. 3-й ред. Бостон: Академические издательства Клювера, 1996.

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

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

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