Оптимизированные КИХ-фильтры фиксированной точки

Этот пример показывает, как оптимизировать КИХ-фильтры фиксированной точки. Оптимизация может относиться к характеристикам ответа фильтра, таким как затухание полосы задерживания или количество битов, требуемых достигнуть конкретной спецификации. Эта функциональность особенно полезна для пользователей, предназначающихся для оборудования, которые имеют много конфигурируемых коэффициентов определенного wordlength и/или в случаях, обычно найденных на ASICs и FPGAs, где существует большой пробел проекта, чтобы исследовать. Аппаратный разработчик может обычно обменивать больше коэффициентов на меньшее количество битов или наоборот оптимизировать для различного ASICs или FPGAs.

Этот пример иллюстрирует различные методы на основе процедуры формирования шума, которые приводят к оптимизированным КИХ-коэффициентам фильтра фиксированной точки. Пример показывает как:

  • минимизируйте коэффициенты wordlength,

  • ограничьте коэффициенты wordlength,

  • максимизируйте затухание полосы задерживания.

Теоретический фон

Алгоритм формирования шума по существу перемещает шум квантования из полосы критической частоты (обычно полоса задерживания) КИХ-фильтра фиксированной точки за счет увеличения его в других полосах. Блок-схема ниже иллюстрирует процесс шумового формирования. По существу коэффициенты фильтра передаются через систему, которая напоминает цифровой фильтр, но с квантизатором в середине. Система вычисляет ошибку квантования для каждого коэффициента, затем передавая ошибку через простого БИХ highpass фильтр, заданный b1, b2 и b3 коэффициентов. 'Круглый' блок округляет вход к самому близкому квантованному значению. После этого квантованное значение вычтено из исходного значения с плавающей точкой. Значения начального состояния в каждом блоке задержки могут быть установлены к случайному шуму между - LSB и +LSB.

Вывод системы является новыми, квантованными и коэффициентами фильтра шумовой формы. Путем повторения этой процедуры много раз с различными случайными начальными состояниями в блоках задержки, могут быть произведены различные фильтры.

Минимизируйте коэффициенты Wordlength

Для начала мы хотим определить минимум wordlength КИХ-фильтр фиксированной точки, который соответствует одноступенчатой или многоступенчатой спецификации проекта. Мы берем пример полуленточного фильтра с нормированной шириной перехода.08 и затуханием полосы задерживания 59 дБ. Проект окна Kaiser приводит к 91 коэффициенту с плавающей точкой с двойной точностью, чтобы соответствовать спецификациям.

TW = .08;   % Transition Width
Astop = 59; % Stopband Attenuation (dB)
f  = fdesign.halfband('TW,Ast',TW,Astop);
Hd = design(f,'kaiserwin');

Чтобы установить базовую линию, мы квантуем фильтр путем установки его свойства 'Arithmetic' на 'фиксированный' и путем итерации на wordlength коэффициентов до минимального значения, которое встречается, спецификации найден. Также мы можем использовать minimizecoeffwl (), чтобы ускорить процесс. Базовый фильтр фиксированной точки содержит 91 17-битный коэффициент.

Hqbase = minimizecoeffwl(Hd,...
    'MatchRefFilter',true,'NoiseShaping',false, ...
    'Astoptol',0);       % 91 17-bit coefficients, Astop = 59.1 dB

17-битный wordlength непривлекателен для многих аппаратных целей. В определенных ситуациях мы можем смочь пойти на компромисс только при помощи 16-битных коэффициентов. Заметьте однако, что исходной спецификации строго больше не соответствуют, поскольку максимальное затухание полосы задерживания фильтра составляет только 58,8 дБ вместо желаемых 59 дБ.

Hq1 = copy(Hqbase);
Hq1.CoeffWordLength = 16; % 91 16-bit coefficients, Astop = 58.8 dB
m1 = measure(Hq1) %#ok
m1 = 

Sample Rate      : N/A (normalized frequency)
Passband Edge    : 0.46                      
3-dB Point       : 0.49074                   
6-dB Point       : 0.5                       
Stopband Edge    : 0.54                      
Passband Ripple  : 0.017157 dB               
Stopband Atten.  : 58.8741 dB                
Transition Width : 0.08                      
 

Также мы можем установить допуск управлять ошибкой полосы задерживания, которая приемлема. Например, с допуском полосы задерживания.15 дБ мы можем сохранить 3 бита и получить фильтр с 91 14-битным коэффициентом.

Hq2 = minimizecoeffwl(Hd,...
    'MatchRefFilter',true,'NoiseShaping',false, ...
    'Astoptol',.15);      % 91 14-bit coefficients, Astop = 58.8 dB

