firpm

Создание оптимального КИХ-фильтра Parks-McClellan

Описание

пример

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

пример

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

b = firpm(n,f,a,ftype) использует тип фильтра, заданный 'ftype'.

b = firpm(n,f,a,lgrid) использует целочисленный lgrid управлять плотностью сетки частоты.

[b,err] = firpm(___) возвращает максимальную высоту пульсации в err. Можно использовать это с любым из предыдущих входных синтаксисов.

[b,err,res] = firpm(___) возвращает характеристики частотной характеристики как структуру res.

b = firpm(n,f,fresp,w) возвращает КИХ-фильтр, амплитудные частотой характеристики которого лучше всего аппроксимируют ответ, возвращенный указателем на функцию fresp.

b = firpm(n,f,fresp,w,ftype) проектирует антисимметричные (нечетные) фильтры, где ftype задает фильтр как дифференциатор или Гильбертов трансформатор. Если вы не задаете ftype, вызов выполняется к fresp определить свойство симметрии по умолчанию.

Примеры

свернуть все

Используйте алгоритм Парков-McClellan, чтобы спроектировать КИХ-полосовой фильтр порядка 17. Задайте нормированные частоты полосы задерживания 0.3π и 0.7π рад/выборка и нормированные частоты полосы пропускания 0.4π и 0.6π рад/выборка. Постройте идеальные и фактические ответы величины.

f = [0 0.3 0.4 0.6 0.7 1];
a = [0 0 1 1 0 0];
b = firpm(17,f,a);

[h,w] = freqz(b,1,512);
plot(f,a,w/pi,abs(h))
legend('Ideal','firpm Design')
xlabel 'Radian Frequency (\omega/\pi)', ylabel 'Magnitude'

Спроектируйте фильтр lowpass с частотой среза полосы пропускания на 1 500 Гц и частотой среза полосы задерживания на 2 000 Гц. Задайте частоту дискретизации 8 000 Гц. Потребуйте максимальной амплитуды полосы задерживания 0,01 и максимальной ошибки полосы пропускания (пульсация) 0,001. Получите необходимого порядка фильтра, нормированные ребра диапазона частот, амплитуды диапазона частот и веса с помощью firpmord.

[n,fo,ao,w] = firpmord([1500 2000],[1 0],[0.001 0.01],8000);
b = firpm(n,fo,ao,w);
fvtool(b,1)

Используйте алгоритм Парков-McClellan, чтобы создать 50-й порядок equiripple КИХ-полосовой фильтр, который будет использоваться с сигналами, произведенными на уровне 1 кГц.

N = 50;
Fs = 1e3;

Укажите, что полоса пропускания охватывает частоты между 200 Гц и 300 Гц и что область перехода по обе стороны от полосы пропускания имеет ширину 50 Гц.

Fstop1 = 150;
Fpass1 = 200;
Fpass2 = 300;
Fstop2 = 350;

Спроектируйте фильтр так, чтобы подгонка оптимизации взвесила низкочастотную полосу задерживания с весом 3, полоса пропускания с весом 1, и высокочастотную полосу задерживания с весом 100. Отобразите ответ величины фильтра.

Wstop1 = 3;
Wpass = 1;
Wstop2 = 100;

b = firpm(N,[0 Fstop1 Fpass1 Fpass2 Fstop2 Fs/2]/(Fs/2), ...
    [0 0 1 1 0 0],[Wstop1 Wpass Wstop2]);

