Тональный набор фильтров управления HDL

Этот пример иллюстрирует, как сгенерировать HDL-код для банка 24 отлогих фильтров первого порядка, которые реализуют аудио тональное управление с шагами на 1 дБ от-6 дБ до +6 дБ для баса и тройной.

Фильтры аналитически созданы с использованием простая формула для фильтра первого порядка с одним полюсом и одним нулем на вещественной оси.

Набор фильтров спроектирован начиная с изменения коэффициентов фильтра, на лету может привести к переходным процессам в аудио (щелкает и появляется), когда управление повышением/сокращением перемещено. С банком фильтров, запускающихся постоянно, соответствующий фильтр выбран из банка фильтров, когда выход около любого нуля, пересекающегося, чтобы избежать этих переходных процессов.

Настройте Параметры

Используйте частоту дискретизации CD 44,1 кГц с басом и тройными углами на уровне 100 Гц и 1600 Гц.

Fs  = 44100;                            % all in Hz
Fcb =   100;
Fct =  1600;

Задайте параметры отображения частоты касательной

Сопоставьте угловые частоты касательной, чтобы переместиться от аналога до цифровой области. Затем задайте область значений сокращения и повышения, которое будет применено, выбирая общую область значений на 12 дБ на шагах на 1 дБ. Преобразуйте децибелы в линейное усиление и разделите повышение и сократите векторы.

basstan   = tan(pi*Fcb/Fs);
trebletan = tan(pi*Fct/Fs);

dbrange  = [-6:-1, +1:+6];              % -6 dB to +6 dB 
linrange = 10.^(dbrange/20);
boost = linrange(linrange>1);
cut   = linrange(linrange<=1);
Nfilters = 2 * length(dbrange);         % 2X for bass and treble

Спроектируйте набор фильтров

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

a2_bass_boost    = (basstan - 1) / (basstan + 1);
b1_bass_boost   = 1 + ((1 + a2_bass_boost) .* (boost - 1)) / 2;
b2_bass_boost   = a2_bass_boost + ...
                  ((1 + a2_bass_boost) .* (boost - 1)) / 2;

a2_bass_cut      = (basstan - cut) / (basstan + cut);
b1_bass_cut     = 1 + ((1 + a2_bass_cut) .* (cut - 1)) / 2;
b2_bass_cut     = a2_bass_cut + ((1 + a2_bass_cut) .* (cut - 1)) / 2;

a2_treble_boost  = (trebletan - 1) / (trebletan + 1); 
b1_treble_boost   = 1 + ((1 - a2_treble_boost) .* (boost - 1)) / 2;
b2_treble_boost   = a2_treble_boost + ...
                    ((a2_treble_boost - 1) .* (boost - 1)) / 2;

a2_treble_cut      = (cut .* trebletan - 1) / (cut .* trebletan + 1);
b1_treble_cut     = 1 + ((1 - a2_treble_cut) .* (cut - 1)) / 2;
b2_treble_cut     = a2_treble_cut + ...
                    ((a2_treble_cut - 1) .* (cut - 1)) / 2;

Создайте набор фильтров

Создайте числитель и массивы знаменателя для целого набора фильтров. Затем создайте массив ячеек, просачивается {b, a, b, a...} формируются для fvtool. Предварительно выделите массив ячеек для скорости.

filterbank = cell(1, 2*Nfilters);     % 2X for numerator and denominator
% Duplicate a2's into vectors
a2_bass_boost   = repmat(a2_bass_boost,   1, length(boost));
a2_bass_cut     = repmat(a2_bass_cut,     1, length(cut));
a2_treble_boost = repmat(a2_treble_boost, 1, length(boost));
a2_treble_cut   = repmat(a2_treble_cut,   1, length(cut));

filterbank_num = [b1_bass_cut, b1_bass_boost, b1_treble_cut, b1_treble_boost ; ...
                  b2_bass_cut, b2_bass_boost, b2_treble_cut, b2_treble_boost ]';
% a1 is always one
filterbank_den = [ones(1, Nfilters); ...
                  a2_bass_cut, a2_bass_boost, a2_treble_cut, a2_treble_boost]';

filterbank(1:2:end) = num2cell(filterbank_num, 2);
filterbank(2:2:end) = num2cell(filterbank_den, 2);