Сохранение в коэффициентах wordlength происходит в цену проекта фиксированной точки больше встреча спецификаций. Допуски могут отличаться от одного приложения до другого, но эта стратегия, возможно, ограничила обращение во многих ситуациях. Мы можем использовать другую степень свободы путем ослабления ограничения 'MatchRefFilter'. Путем установки свойства 'MatchRefFilter' на ложь мы больше не пытаемся совпадать с порядком фильтра (для проектов минимального заказа) или ширина перехода фильтра (для фиксированных проектов порядка) HD. Разрешение модернизации промежуточного фильтра с плавающей точкой приводит к фильтру фиксированной точки, который соответствует спецификациям с 93 13-битными коэффициентами. По сравнению со ссылочными проектами фиксированной точки, мы сохраненные 4 бита, но закончился с 2 дополнительными (1 не нуль) коэффициенты.

Hq3 = minimizecoeffwl(Hd,...
    'MatchRefFilter',false,'NoiseShaping',false); % 93 13-bit coefficients

Лучшее решение все же состоит в том, чтобы использовать формирование шума, чтобы максимизировать затухание полосы задерживания квантованного фильтра. Процедура формирования шума является стохастической. Можно хотеть экспериментировать с опцией 'NTrials' и/или инициализировать RAND в порядке воспроизвести результаты ниже. Поскольку 'MatchRefFilter' является ложным по умолчанию, и 'NoiseShaping' верен, мы можем не использовать их. Оптимизированный фильтр фиксированной точки соответствует спецификациям с 91 13-битным коэффициентом. Это представляет сохранение 4 битов по ссылочному проекту фиксированной точки с тем же количеством коэффициентов.

Hq4 = minimizecoeffwl(Hd,'Ntrials',10);  % 91 13-bit coefficients
hfvt = fvtool(Hqbase,Hq4,'ShowReference','off','Color','white');
legend(hfvt,'17-bit Reference Filter','13-bit Noise-Shaped Filter');

Как компромисс шума, сформированного из полосы задерживания, пульсация полосы пропускания фильтра шумовой формы увеличивается немного, который обычно является не проблемой. Также обратите внимание, что нет никакого простого отношения пульсации полосы пропускания к частоте после того, как формирование шума применяется.

axis([0 0.5060 -0.0109 0.0109])

Ограничьте коэффициенты Wordlength

Мы видели ранее, как мы можем компромисс больше коэффициентов (или большая ширина перехода для проектов с фиксированным порядком фильтра) для меньшие коэффициенты wordlength путем устанавливания параметра 'MatchRefFilter' minimizecoeffwl () метод ко 'лжи'. Мы теперь показываем, как мы можем далее управлять этим компромиссом в случае проекта минимального заказа путем взятия примера многоступенчатого (3 этапа) 8:1 decimator:

fm = fdesign.decimator(8,'lowpass','Fp,Fst,Ap,Ast',0.1,0.12,1,70);
Hm  = design(fm,'multistage','nstages',3);

Примечание: следующие команды в вычислительном отношении интенсивны и могут занять несколько минут, чтобы запуститься.

Мы сначала совпадаем с порядком проекта с плавающей точкой и получаем фильтр фиксированной точки шумовой формы, который соответствует спецификациям с:

  • 7 15-битных коэффициентов для первой стадии,

  • 10 13-битных коэффициентов для второго этапа,

  • 65 17-битных коэффициентов для третьей стадии.

Hmref = minimizecoeffwl(Hm,'MatchRefFilter',true);

Позволяя фильтру заказать увеличение, мы можем уменьшать коэффициенты wordlengths до:

  • 9 9-битных коэффициентов для первой стадии,

  • 10 12-битных коэффициентов для второго этапа,

  • 65 15-битных коэффициентов для третьей стадии.

Hq5 = minimizecoeffwl(Hm,'MatchRefFilter',false);

Для лучшего управления финала wordlengths, мы можем использовать constraincoeffwl () метод. Для многоступенчатых проектов wordlength для каждого этапа может быть ограничен индивидуально. Например, мы ограничиваем каждый этап использовать 10, 12, и 14 битов соответственно. Ограниченный проект соответствует спецификациям с:

  • 8 10-битных коэффициентов для первой стадии,

  • 12 12-битных коэффициентов для второго этапа,

  • 68 14-битных коэффициентов для третьей стадии.

WL = [10 12 14];
Hqc = constraincoeffwl(Hm,WL);

Максимизируйте затухание полосы задерживания

При разработке для механизмов фильтрации полки (ASSPs), которые имеют много конфигурируемых коэффициентов определенного wordlength, желательно максимизировать затухание полосы задерживания фильтра с данным распоряжением и ограниченным wordlength. В следующем примере мы хотим получить 69 дБ затухания полосы задерживания с 70-й полуполосой порядка decimator при использовании 14 битов, чтобы представлять коэффициенты.