fvtool(b,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 через целую полосу.

    Например,

    h = firpm(30,[0.1 0.9],[1 1],'hilbert');
    

    проектирует аппроксимированного КИХ трансформатор Гильберта длины 31.

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

Управляйте плотностью сетки частоты, которая имеет примерно (lgrid*n)/(2*bw) точки частоты, где bw часть общего интервала диапазона частот [0,1] покрытый f. Увеличение lgrid часто результаты в фильтрах, которые более точно совпадают с фильтром equiripple, но которые занимают больше времени, чтобы вычислить. Значение по умолчанию 16 минимальное значение, которое должно быть задано для lgrid.

Частотная характеристика в виде указателя на функцию. Функция вызвана из firpm с этим синтаксисом:

[dh,dw] = fresp(n,f,gf,w)

Аргументы похожи на тех для firpm:

  • n порядок фильтра.

  • f вектор из нормированных ребер диапазона частот, которые появляются монотонно между 0 и 1, где 1 частота Найквиста.

  • gf вектор из узлов решетки, которые были линейно интерполированы по каждому заданному диапазону частот firpm. gf определяет сетку частоты, в которой функция отклика должна быть оценена и содержит те же данные, возвращенные cfirpm в fgrid поле opt структура.

  • w вектор из действительных, положительных весов, один на полосу, используемую во время оптимизации. w является дополнительным в вызове firpm; если не заданный, это установлено в единицу, взвешивающую прежде чем быть переданным fresp.

  • dh и dw желаемая комплексная частотная характеристика и векторы веса полосы, соответственно, оцененный на каждой частоте в сетке gf.

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

свернуть все

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

Максимальная высота пульсации, возвращенная как скаляр.

Характеристики частотной характеристики, возвращенные как структура. Структура res имеет следующие поля:

res.fgrid

Вектор сетки частоты используется для оптимизации создания фильтра

res.des

Желаемая частотная характеристика для каждой точки в res.fgrid

res.wt

Взвешивание для каждой точки в opt.fgrid

res.H

Фактическая частотная характеристика для каждой точки в res.fgrid

res.error

Ошибка в каждой точке в res.fgrid (res.des-res.H)

res.iextr

Вектор из индексов в res.fgrid для экстремальных частот

res.fextr

Вектор из экстремальных частот

Советы

Если вашему созданию фильтра не удается сходиться, создание фильтра не может быть правильным. Проверьте проект путем проверки частотной характеристики.

Если вашему созданию фильтра не удается сходиться, и получившееся создание фильтра не правильно, делайте попытку одного или нескольких из следующего:

  • Увеличьте порядка фильтра.

  • Ослабьте создание фильтра путем сокращения затухания в полосах задерживания и/или расширения областей перехода.

Алгоритмы

firpm проектирует КИХ-фильтр линейной фазы с помощью алгоритма Парков-McClellan [2]. Алгоритм Парков-McClellan использует алгоритм обмена Remez и Чебышевскую теорию приближения спроектировать фильтры с оптимальной подгонкой между желаемыми и фактическими частотными характеристиками. Фильтры оптимальны в том смысле, что максимальная погрешность между желаемой частотной характеристикой и фактической частотной характеристикой минимизирована. Фильтры спроектировали этот путь, предоставляют equiripple поведение в их частотных характеристиках и иногда называются фильтрами equiripple. firpm разрывы выставок в голове и хвосте его импульсной характеристики из-за этой equiripple природы.

Это тип 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 векторы в определении желаемого амплитудного ответа.

firpm всегда использует ровного порядка фильтра для настроек с даже симметрией и ненулевой полосой пропускания на частоте Найквиста. Причина ровного порядка фильтра состоит в том, что для импульсных характеристик, показывающих даже симметрию и нечетные порядки, частотная характеристика на частоте Найквиста обязательно 0. Если вы задаете n с нечетным знаком, firpm шаг это 1.

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

Линейный тип фильтра фазыПорядок фильтраСимметрия коэффициентовОтвет H(f), f = 0Response 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

firpm постепенно увеличивает порядка фильтра 1, при попытке создать фильтр типа II с ненулевой полосой пропускания на частоте Найквиста.

Тип 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

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

Можно также использовать firpm записать функцию, которая задает желаемую частотную характеристику. Предопределенный указатель на функцию частотной характеристики для firpm @firpmfrf, который проектирует КИХ-фильтр линейной фазы.

Примечание

b = firpm(n,f,a,w) эквивалентно b = firpm(n,f,{@firpmfrf,a},w), где, @firpmfrf предопределенный указатель на функцию частотной характеристики для firpm. При желании можно записать собственную функцию отклика. Используйте help private/firpmfrf и см. Создание указателя на функцию для получения дополнительной информации.

Ссылки

[1] Комитет по Цифровой обработке сигналов Акустики IEEE, Речи и Общества Обработки сигналов, редакторы Выбрали Papers in Digital Signal Processing. Издание II. Нью-Йорк: Нажатие IEEE, 1976.

[2] Комитет по Цифровой обработке сигналов Акустики IEEE, Речи, и Общества Обработки сигналов, программ редакторов для Цифровой обработки сигналов. Нью-Йорк: Нажатие IEEE, 1979, алгоритм 5.1.

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

[4] Парки, Томас В. и К. Сидни Беррус. Создание цифровых фильтров. Нью-Йорк: John Wiley & Sons, 1987, p. 83.

[5] Rabiner, Лоуренс Р., Джеймс Х. Макклеллан и Томас В. Парки. "КИХ-Методы Создания цифровых фильтров Используя Взвешенное Чебышевское Приближение". Продолжения IEEE®. Издание 63, Номер 4, 1975, стр 595–610.

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

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

| | | | | | | | | | | |

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