Проверяйте ответ набора фильтров

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

fvtool(filterbank{:}, 'FrequencyScale', 'log', 'Fs', Fs);

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

Создайте квантованный набор фильтров

Создайте квантованный фильтр для каждого фильтра с двойной точностью, спроектированного выше. Примите вход качества CD 16 битов и выходной размер слова 18 битов, чтобы допускать +6 усилений дБ с некоторой высотой.

quantizedfilterbank = cell(1, Nfilters);
for n = 1:Nfilters
  quantizedfilterbank{n} = dsp.BiquadFilter('Structure','Direct Form I');
  quantizedfilterbank{n}.SOSMatrix = [filterbank_num(n,:),0,...
                                      filterbank_den(n,:),0];

  quantizedfilterbank{n}.NumeratorCoefficientsDataType         = 'Custom';
  quantizedfilterbank{n}.CustomNumeratorCoefficientsDataType   = numerictype([],16);
  quantizedfilterbank{n}.CustomDenominatorCoefficientsDataType = numerictype([],16);
  quantizedfilterbank{n}.CustomScaleValuesDataType             = numerictype([],16);
  
  quantizedfilterbank{n}.OutputDataType       = 'Custom';
  quantizedfilterbank{n}.CustomOutputDataType = numerictype([],18,15);
  
  quantizedfilterbank{n}.SectionOutputDataType       = 'Custom';
  quantizedfilterbank{n}.CustomSectionOutputDataType = numerictype([],18,15);
  quantizedfilterbank{n}.NumeratorProductDataType    = 'Full precision';
  quantizedfilterbank{n}.DenominatorProductDataType  = 'Full precision';
  
  quantizedfilterbank{n}.NumeratorAccumulatorDataType         = 'Custom';
  quantizedfilterbank{n}.CustomNumeratorAccumulatorDataType   = numerictype([],34,30);
  quantizedfilterbank{n}.DenominatorAccumulatorDataType       = 'Custom';
  quantizedfilterbank{n}.CustomDenominatorAccumulatorDataType = numerictype([],34,29);
  
  quantizedfilterbank{n}.RoundingMethod  = 'Floor';
  quantizedfilterbank{n}.OverflowAction  = 'Wrap';
end

Проверяйте ответ квантованного набора фильтров

Проверяйте квантованный набор фильтров с помощью fvtool снова в логарифмическом режиме частоты с набором частоты дискретизации.

fvtool(quantizedfilterbank{:}, 'FrequencyScale', 'log', 'Fs', Fs,'Arithmetic','fixed');

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) contains 48 objects of type line. These objects represent Filter #1: Quantized, Filter #1: Reference, Filter #2: Quantized, Filter #2: Reference, Filter #3: Quantized, Filter #3: Reference, Filter #4: Quantized, Filter #4: Reference, Filter #5: Quantized, Filter #5: Reference, Filter #6: Quantized, Filter #6: Reference, Filter #7: Quantized, Filter #7: Reference, Filter #8: Quantized, Filter #8: Reference, Filter #9: Quantized, Filter #9: Reference, Filter #10: Quantized, Filter #10: Reference, Filter #11: Quantized, Filter #11: Reference, Filter #12: Quantized, Filter #12: Reference, Filter #13: Quantized, Filter #13: Reference, Filter #14: Quantized, Filter #14: Reference, Filter #15: Quantized, Filter #15: Reference, Filter #16: Quantized, Filter #16: Reference, Filter #17: Quantized, Filter #17: Reference, Filter #18: Quantized, Filter #18: Reference, Filter #19: Quantized, Filter #19: Reference, Filter #20: Quantized, Filter #20: Reference, Filter #21: Quantized, Filter #21: Reference, Filter #22: Quantized, Filter #22: Reference, Filter #23: Quantized, Filter #23: Reference, Filter #24: Quantized, Filter #24: Reference.

Сгенерируйте HDL для набора фильтров и испытательных стендов

Сгенерируйте HDL для каждого из 24 фильтров первого порядка и испытательных стендов, чтобы проверять каждый проект. Выходным языком здесь является Verilog.

