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