fir2

Частота основанный на выборке КИХ-проект фильтра

Синтаксис

b = fir2(n,f,m)
b = fir2(n,f,m,npt,lap)
b = fir2(___,window)

Описание

пример

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

пример

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

пример

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

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

Примеры

свернуть все

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

load chirp
y = y + 0.25*(rand(size(y))-0.5);

Разработайте КИХ 34-го порядка highpass фильтр, чтобы ослабить компоненты сигнала ниже. Задайте частоту среза 0,48. Визуализируйте частотную характеристику фильтра.

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

freqz(bhi,1)

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

outhi = filter(bhi,1,y);
t = (0:length(y)-1)/Fs;

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])

Измените фильтр от highpass до 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])

Разработайте 30-й порядок lowpass фильтр с нормированной частотой среза 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)

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

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

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

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

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

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

Разработайте КИХ-фильтр со следующей частотной характеристикой:

  • Синусоида между 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 использует прямоугольное окно по умолчанию. Вычислите нулевой фазовый отклик фильтра более чем 1 024 точки.

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')

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

свернуть все

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

Для настроек с полосой пропускания на частоте Найквиста 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 с параметром формы 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] Mitra, цифровая обработка сигналов Сэнджита К.: компьютерный подход. Нью-Йорк: McGraw-Hill, 1998.

[2] Джексон, L. B. Цифровые фильтры и обработка сигналов. 3-й Эд. Бостон: Kluwer академические издатели, 1996.

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

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

| | | | | | | | | |

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