Используйте методы канонического разряда знака (CSD), чтобы избегать использования множителей в проекте. Задайте это с 'CoeffMultipliers', парой значения свойства 'CSD'. Поскольку результаты использования этой оптимизации не всегда численно идентичны регулярному умножению, которое приводит к переполнению, установите свойство 'ErrorMargin' испытательного стенда на 1 бит допустимой ошибки.

Создайте пользовательский стимул, чтобы проиллюстрировать усиление фильтров путем генерации половины цикла тона на 20 Гц и 250 циклов тона на 10 кГц. Используйте низкочастотный тон для басовых фильтров повышения/сокращения и высокочастотный тон для тройных фильтров повышения/сокращения.

Создайте временный рабочий каталог.

Чтобы сгенерировать код VHDL вместо этого, измените свойство 'TargetLanguage' от 'Verilog' до 'VHDL'.

bassuserstim = sin(2*pi*20/Fs*(0:Fs/40));
trebuserstim = sin(2*pi*10000/Fs*(0:Fs/40));
workingdir   = tempname;

for n = 1:Nfilters/2
  generatehdl(quantizedfilterbank{n},...
              'Name', ['tonecontrol', num2str(n)],...
              'TargetDirectory', workingdir,...
              'InputDataType', numerictype(1,16,15),...
              'TargetLanguage', 'Verilog',...
              'CoeffMultipliers','CSD', ...
              'GenerateHDLTestbench','on', ...
              'TestBenchUserStimulus', bassuserstim, ...
              'ErrorMargin', 1);           
