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, который вызван его указателем на функцию (@fresp). f является вектором пар ребра диапазона частот, заданных в области значений-1 и 1, где 1 соответствует нормированной частоте Найквиста. Частоты должны быть в увеличивающемся порядке, и f должен иметь даже длину. Диапазоны частот охватывают f(k) к f(k+1) для нечетного k; интервалы f(k+1) к f(k+2) для нечетного k является “полосами перехода” или, “не заботятся” об областях во время оптимизации.

Предопределенные функции частотной характеристики fresp включены для многих общих проектов фильтра, как описано ниже. (См. Создание указателя на функцию (MATLAB) для получения дополнительной информации о том, как создать пользовательскую функцию 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')

Разработайте нелинейную фазу 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')

Алгоритмы

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

Ссылки

[1] Karam, L.J., и Дж.Х. Макклеллан. “Объедините чебышевское приближение для КИХ-проекта фильтра”. IEEE® Trans. на схемах и системах II, март 1995. PGS. 207-216.

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

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

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

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

| | |

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

Для просмотра документации необходимо авторизоваться на сайте