Создание комплексного 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
нечетный линейный сегмент, соединяющий точки (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
и содержит следующие поля.
Поле | Описание |
---|---|
| Вектор сетки частоты используется для оптимизации создания фильтра |
| Желаемая частотная характеристика для каждой точки в |
| Взвешивание для каждой точки в |
| Фактическая частотная характеристика для каждой точки в |
| Ошибка в каждой точке в |
| Вектор из индексов в |
| Вектор из экстремальных частот |
Определяемые пользователем функции могут использоваться вместо предопределенных функций частотной характеристики для @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
код. Можно скопировать функцию, изменить ее, переименовать ее и сохранить ее в пути.
Расширенная версия метода обмена 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.