firls

Создание КИХ-фильтра линейной фазы наименьших квадратов

Описание

пример

b = firls(n,f,a) возвращает вектор-строку b содержа n+1 коэффициенты порядка-n КИХ-фильтр. Частота и амплитудные характеристики получившегося фильтра совпадают с данными векторами f и a.

пример

b = firls(n,f,a,w) использование w взвешивать интервалы частоты.

пример

b = firls(___,ftype) проектирует антисимметричные (нечетные) фильтры, где ftype задает фильтр как дифференциатор или Гильбертов трансформатор. Можно использовать ftype с любым из предыдущих входных синтаксисов.

Примеры

свернуть все

Спроектируйте КИХ фильтр lowpass порядка 255 с областью перехода между 0.25π и 0.3π. Используйте fvtool отобразить величину и фазовые отклики фильтра.

b = firls(255,[0 0.25 0.3 1],[1 1 0 0]);
fvtool(b,1,'OverlayedAnalysis','phase')

Figure Filter Visualization Tool - Magnitude Response (dB) and Phase Response contains an axes object and other objects of type uitoolbar, uimenu. The axes object with title Magnitude Response (dB) and Phase Response contains an object of type line.

Идеальному дифференциатору дали частотную характеристику D(ω)=jω. Спроектируйте дифференциатор порядка 30, который ослабляет частоты выше 0.9π. Включайте фактор π в амплитуде, потому что частоты нормированы на π. Отобразите нулевой фазовый отклик фильтра.

b = firls(30,[0 0.9],[0 0.9*pi],'differentiator');

fvtool(b,1,'MagnitudeDisplay','zero-phase')

Figure Filter Visualization Tool - Zero-phase Response contains an axes object and other objects of type uitoolbar, uimenu. The axes object with title Zero-phase Response contains an object of type line.

Спроектируйте 24-й порядок антисимметричный фильтр с кусочными линейными полосами пропускания.

F = [0 0.3 0.4 0.6 0.7 0.9]; 
A = [0 1.0 0.0 0.0 0.5 0.5];
b = firls(24,F,A,'hilbert');

Постройте желаемые и фактические частотные характеристики.

[H,f] = freqz(b,1,512,2);
plot(f,abs(H))
hold on
for i = 1:2:6, 
   plot([F(i) F(i+1)],[A(i) A(i+1)],'r--')
end
legend('firls design','Ideal')
grid on
xlabel('Normalized Frequency (\times\pi rad/sample)')
ylabel('Magnitude')

Figure contains an axes object. The axes object contains 4 objects of type line. These objects represent firls design, Ideal.

Спроектируйте КИХ фильтр lowpass. Полоса пропускания лежит в диапазоне от DC до 0.45π рад/отсчет. Полоса задерживания располагается от 0.55π рад/отсчет к частоте Найквиста. Произведите три различных проекта, изменив веса полос в методе наименьших квадратов.

В первом проекте сделайте вес полосы задерживания выше, чем вес полосы пропускания на коэффициент 100. Используйте эту спецификацию, когда очень важно, что ответ величины в полосе задерживания является плоским и близко к 0. Неравномерность в полосе пропускания приблизительно в 100 раз выше, чем пульсация полосы задерживания.

bhi = firls(18,[0 0.45 0.55 1],[1 1 0 0],[1 100]);

Во втором проекте инвертируйте веса так, чтобы вес полосы пропускания был 100 раз весом полосы задерживания. Используйте эту спецификацию, когда очень важно, что ответ величины в полосе пропускания является плоским и близко к 1. Пульсация полосы задерживания приблизительно в 100 раз выше, чем неравномерность в полосе пропускания.

blo = firls(18,[0 0.45 0.55 1],[1 1 0 0],[100 1]);

В третьем проекте дайте тот же вес обеим полосам. Результатом является фильтр с подобной пульсацией в полосе пропускания и полосе задерживания.

b = firls(18,[0 0.45 0.55 1],[1 1 0 0],[1 1]);

Визуализируйте ответы величины трех фильтров.

hfvt = fvtool(bhi,1,blo,1,b,1,'MagnitudeDisplay','Zero-phase');
legend(hfvt,'bhi: w = [1 100]','blo: w = [100 1]','b: w = [1 1]')

Figure Filter Visualization Tool - Zero-phase Response contains an axes object and other objects of type uitoolbar, uimenu. The axes object with title Zero-phase Response contains 3 objects of type line. These objects represent bhi: w = [1 100], blo: w = [100 1], b: w = [1 1].

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

свернуть все

Порядок фильтра в виде действительной положительной скалярной величины.

Нормированная частота указывает в виде вектора с действительным знаком. Аргумент должен быть в области значений [0, 1], где 1 соответствует частоте Найквиста. Число элементов в векторе всегда является кратным 2. Частоты должны быть в не уменьшающемся порядке.

Желаемые амплитуды в точках заданы в fВ виде вектора. f и a должна быть та же длина. Длина должна быть четным числом.

  • Желаемая амплитуда на частотах между парами точек (f (k), f (k +1)) для нечетного k является линейным сегментом, соединяющим точки (f (k), a (k)) и (f (k +1), a (k +1)).

  • Желаемая амплитуда на частотах между парами точек (f (k), f (k +1)) для k даже не задана. Областями между такими точками являются области перехода или области, которые не важны для конкретного приложения.

