cfirpm

Создание комплексного equiripple КИХ-фильтра с нелинейной фазой

Описание

пример

b = cfirpm(n,f,fresp) возвращает длину nФильтр на +1 феркин с наилучшим приближением к желаемой частотной характеристике, как возвращено fresp функция, которая вызвана ее указателем на функцию (@fresp).

b = cfirpm(n,f,fresp,w) использует веса, заданные w взвешивать подгонку в каждом диапазоне частот.

b = cfirpm(n,f,a) задает амплитуды a в ребрах полосы в f. Этот синтаксис возвращает тот же результат как b = cfirpm(n,f,{@multiband,a}).

b = cfirpm(n,f,a,w) применяет дополнительный набор положительных весов, один на полосу, для использования во время оптимизации. Если вы не задаете w, функция устанавливает веса на единицу.

пример

b = cfirpm(___,sym) налагает ограничение симметрии на импульсную характеристику проекта. В дополнение к определению sym, задайте входную комбинацию от любого из предыдущих синтаксисов.

b = cfirpm(___,debug) отображения или скрывают промежуточные результаты во время создания фильтра.

b = cfirpm(___,lgrid) управляет плотностью сетки частоты.

b = cfirpm(___,'skip_stage2') отключает второй этапный алгоритм оптимизации, который выполняется только когда cfirpm функция решает, что оптимальное решение не было достигнуто стандартом firpm ошибочный обмен. Отключение этого алгоритма может увеличить скорость расчета, но подвергнуться сокращению точности. По умолчанию вторая этапная оптимизация включена.

пример

[b,delta] = cfirpm(___) возвращает максимальную высоту пульсации delta.

[b,delta,opt] = cfirpm(___) возвращает дополнительные результаты, вычисленные cfirpm функция.

Примеры

свернуть все

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

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 object and other objects of type uitoolbar, uimenu. The axes object with title Magnitude Response (dB) and Phase Response contains an object of type line.

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

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 objects. Axes object 1 contains 2 objects of type line. These objects represent Approximation, Desired. Axes object 2 contains 2 objects of type line.

Спроектируйте фильтр lowpass порядка 30 с помощью пользовательской функции частотной характеристики fresp. Код для fresp функция доступна в конце примера.

[b,delta]= cfirpm(30,linspace(-1,1,32),@fresp);

Используйте FVTool визуализировать ответ величины фильтра.

fvtool(b,1)

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes object and other objects of type uitoolbar, uimenu. The axes object with title Magnitude Response (dB) contains an object of type line.

Пользовательский fresp Функция: Спроектируйте фильтр lowpass

fresp функция позволяет вам принять решение спроектировать фильтр lowpass, фильтр highpass или дифференциатор. Порядок фильтра N и массив частоты F должен быть задан. Если сетка частоты GF и веса W не заданы, функция определяет те значения автоматически.

function [dh,dw] = fresp(N,F,GF,W)

