cfirpm

Создание комплексного equiripple КИХ-фильтра с нелинейной фазой

Синтаксис

b = cfirpm(n,f,@fresp)
b = cfirpm(n,f,@fresp,w)
b = cfirpm(n,f,a)
b = cfirpm(n,f,a,w)
b = cfirpm(...,'sym')
b = cfirpm(...,'skip_stage2')
b = cfirpm(...,'debug')
b = cfirpm(...,{lgrid})
[b,delta] = cfirpm(...)
[b,delta,opt] = cfirpm(...)

Описание

cfirpm позволяет произвольным ограничениям частотного диапазона быть заданными для проекта возможно комплексного КИХ-фильтра. Чебышев (или минимакс) ошибка фильтра оптимизирован, произведя equiripple КИХ-проекты фильтра.

b = cfirpm(n,f,@fresp) возвращает длину n+1 КИХ-фильтр с наилучшим приближением к желаемой частотной характеристике, как возвращено функциональным fresp, который вызван его указателем на функцию (@frespF вектор из пар ребра диапазона частот, заданных в области значений-1 и 1, где 1 соответствует нормированной частоте Найквиста. Частоты должны быть в увеличивающемся порядке и f должен иметь даже длину. Диапазоны частот охватывают f(k) к f(k+1) для k нечетный; интервалы f(k+1) к f(k+2) для k нечетный “полосы перехода”, или “не заботятся” об областях во время оптимизации.

Предопределенный fresp функции частотной характеристики включены для многих общих проектов фильтра, аналогичных описанному ниже. (См. Создание указателя на функцию для получения дополнительной информации о том, как создать пользовательский fresp функция. Для всех предопределенных функций частотной характеристики, опция симметрии 'sym' значения по умолчанию к 'even' если никакие отрицательные частоты не содержатся в f и d= 0  ; в противном случае 'sym' значения по умолчанию к 'none'. (См. 'sym' опция ниже для деталей.) Для всех предопределенных функций частотной характеристики, d указывает, что групповая задержка возместила таким образом, что ответ фильтра имеет групповую задержку n/2+d в модулях демонстрационного интервала. Отрицательные величины создают меньше задержки; положительные значения создают больше задержки. d по умолчанию= 0  :

  • @lowpass, @highpass, @allpass, @bandpass, @bandstop

    Эти функции совместно используют общий синтаксис, иллюстрируемый ниже @lowpass.

      b = cfirpm(n,f,@lowpass,...) и

      b = cfirpm(n,f,{@lowpass,d},...) спроектируйте линейную фазу (n/2+d задержитесь), фильтр.

    Примечание

    Для @bandpass фильтры, первый элемент в векторе частоты должен быть меньше чем или равен нулю, и последний элемент должен быть больше или быть равным нулю.

  • @multiband проектирует фильтр частотной характеристики линейной фазы с произвольными амплитудами полосы.

      b = cfirpm(n,f,{@multiband,a},...) и

      b = cfirpm(n,f,{@multiband,a,d},...) задайте векторный a содержа желаемые амплитуды в ребрах полосы в f. Желаемая амплитуда на частотах между парами точек f(k) и f(k+1) для k нечетный линейный сегмент, соединяющий точки (f(k),a(k)) и (f(k+1),a(k+1)).

  • @differentiator проектирует дифференциатор линейной фазы. Для этих проектов нулевая частота должна быть в полосе перехода, и взвешивание полосы собирается быть обратно пропорциональным частоте.

    b = cfirpm(n,f,{@differentiator,fs},...) и

    b = cfirpm(n,f,{@differentiator,fs,d},...) задайте частоту дискретизации fs используемый, чтобы определить наклон ответа дифференциатора. Если не использовано, fs значения по умолчанию к 1.

  • @hilbfilt проектирует ответ фильтра преобразования Гильберта линейной фазы. Для Гильбертовых проектов нулевая частота должна быть в полосе перехода.

    b = cfirpm(n,f,@hilbfilt,...) и

    b = cfirpm(N,F,{@hilbfilt,d},...) спроектируйте линейную фазу (n/2+d задержитесь), фильтр преобразования Гильберта.

  • @invsinc проектирует ответ фильтра инверсии-sinc линейной фазы.

    b = cfirpm(n,f,{@invsinc,a},...) и

    b = cfirpm(n,f,{@invsinc,a,d},...) задайте получают a для функции sinc, вычисленной как sinc (a*g), где g содержит частоты сетки оптимизации, нормированные к области значений [–1,1]. По умолчанию, a = 1. Смещением групповой задержки является d, таким образом, что ответ фильтра будет иметь групповую задержку N/2 + d в модулях демонстрационного интервала, где N является порядком фильтра. Отрицательные величины создают меньше задержки, и положительные значения создают больше задержки. По умолчанию, d  = 0.

b = cfirpm(n,f,@fresp,w) использует действительные, неотрицательные веса в векторном w взвешивать подгонку в каждом диапазоне частот. Длина w половина длины f, таким образом, существует точно один вес на полосу.

b = cfirpm(n,f,a) синоним для b = cfirpm(n,f,{@multiband,a}).

b = cfirpm(n,f,a,w) применяет дополнительный набор положительных весов, один на полосу, для использования во время оптимизации. Если w не задан, веса установлены в единицу.

b = cfirpm(...,'sym') налагает ограничение симметрии на импульсную характеристику проекта, где 'sym' может быть одно из следующего:

  • 'none' не указывает ни на какое ограничение симметрии. Это - значение по умолчанию, если какие-либо отрицательные частоты ребра полосы передаются, или если fresp не предоставляет значение по умолчанию.

  • 'even' указывает на действительное и даже импульсную характеристику. Это - значение по умолчанию для highpass, lowpass, allpass, полосы пропускания, bandstop, инверсии-sinc и многополосных проектов.

  • 'odd' указывает на действительную и нечетную импульсную характеристику. Это - значение по умолчанию для проектов дифференциатора и Гильберта.

  • 'real' указывает на сопряженную симметрию для частотной характеристики

Если любой 'sym' опция кроме 'none' задан, ребра полосы должны быть заданы только по положительным частотам; отрицательная область частоты заполнена в от симметрии. Если 'sym' опция не задана, fresp функция запрошена для настройки по умолчанию. Любой предоставленный пользователями fresp функция должна возвратить допустимый 'sym' опция, когда это - переданный 'defaults' как порядок фильтра N.

b = cfirpm(...,'skip_stage2') отключает второй этапный алгоритм оптимизации, который выполняется только когда cfirpm решает, что оптимальное решение не было достигнуто стандартным firpm ошибочный обмен. Отключение этого алгоритма может увеличить скорость расчета, но может подвергнуться сокращению точности. По умолчанию вторая этапная оптимизация включена.

b = cfirpm(...,'debug') включает отображение промежуточных результатов во время создания фильтра, где 'debug' может быть один из 'trace'Plots, 'both', или 'off'. По умолчанию это установлено в 'off'.

b = cfirpm(...,{lgrid}) использует целочисленный lgrid управлять плотностью сетки частоты, которая имеет примерно 2^nextpow2(lgrid*n) точки частоты. Значение по умолчанию для lgrid 25. Обратите внимание на то, что {lgrid} аргумент должен быть массивом ячеек 1 на 1.

Любая комбинация 'sym', 'skip_stage2', 'debug', и {lgrid} опции могут быть заданы.

[b,delta] = cfirpm(...) возвращает максимальную высоту пульсации delta.

[b,delta,opt] = cfirpm(...) возвращает структуру opt из дополнительных результатов, вычисленных cfirpm и содержит следующие поля.

Поле

Описание

opt.fgrid

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

opt.des

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

opt.wt

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

opt.H

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

opt.error

Ошибка в каждой точке в opt.fgrid

opt.iextr

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

opt.fextr

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

Определяемые пользователем функции могут использоваться вместо предопределенных функций частотной характеристики для @fresp. Функция вызвана из cfirpm использование следующего синтаксиса

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

где:

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

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

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

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

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

  • p1, p2..., дополнительные параметры, которые могут быть переданы fresp.

Кроме того, предварительный вызов выполняется к fresp определить свойство 'sym' симметрии по умолчанию. Этот вызов выполняется с помощью синтаксиса:

sym = fresp('defaults',{n,f,[],w,p1,p2,...})

Аргументы могут использоваться в определении соответствующего значения по умолчанию симметрии по мере необходимости. Можно использовать локальную функцию lowpass как шаблон для генерации новых функций частотной характеристики. Найти lowpass функция, введите edit cfirpm в командной строке и поиске lowpass в cfirpm код. Можно скопировать функцию, изменить ее, переименовать ее и сохранить ее в пути.

Примеры

свернуть все

Спроектируйте линейную фазу с 31 касанием фильтр lowpass. Отобразите его величину и фазовые отклики.

b = cfirpm(30,[-1 -0.5 -0.4 0.7 0.8 1],@lowpass);
fvtool(b,1,'OverlayedAnalysis','phase')

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

Спроектируйте нелинейную фазу allpass КИХ-фильтр порядка 22 с частотной характеристикой, данной приблизительно exp(-jπfN/2+j4πf|f|), где f[-1,1].

n = 22;                              % Filter order
f = [-1 1];                          % Frequency band edges
w = [1 1];                           % Weights for optimization
gf = linspace(-1,1,256);             % Grid of frequency points 
d = exp(-1i*pi*gf*n/2 + 1i*pi*pi*sign(gf).*gf.*gf*(4/pi));
                                     % Desired frequency response

Используйте cfirpm вычислить КИХ-фильтр. Постройте фактические и аппроксимированные ответы величины в дБ и фазовых откликах в градусах.

b = cfirpm(n,f,'allpass',w,'real');  % Approximation
freqz(b,1,256,'whole')

subplot(2,1,1)                       % Overlay response
hold on
plot(pi*(gf+1),20*log10(abs(fftshift(d))),'r--')

subplot(2,1,2)
hold on
plot(pi*(gf+1),unwrap(angle(fftshift(d)))*180/pi,'r--')
legend('Approximation','Desired','Location','SouthWest')

Figure contains 2 axes. Axes 1 contains 2 objects of type line. These objects represent Approximation, Desired. Axes 2 contains 2 objects of type line.

Алгоритмы

Расширенная версия метода обмена Remez реализована для комплексного случая. Этот обменный метод получает оптимальный фильтр, когда equiripple природа фильтра ограничивается, чтобы иметь n+2 extremals. Когда это не сходится, алгоритм переключается на алгоритм спуска подъема, который вступает во владение, чтобы закончить сходимость к оптимальному решению. Смотрите ссылки для получения дальнейшей информации.

Ссылки

[1] Демянйов, V. F. и В. Н. Малоземов. Введение в минимакс. Нью-Йорк: John Wiley & Sons, 1974.

[2] Karam, L.J. Проект комплексного цифрового КИХ просачивается чебышевский смысл. Ph.D. Тезис, Технологический институт штата Джорджия, март 1995.

[3] Karam, L.J., и Дж. Х. Макклеллан. "Объедините Чебышевское Приближение для КИХ-Создания фильтра". IEEE® Transactions на Схемах и Системах II, март 1995, стр 207–216.

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

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

| | |

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