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

    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, bandpass, bandstop, inverse-sinc и multiband.

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

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

При наличии 'sym' опция, отличный от 'none' задан, ребра полосы должны быть заданы только по положительным частотам; область отрицательной частоты заполняется от симметрии. Если a '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.

Алгоритмы

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

Ссылки

[1] Демджанжов, В. Ф., и В. Н. Малоземов. Введение в Minimax. Нью-Йорк: John Wiley & Sons, 1974.

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

[3] Karam, L.J., and J. H. McClellan. «Комплекс Чебышёва Приближения для конечной импульсной характеристики Создания фильтра». IEEE® Сделки по схемам и системам II, март 1995 года, стр. 207-216.

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

.

См. также

| | |

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