Создание комплексного 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
и содержит следующие поля.
Область | Описание |
---|---|
| Вектор сетки частоты, используемый для оптимизации создания фильтра |
| Желаемая частотная характеристика для каждой точки в |
| Взвешивание для каждой точки в |
| Фактическая частотная характеристика для каждой точки в |
| Ошибка в каждой точке |
| Вектор индексов в |
| Вектор экстремальных частот |
Могут использоваться определяемые пользователем функции вместо предопределенных функций частотной характеристики для @ 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
код. Можно скопировать функцию, изменить ее, переименовать и сохранить в пути.
Расширенная версия метода обмена Ремеза реализована для сложного случая. Этот способ обмена получает оптимальный фильтр, когда природа equiripple фильтра ограничена n+2
экстремалы. Когда он не сходится, алгоритм переключается на алгоритм восхождения-спуска, который берёт верх, чтобы закончить сходимость к оптимальному решению. Для получения дополнительной информации см. ссылки.
[1] Демджанжов, В. Ф., и В. Н. Малоземов. Введение в Minimax. Нью-Йорк: John Wiley & Sons, 1974.
[2] Карам, Л.Ж. Проект сложных цифровых конечных импульсных характеристик в чебышевском смысле. Доктор философии. Дипломная работа, Технологический институт Джорджии, март 1995 года.
[3] Karam, L.J., and J. H. McClellan. «Комплекс Чебышёва Приближения для конечной импульсной характеристики Создания фильтра». IEEE® Сделки по схемам и системам II, март 1995 года, стр. 207-216.