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

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

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

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

Спроектируйте 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')

Спроектируйте КИХ фильтр 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]')

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

свернуть все

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

Нормированная частота указывает в виде вектора с действительным знаком. Аргумент должен быть в области значений [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')

В этом случае, коэффициенты фильтра 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