W = [1;1]*(W(:).'); W = W(:);

type = 'lowpass';

mags = zeros(size(W));

switch type
    case 'lowpass'
        mags(10:end-10) = 1;
    case 'highpass'
        mags(1:10) = 1;
        mags(end-10:end) = 1;
    case 'differentiator'
        mags = abs(linspace(-pi,pi,length(mags)));
end

dh = interp1(F(:),mags,GF).*exp(-1j*pi*GF*N/2);
dw = interp1(F(:),W,GF);

end

Входные параметры

свернуть все

Порядок фильтра в виде действительной положительной скалярной величины.

Нормированная частота указывает в виде вектора с действительным знаком с элементами в области значений [–1, 1], где 1 соответствует нормированной частоте Найквиста. Частоты должны быть в увеличивающемся порядке и f должен иметь даже длину. Диапазоны частот охватывают f(k) к f(k +1) для нечетного k. Интервалы f(k +1) к f(k +2) для нечетного k transition bands или области don't care во время оптимизации.

Частотная характеристика в виде указателя на функцию. Для получения дополнительной информации смотрите Предопределенные Функции Частотной характеристики и Пользовательские Функции Частотной характеристики.

Желаемые амплитуды в точках заданы в fВ виде вектора. Желаемая амплитуда на частотах между парами точек f(k) и f(k +1) для нечетного k линейный сегмент, соединяющий точки (f(k), a(k)) и (f(k +1), a(k +1)).

Веса раньше настраивали подгонку в каждом диапазоне частот в виде вектора с действительным знаком. Длина w половина длины f, таким образом, точно один вес существует на полосу. Если вы не задаете w, функция устанавливает веса на единицу.

Ограничение симметрии наложило на импульсную характеристику создания фильтра в виде одного из этих значений:

  • 'none' — Не наложите ограничение симметрии. Эта опция является значением по умолчанию, если вы передаете какие-либо отрицательные частоты полосы функции или если fresp не предоставляет значение по умолчанию.

  • 'even' — Наложите действительное и даже импульсную характеристику. Эта опция является значением по умолчанию для highpass, lowpass, allpass, полосы пропускания, bandstop, инверсии-sinc и многополосных проектов.

  • 'odd' — Наложите действительную и нечетную импульсную характеристику. Эта опция является значением по умолчанию для проектов дифференциатора и Гильберта.

  • 'real' — Наложите сопряженную симметрию для частотной характеристики.

Если вы задаете значение кроме 'none', необходимо задать ребра полосы только по положительным частотам (отрицательная область частоты заполнена в от симметрии). Если вы не задаете sym, функция запрашивает fresp для настройки по умолчанию. Любой предоставленный пользователями fresp функция должна возвратить допустимый sym опция, когда это - переданный 'defaults' как порядок фильтра n.

Отображение промежуточных результатов во время создания фильтра в виде 'off'трассировкаPlots, или 'both'.

Плотность сетки частоты в виде массива ячеек целого числа. Сетка частоты имеет примерно 2^nextpow2(lgrid*n) точки частоты.

Выходные аргументы

свернуть все

Отфильтруйте коэффициенты, возвращенные как вектор-строка из длины n+1.

Максимальная высота пульсации, возвращенная как скаляр.

Дополнительные результаты, вычисленные 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 функции частотной характеристики включены для многих общих проектов фильтра в этом разделе. Для получения дополнительной информации о том, как создать пользовательское 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.

Пользовательские функции частотной характеристики

Вместо предопределенной частотной характеристики функционирует для 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. Если вы не задаете этот вход, cfirpm наборы это к единице, взвешивающей прежде, чем передать это fresp.

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

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

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

sym = fresp('defaults',{n,f,[],w,p1,p2,...})
Аргументы могут использоваться в определении соответствующего значения по умолчанию симметрии по мере необходимости. Можно использовать локальную функцию lowpass как шаблон для генерации новых функций частотной характеристики. Найти lowpass функционируйте, введите edit cfirpm в командной строке и поиске lowpass в cfirpm код функции. Можно скопировать функцию, изменить ее, переименовать ее и сохранить ее в пути.

Алгоритмы

cfirpm функция позволяет вам задать произвольные ограничения частотного диапазона для проекта возможно комплексного КИХ-фильтра. Чебышев (или минимакс) ошибка фильтра оптимизирован, произведя equiripple КИХ-проекты фильтра.

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

Ссылки

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

[2] Karam, L.J. Проект комплексного цифрового КИХ просачивается чебышевский смысл. Ph.D. Тезис, Технологический институт штата Джорджия, март 1995.

[3] Karam, L.J., и Дж. Х. Макклеллан. "Объедините чебышевское приближение для КИХ-создания фильтра". IEEE® Транзакции на Схемах и Системах II: Аналоговая и Цифровая обработка сигналов 42, № 3 (март 1995): 207–216.

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

Смотрите также

| | |

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