fh = fdesign.decimator(2,'halfband','N,Ast',70,69);
Hb1 = design(fh,'equiripple');
Warning: This design generates an MFILT object which will be removed in a
future release. To generate an equivalent System object, set the 'SystemObject'
parameter to true.
Syntax: Hs = design(D,...,'SystemObject',true) 

Если мы просто квантуем фильтр с 14-битными коэффициентами, мы получаем только 62,7 дБ затухания.

Hb1.Arithmetic= 'fixed';
Hb1.CoeffWordLength = 14;
mb1 = measure(Hb1) %#ok
mb1 = 

Sample Rate      : N/A (normalized frequency)
Passband Edge    : 0.44518                   
3-dB Point       : 0.48816                   
6-dB Point       : 0.5                       
Stopband Edge    : 0.55482                   
Passband Ripple  : 0.010552 dB               
Stopband Atten.  : 62.7048 dB                
Transition Width : 0.10963                   
 

Путем формирования шума из полосы задерживания мы можем улучшить затухание почти на 1,5 дБ к 64,18 дБ, но мы все еще не можем соответствовать спецификациям.

Hbq1 = maximizestopband(Hb1,14);
mq1 = measure(Hbq1) %#ok
mq1 = 

Sample Rate      : N/A (normalized frequency)
Passband Edge    : 0.44373                   
3-dB Point       : 0.48811                   
6-dB Point       : 0.5                       
Stopband Edge    : 0.55529                   
Passband Ripple  : 0.01064 dB                
Stopband Atten.  : 64.1876 dB                
Transition Width : 0.11156                   
 

Следующий шаг к по проекту фильтр с плавающей точкой с 80 дБ затухания. Мы платим цену увеличенного затухания в форме большей ширины перехода. Затухание 14-битного не фильтр шумовой формы, улучшенный от 62,7 дБ до 66,2 дБ, но, все еще не соответствие спецификации.

fh.Astop = 80;
Hb2 = design(fh,'equiripple');
Hb2.Arithmetic= 'fixed';
Hb2.CoeffWordLength = 14;
mb2 = measure(Hb2) %#ok
Warning: This design generates an MFILT object which will be removed in a
future release. To generate an equivalent System object, set the 'SystemObject'
parameter to true.
Syntax: Hs = design(D,...,'SystemObject',true) 

mb2 = 

Sample Rate      : N/A (normalized frequency)
Passband Edge    : 0.43464                   
3-dB Point       : 0.48704                   
6-dB Point       : 0.5                       
Stopband Edge    : 0.56536                   
Passband Ripple  : 0.0076847 dB              
Stopband Atten.  : 66.2266 dB                
Transition Width : 0.13073                   
 

Метод формирования шума дает нам фильтр, который наконец соответствует спецификациям путем улучшения затухания полосы задерживания больше чем на 3 дБ с 66,2 дБ до 69,4 дБ.

Hbq2 = maximizestopband(Hb2,14);
mq2 = measure(Hbq2)  %#ok
mq2 = 

Sample Rate      : N/A (normalized frequency)
Passband Edge    : 0.43584                   
3-dB Point       : 0.4871                    
6-dB Point       : 0.5                       
Stopband Edge    : 0.56287                   
Passband Ripple  : 0.0053253 dB              
Stopband Atten.  : 69.4039 dB                
Transition Width : 0.12703                   
 

Ширина перехода фильтра фиксированной точки увеличена по сравнению с проектом с плавающей точкой. Это - цена, чтобы заплатить, чтобы получить 69 дБ затухания только с 14-битными коэффициентами, когда это взяло бы 24-битные коэффициенты, чтобы совпадать и с шириной перехода и с затуханием полосы задерживания проекта с плавающей точкой.

close(hfvt);
hfvt = fvtool(reffilter(Hb1),Hbq2,'ShowReference','off','Color','white');
legend(hfvt,'Floating-Point Filter','14-bit Noise-Shaped Filter');

close(hfvt)

Сводные данные

Мы видели, как метод формирования шума может использоваться, чтобы минимизировать коэффициенты wordlength одноступенчатого или многоступенчатого КИХ-фильтра фиксированной точки или как он может использоваться, чтобы максимизировать затухание полосы задерживания вместо этого. Мы также видели, как биты могут быть проданы за большее количество коэффициентов в случае проектов минимального заказа или для большей ширины перехода в случае проектов с фиксированным порядком.

Ссылки

Йенс Йорген Нильсен, Проект КИХ Linear-Phase Direct-Form Цифровые Фильтры с Квантованными Коэффициентами Используя Ошибочные Методы Формирования Спектра, IEEE® Transactions на Акустике, Речи, и Обработке сигналов, Издании 37, № 7, июль 1989, стр 1020 - 1026.

Алан В. Оппенхейм и Рональд В. Шафер, Обработка сигналов Дискретного времени, 2-й выпуск, Prentice Hall, 1999, ISBN 0-13-754920-2.