Комплекс и нелинейная фаза 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
, и содержит следующие поля.
Поле | Описание |
---|---|
| Вектор сетки частоты, используемый для фильтра, разрабатывает оптимизацию |
| Желаемая частотная характеристика для каждой точки в |
| Взвешивание для каждой точки в |
| Фактическая частотная характеристика для каждой точки в |
| Ошибка в каждой точке в |
| Вектор индексов в |
| Вектор экстремальных частот |
Определяемые пользователем функции могут использоваться вместо предопределенных функций частотной характеристики для @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] Karam, L.J., и Дж.Х. Макклеллан. “Объедините чебышевское приближение для КИХ-проекта фильтра”. IEEE® Trans. на схемах и системах II, март 1995. PGS. 207-216.
[2] Karam, L.J. Проект комплексного цифрового КИХ просачивается чебышевский смысл, кандидатская диссертация, Технологический институт штата Джорджия, март 1995.
[3] Демянйов, V.F., и В.Н. Малоземов. Введение в Минимэкса, Нью-Йорк: John Wiley & Sons, 1974.