end
### Starting Verilog code generation process for filter: tonecontrol1
### Generating: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol1.v
### Starting generation of tonecontrol1 Verilog module
### Starting generation of tonecontrol1 Verilog module body
### First-order section, # 1
### Successful completion of Verilog code generation process for filter: tonecontrol1
### HDL latency is 2 samples
### Starting generation of VERILOG Test Bench.
### Generating input stimulus
### Done generating input stimulus; length 1103 samples.
### Generating Test bench: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol1_tb.v
### Creating stimulus vectors ...
### Done generating VERILOG Test Bench.
### Starting Verilog code generation process for filter: tonecontrol2
### Generating: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol2.v
### Starting generation of tonecontrol2 Verilog module
### Starting generation of tonecontrol2 Verilog module body
### First-order section, # 1
### Successful completion of Verilog code generation process for filter: tonecontrol2
### HDL latency is 2 samples
### Starting generation of VERILOG Test Bench.
### Generating input stimulus
### Done generating input stimulus; length 1103 samples.
### Generating Test bench: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol2_tb.v
### Creating stimulus vectors ...
### Done generating VERILOG Test Bench.
### Starting Verilog code generation process for filter: tonecontrol3
### Generating: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol3.v
### Starting generation of tonecontrol3 Verilog module
### Starting generation of tonecontrol3 Verilog module body
### First-order section, # 1
### Successful completion of Verilog code generation process for filter: tonecontrol3
### HDL latency is 2 samples
### Starting generation of VERILOG Test Bench.
### Generating input stimulus
### Done generating input stimulus; length 1103 samples.
### Generating Test bench: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol3_tb.v
### Creating stimulus vectors ...
### Done generating VERILOG Test Bench.
### Starting Verilog code generation process for filter: tonecontrol4
### Generating: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol4.v
### Starting generation of tonecontrol4 Verilog module
### Starting generation of tonecontrol4 Verilog module body
### First-order section, # 1
### Successful completion of Verilog code generation process for filter: tonecontrol4
### HDL latency is 2 samples
### Starting generation of VERILOG Test Bench.
### Generating input stimulus
### Done generating input stimulus; length 1103 samples.
### Generating Test bench: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol4_tb.v
### Creating stimulus vectors ...
### Done generating VERILOG Test Bench.
### Starting Verilog code generation process for filter: tonecontrol5
### Generating: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol5.v
### Starting generation of tonecontrol5 Verilog module
### Starting generation of tonecontrol5 Verilog module body
### First-order section, # 1
### Successful completion of Verilog code generation process for filter: tonecontrol5
### HDL latency is 2 samples
### Starting generation of VERILOG Test Bench.
### Generating input stimulus
### Done generating input stimulus; length 1103 samples.
### Generating Test bench: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol5_tb.v
### Creating stimulus vectors ...
### Done generating VERILOG Test Bench.
### Starting Verilog code generation process for filter: tonecontrol6
### Generating: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol6.v
### Starting generation of tonecontrol6 Verilog module
### Starting generation of tonecontrol6 Verilog module body
### First-order section, # 1
### Successful completion of Verilog code generation process for filter: tonecontrol6
### HDL latency is 2 samples
### Starting generation of VERILOG Test Bench.
### Generating input stimulus
### Done generating input stimulus; length 1103 samples.
### Generating Test bench: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol6_tb.v
### Creating stimulus vectors ...
### Done generating VERILOG Test Bench.
### Starting Verilog code generation process for filter: tonecontrol7
### Generating: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol7.v
### Starting generation of tonecontrol7 Verilog module
### Starting generation of tonecontrol7 Verilog module body
### First-order section, # 1
### Successful completion of Verilog code generation process for filter: tonecontrol7
### HDL latency is 2 samples
### Starting generation of VERILOG Test Bench.
### Generating input stimulus
### Done generating input stimulus; length 1103 samples.
### Generating Test bench: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol7_tb.v
### Creating stimulus vectors ...
### Done generating VERILOG Test Bench.
### Starting Verilog code generation process for filter: tonecontrol8
### Generating: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol8.v
### Starting generation of tonecontrol8 Verilog module
### Starting generation of tonecontrol8 Verilog module body
### First-order section, # 1
### Successful completion of Verilog code generation process for filter: tonecontrol8
### HDL latency is 2 samples
### Starting generation of VERILOG Test Bench.
### Generating input stimulus
### Done generating input stimulus; length 1103 samples.
### Generating Test bench: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol8_tb.v
### Creating stimulus vectors ...
### Done generating VERILOG Test Bench.
### Starting Verilog code generation process for filter: tonecontrol9
### Generating: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol9.v
### Starting generation of tonecontrol9 Verilog module
### Starting generation of tonecontrol9 Verilog module body
### First-order section, # 1
### Successful completion of Verilog code generation process for filter: tonecontrol9
### HDL latency is 2 samples
### Starting generation of VERILOG Test Bench.
### Generating input stimulus
### Done generating input stimulus; length 1103 samples.
### Generating Test bench: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol9_tb.v
### Creating stimulus vectors ...
### Done generating VERILOG Test Bench.
### Starting Verilog code generation process for filter: tonecontrol10
### Generating: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol10.v
### Starting generation of tonecontrol10 Verilog module
### Starting generation of tonecontrol10 Verilog module body
### First-order section, # 1
### Successful completion of Verilog code generation process for filter: tonecontrol10
### HDL latency is 2 samples
### Starting generation of VERILOG Test Bench.
### Generating input stimulus
### Done generating input stimulus; length 1103 samples.
### Generating Test bench: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol10_tb.v
### Creating stimulus vectors ...
### Done generating VERILOG Test Bench.
### Starting Verilog code generation process for filter: tonecontrol11
### Generating: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol11.v
### Starting generation of tonecontrol11 Verilog module
### Starting generation of tonecontrol11 Verilog module body
### First-order section, # 1
### Successful completion of Verilog code generation process for filter: tonecontrol11
### HDL latency is 2 samples
### Starting generation of VERILOG Test Bench.
### Generating input stimulus
### Done generating input stimulus; length 1103 samples.
### Generating Test bench: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol11_tb.v
### Creating stimulus vectors ...
### Done generating VERILOG Test Bench.
### Starting Verilog code generation process for filter: tonecontrol12
### Generating: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol12.v
### Starting generation of tonecontrol12 Verilog module
### Starting generation of tonecontrol12 Verilog module body
### First-order section, # 1
### Successful completion of Verilog code generation process for filter: tonecontrol12
### HDL latency is 2 samples
### Starting generation of VERILOG Test Bench.
### Generating input stimulus
### Done generating input stimulus; length 1103 samples.
### Generating Test bench: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol12_tb.v
### Creating stimulus vectors ...
### Done generating VERILOG Test Bench.
for n = Nfilters/2+1:Nfilters
  generatehdl(quantizedfilterbank{n},...
              'Name', ['tonecontrol', num2str(n)],...
              'TargetDirectory', workingdir,...
              'InputDataType', numerictype(1,16,15),...
              'TargetLanguage', 'Verilog',...
              'CoeffMultipliers','CSD', ...
              'GenerateHDLTestbench','on', ...
              'TestBenchUserStimulus', bassuserstim, ...
              'ErrorMargin', 1);
