exponenta event banner

firls

Конструкция фильтра КИХ с линейной фазой с наименьшим квадратом

Описание

пример

b = firls(n,f,a) возвращает вектор строки b содержащий n+1 коэффициенты порядка n Фильтр FIR. Этот фильтр имеет частотно-амплитудные характеристики, приблизительно совпадающие с заданными векторами, f и a.

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

пример

b = firls(n,f,a,ftype) указывает тип фильтра, где ftype является:

  • 'hilbert'

  • 'differentiator'

b = firls(n,f,a,w,ftype) использует веса в векторе w для взвешивания ошибки. Он также указывает тип фильтра, где ftype является:

  • 'hilbert'

  • 'differentiator'

Примеры

свернуть все

Далее показано, как сконструировать фильтр нижних частот порядка 225 с переходной полосой.

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

f = [0 0.25 0.3 1]
f = 1×4

         0    0.2500    0.3000    1.0000

a = [1 1 0 0]
a = 1×4

     1     1     0     0

Использовать firls для получения n+1 коэффициенты порядка n низкочастотный фильтр FIR.

b = firls(255,f,a);

Показать импульсную характеристику фильтра

fvtool(b,'impulse')

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

Ниже показано, как сконструировать антисимметричный фильтр 24-го порядка с кусочно-линейными полосами пропускания и построить график желаемых и фактических амплитудных откликов.

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

f = [0 0.3 0.4 0.6 0.7 0.9];
a = [0 1 0 0 0.5 0.5];

Использовать firls для получения 25 коэффициентов фильтра.

b = firls(24,f,a,'hilbert');

Постройте график идеальной амплитудной характеристики вместе с переходными областями.

plot(f.*pi,a,'o','markerfacecolor',[1 0 0]);
hold on;
plot(f.*pi,a,'r--','linewidth',2);

Figure contains an axes. The axes contains 2 objects of type line.

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

[H,F] = freqz(b,1);
plot(F,abs(H));
set(gca,'xlim',[0 pi])
legend('Filter Specification','Transition Regions','Magnitude Response')

Figure contains an axes. The axes contains 3 objects of type line. These objects represent Filter Specification, Transition Regions, Magnitude Response.

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

свернуть все

Порядок фильтра, заданный как целочисленный скаляр. Для нечетных порядков частотная характеристика на частоте Найквиста обязательно равна 0. По этой причине firls всегда использует четный порядок фильтрации для конфигураций с полосой пропускания на частоте Найквиста. При указании нечетного значения n, firls увеличивает его на 1.

Пример: 8

Типы данных: int8 | int16 | int32 | int64

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

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

Пример: [0 0.3 0.4 1]

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

Значения амплитуды функции в каждой точке частоты, заданные как вектор той же длины, что и f. Эта длина должна быть четным числом.

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

Желаемая амплитуда на частотах между парами точек (f (k) , f (k + 1)) для k четных не определена. Это переходные или «плевать» регионы.

Пример: [1 1 0 0]

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

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

Пример: [0.5 1]

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

Тип фильтра, указанный как 'hilbert' или 'differentiator'.

Пример: «гильберт»

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

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

свернуть все

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

b = firls(n,f,a) проектирует линейно-фазовый фильтр типа I (n нечетный) и тип II (n) . Выходные коэффициенты, или «отводы», в b подчиняйтесь отношению:

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

b = firls(n,f,a,'hilbert') конструирует линейно-фазовый фильтр с нечётной симметрией (тип III и тип IV). Выходные коэффициенты, или «отводы», в b подчиняйтесь отношению:

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

b = firls(n,f,a,'differentiator') конструирует фильтры типа III и типа IV, используя специальную технику взвешивания. Для ненулевых диапазонов амплитуд интегральная квадратичная погрешность имеет вес (1/f) 2. Это взвешивание приводит к тому, что погрешность на низких частотах значительно меньше, чем на высоких частотах. Для КИХ-дифференциаторов, которые имеют амплитудную характеристику, пропорциональную частоте, фильтры минимизируют относительную интегральную квадратичную ошибку. Это значение является интегралом квадрата отношения погрешности к желаемой амплитуде .

Подробнее

свернуть все

Диагностика

Сообщения об ошибках и предупреждения

При использовании неверного аргумента отображается одно из следующих диагностических сообщений:

F must be even length.
F and A must be equal lengths.
Requires symmetry to be 'hilbert' or 'differentiator'.
Requires one weight per band.
Frequencies in F must be nondecreasing.
Frequencies in F must be in range [0,1].

Более серьезное предупреждение

Warning: Matrix is close to singular or badly scaled.

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

Алгоритмы

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

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

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

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

Тип I

Даже

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

Без ограничений

Без ограничений

Тип II

Странный

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

Без ограничений

H (1) = 0

Тип III

Даже

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

H (0) = 0

H (1) = 0

Тип IV

Странный

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

H (0) = 0

Без ограничений

Ссылки

[1] Parks, T.W. и C.S. Burrus, Digital Filter Design, John Wiley & Sons, 1987, pp. 54-83.

[2] Оппенгейм, А.В., и Р.В. Шефер, дискретная обработка временных сигналов, Прентис-Холл, 1989, стр. 256-266.

См. также

| | |

Представлен в R2011a