exponenta event banner

cfirpm

Конструкция комплексного и нелинейно-фазового эквиптного КИХ-фильтра

Синтаксис

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 позволяет задавать произвольные ограничения частотной области для конструкции возможно сложного КИХ-фильтра. Погрешность фильтра Чебышева (или minimax) оптимизируется, создавая равнозначные конструкции фильтра FIR.

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 нечетный - отрезок линии, соединяющий точки (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, полосно-пропускающий, 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; если он не указан, то перед передачей ему присваивается значение unity weighting. fresp.

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

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

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

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

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

Примеры

свернуть все

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

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.

Спроектируйте нелинейно-фазовый фильтр FIR порядка 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 для вычисления фильтра FIR. Постройте график фактических и приблизительных откликов величины в дБ и откликов фазы в градусах.

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.

Алгоритмы

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

Ссылки

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

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

[3] Karam, L.J., и Дж. Х. Макклеллан. «Комплексное приближение Чебышева для конструкции фильтра FIR». IEEE ® Transactions on Circuits and Systems II, март 1995 года, стр. 207-216.

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

.

См. также

| | |

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