end
### Starting Verilog code generation process for filter: tonecontrol13
### Generating: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol13.v
### Starting generation of tonecontrol13 Verilog module
### Starting generation of tonecontrol13 Verilog module body
### First-order section, # 1
### Successful completion of Verilog code generation process for filter: tonecontrol13
### HDL latency is 2 samples
### Starting generation of VERILOG Test Bench.
### Generating input stimulus
### Done generating input stimulus; length 1103 samples.
### Generating Test bench: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol13_tb.v
### Creating stimulus vectors ...
### Done generating VERILOG Test Bench.
### Starting Verilog code generation process for filter: tonecontrol14
### Generating: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol14.v
### Starting generation of tonecontrol14 Verilog module
### Starting generation of tonecontrol14 Verilog module body
### First-order section, # 1
### Successful completion of Verilog code generation process for filter: tonecontrol14
### HDL latency is 2 samples
### Starting generation of VERILOG Test Bench.
### Generating input stimulus
### Done generating input stimulus; length 1103 samples.
### Generating Test bench: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol14_tb.v
### Creating stimulus vectors ...
### Done generating VERILOG Test Bench.
### Starting Verilog code generation process for filter: tonecontrol15
### Generating: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol15.v
### Starting generation of tonecontrol15 Verilog module
### Starting generation of tonecontrol15 Verilog module body
### First-order section, # 1
### Successful completion of Verilog code generation process for filter: tonecontrol15
### HDL latency is 2 samples
### Starting generation of VERILOG Test Bench.
### Generating input stimulus
### Done generating input stimulus; length 1103 samples.
### Generating Test bench: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol15_tb.v
### Creating stimulus vectors ...
### Done generating VERILOG Test Bench.
### Starting Verilog code generation process for filter: tonecontrol16
### Generating: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol16.v
### Starting generation of tonecontrol16 Verilog module
### Starting generation of tonecontrol16 Verilog module body
### First-order section, # 1
### Successful completion of Verilog code generation process for filter: tonecontrol16
### HDL latency is 2 samples
### Starting generation of VERILOG Test Bench.
### Generating input stimulus
### Done generating input stimulus; length 1103 samples.
### Generating Test bench: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol16_tb.v
### Creating stimulus vectors ...
### Done generating VERILOG Test Bench.
### Starting Verilog code generation process for filter: tonecontrol17
### Generating: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol17.v
### Starting generation of tonecontrol17 Verilog module
### Starting generation of tonecontrol17 Verilog module body
### First-order section, # 1
### Successful completion of Verilog code generation process for filter: tonecontrol17
### HDL latency is 2 samples
### Starting generation of VERILOG Test Bench.
### Generating input stimulus
### Done generating input stimulus; length 1103 samples.
### Generating Test bench: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol17_tb.v
### Creating stimulus vectors ...
### Done generating VERILOG Test Bench.
### Starting Verilog code generation process for filter: tonecontrol18
### Generating: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol18.v
### Starting generation of tonecontrol18 Verilog module
### Starting generation of tonecontrol18 Verilog module body
### First-order section, # 1
### Successful completion of Verilog code generation process for filter: tonecontrol18
### HDL latency is 2 samples
### Starting generation of VERILOG Test Bench.
### Generating input stimulus
### Done generating input stimulus; length 1103 samples.
### Generating Test bench: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol18_tb.v
### Creating stimulus vectors ...
### Done generating VERILOG Test Bench.
### Starting Verilog code generation process for filter: tonecontrol19
### Generating: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol19.v
### Starting generation of tonecontrol19 Verilog module
### Starting generation of tonecontrol19 Verilog module body
### First-order section, # 1
### Successful completion of Verilog code generation process for filter: tonecontrol19
### HDL latency is 2 samples
### Starting generation of VERILOG Test Bench.
### Generating input stimulus
### Done generating input stimulus; length 1103 samples.
### Generating Test bench: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol19_tb.v
### Creating stimulus vectors ...
### Done generating VERILOG Test Bench.
### Starting Verilog code generation process for filter: tonecontrol20
### Generating: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol20.v
### Starting generation of tonecontrol20 Verilog module
### Starting generation of tonecontrol20 Verilog module body
### First-order section, # 1
### Successful completion of Verilog code generation process for filter: tonecontrol20
### HDL latency is 2 samples
### Starting generation of VERILOG Test Bench.
### Generating input stimulus
### Done generating input stimulus; length 1103 samples.
### Generating Test bench: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol20_tb.v
### Creating stimulus vectors ...
### Done generating VERILOG Test Bench.
### Starting Verilog code generation process for filter: tonecontrol21
### Generating: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol21.v
### Starting generation of tonecontrol21 Verilog module
### Starting generation of tonecontrol21 Verilog module body
### First-order section, # 1
### Successful completion of Verilog code generation process for filter: tonecontrol21
### HDL latency is 2 samples
### Starting generation of VERILOG Test Bench.
### Generating input stimulus
### Done generating input stimulus; length 1103 samples.
### Generating Test bench: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol21_tb.v
### Creating stimulus vectors ...
### Done generating VERILOG Test Bench.
### Starting Verilog code generation process for filter: tonecontrol22
### Generating: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol22.v
### Starting generation of tonecontrol22 Verilog module
### Starting generation of tonecontrol22 Verilog module body
### First-order section, # 1
### Successful completion of Verilog code generation process for filter: tonecontrol22
### HDL latency is 2 samples
### Starting generation of VERILOG Test Bench.
### Generating input stimulus
### Done generating input stimulus; length 1103 samples.
### Generating Test bench: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol22_tb.v
### Creating stimulus vectors ...
### Done generating VERILOG Test Bench.
### Starting Verilog code generation process for filter: tonecontrol23
### Generating: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol23.v
### Starting generation of tonecontrol23 Verilog module
### Starting generation of tonecontrol23 Verilog module body
### First-order section, # 1
### Successful completion of Verilog code generation process for filter: tonecontrol23
### HDL latency is 2 samples
### Starting generation of VERILOG Test Bench.
### Generating input stimulus
### Done generating input stimulus; length 1103 samples.
### Generating Test bench: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol23_tb.v
### Creating stimulus vectors ...
### Done generating VERILOG Test Bench.
### Starting Verilog code generation process for filter: tonecontrol24
### Generating: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol24.v
### Starting generation of tonecontrol24 Verilog module
### Starting generation of tonecontrol24 Verilog module body
### First-order section, # 1
### Successful completion of Verilog code generation process for filter: tonecontrol24
### HDL latency is 2 samples
### Starting generation of VERILOG Test Bench.
### Generating input stimulus
### Done generating input stimulus; length 1103 samples.
### Generating Test bench: /tmp/BR2021ad_1655202_180016/mlx_to_docbook2/tpe4874c4f_f00a_4347_bdcc_6629ef456c35/tonecontrol24_tb.v
### Creating stimulus vectors ...
### Done generating VERILOG Test Bench.

ModelSim® Simulation Results

Следующее отображение показывает симулятор HDL ModelSim®, запускающий эти испытательные стенды.

Характеристика пропускания нижних частот к тону на 20 Гц:

Тройной ответ на тон на 10 кГц:

Заключение

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

Завершать решение обеспечения тона управляет к аудиосистеме, можно добавить перекрестный регулятор громкости в выходные параметры каждого раздела набора фильтров. Эти перекрестные регуляторы громкости должны взять несколько шагов расчета, чтобы переключиться гладко от одного повышения или сократить шаг к следующему.

Используя полный банк фильтров только один подход к решению этого типа проблемы. Другой подход должен был бы использовать два фильтра для каждой полосы (бас и тройной) с программируемыми коэффициентами, которые могут быть изменены при программном управлении. Один из двух фильтров был бы текущей установкой, в то время как другой будет следующая установка. Когда вы настроили тональные средства управления, программное обеспечение будет пинг-понг между фильтрами, обменивающимися текущим и следующим с простым регулятором громкости. Компромисс - то, что постоянный содействующий набор фильтров, показанный выше, является использованием никакие множители, в то время как по-видимому более простая схема пинг-понга требует нескольких множителей.