Веса раньше настраивали подгонку в каждом диапазоне частот в виде вектора с действительным знаком. Длина w половина длины f и a, таким образом, существует точно один вес на полосу.

Отфильтруйте тип для фильтров линейной фазы с нечетной симметрией (тип III и введите IV) в виде любого 'hilbert' или 'differentiator':

  • 'hilbert' — Выходные коэффициенты в b выполните отношение b (k) = –b (n + 2 – k), k = 1 ..., n + 1. Этот класс фильтров включает Гильбертов трансформатор, который имеет желаемую амплитуду 1 через целую полосу.

  • 'differentiator' — Для ненулевых амплитудных полос фильтр взвешивает ошибку на коэффициент 1/f2 так, чтобы ошибка в низких частотах была намного меньше, чем на высоких частотах. Для КИХ-дифференциаторов, которые имеют амплитудную характеристику, пропорциональную частоте, эти фильтры минимизируют максимальную относительную погрешность (максимум отношения ошибки к желаемой амплитуде).

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

свернуть все

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

Больше о

свернуть все

Отфильтруйте несовместимость ширины длины и перехода

Если вы проектируете фильтр, таким образом, что продукт длины фильтра и ширины перехода является большим, вы можете получить это предупреждающее сообщение: Matrix is close to singular or badly scaled. Следующий пример иллюстрирует это ограничение.

b = firls(100,[0 0.15 0.85 1],[1 1 0 0]);
Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND =  3.406552e-18.
fvtool(b,1,'OverlayedAnalysis','phase')

Figure Filter Visualization Tool - Magnitude Response (dB) and Phase Response contains an axes object and other objects of type uitoolbar, uimenu. The axes object with title Magnitude Response (dB) and Phase Response contains an object of type line.

В этом случае, коэффициенты фильтра b не может представлять желаемый фильтр. Можно проверять фильтр путем рассмотрения его частотной характеристики.

Алгоритмы

firls проектирует КИХ-фильтр линейной фазы, который минимизирует взвешенную интегрированную квадратичную невязку между идеальной кусочной линейной функцией и ответом величины фильтра по набору желаемых диапазонов частот.

Ссылка [2] описывает теоретический подход позади firls. Функция решает систему линейных уравнений, включающих матрицу скалярного произведения примерно размера n\2 использование MATLAB® \ оператор.

Это тип I (n является нечетным) и тип II (n является четным), фильтры линейной фазы. Векторы f и a задайте амплитудные частотой характеристики фильтра:

  • f вектор из пар точек частоты, заданных в области значений от 0 до 1, где 1 соответствует частоте Найквиста. Частоты должны быть в увеличивающемся порядке. Дублирующиеся точки частоты позволены и, на самом деле, могут использоваться, чтобы спроектировать фильтр, который является точно тем же самым как фильтрами, возвращенными fir1 и fir2 функции с прямоугольным (rectwin) окно.

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

    Желаемая амплитудная функция на частотах между парами точек (f (k), f (k +1)) для нечетного k является линейным сегментом, соединяющим точки (f (k), a (k)) и (f (k +1), a (k +1)).

    Желаемая амплитудная функция на частотах между парами точек (f (k), f (k +1)) для k даже не задана. Это переход (“не заботятся”), области.

  • f и a та же длина. Эта длина должна быть четным числом.

Этот рисунок иллюстрирует отношение между f и a векторы в определении желаемого амплитудного ответа.

Эта функция проектирует тип I, II, III и фильтры линейной фазы IV. Тип I и II является фильтрами по умолчанию, когда n четен и нечетен, соответственно, в то время как 'hilbert' и 'differentiator' флаги производят тип III (n, является четным), и IV (n является нечетным), фильтры. Различные типы фильтра имеют различные симметрии и ограничения на их частотные характеристики (см. [1] для деталей).

Линейный тип фильтра фазыПорядок фильтраСимметрия коэффициентовОтвет H (f), f = 0Ответ H (f), f = 1 (Найквист)

Тип I

Даже

b(k)=b(n+2k),k=1,...,n+1

Никакое ограничение

Никакое ограничение

Тип II

Нечетный

b(k)=b(n+2k),k=1,...,n+1

Никакое ограничение

H (1) = 0

Тип III

Даже

b(k)=b(n+2k),k=1,...,n+1

H (0) = 0

H (1) = 0

Введите IV

Нечетный

b(k)=b(n+2k),k=1,...,n+1

H (0) = 0

Никакое ограничение

Ссылки

[1] Оппенхейм, Алан V, Рональд В. Шафер и Джон Р. Бак. Обработка сигналов дискретного времени. Верхний Сэддл-Ривер, NJ: Prentice Hall, 1999.

[2] Парки, Томас В. и К. Сидни Беррус. Создание цифровых фильтров. Хобокен, NJ: John Wiley & Sons, 1987, стр 54–83.

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

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

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

| | |

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