fir2

Создание КИХ-фильтра, основанного на частотной дискретизации

Описание

пример

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

пример

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

пример

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

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

Примеры

свернуть все

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

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

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

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.

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

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-й порядок фильтр 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)

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

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) задает окно Кайзера параметром формы 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] Джексон, L. B. Цифровые фильтры и обработка сигналов. 3-й Эд. Бостон: Kluwer академические издатели, 1996.

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

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

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

| | | | | | | | | |

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