Тональный набор фильтров управления 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);

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

Создайте квантованный фильтр для каждого фильтра с двойной точностью, спроектированного выше. Примите вход качества 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');

Сгенерируйте 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/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/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/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/tonecontrol1_tb.v
### Creating stimulus vectors ...
### Done generating VERILOG Test Bench.
### Starting Verilog code generation process for filter: tonecontrol2
### Generating: /tmp/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/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/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/tonecontrol2_tb.v
### Creating stimulus vectors ...
### Done generating VERILOG Test Bench.
### Starting Verilog code generation process for filter: tonecontrol3
### Generating: /tmp/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/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/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/tonecontrol3_tb.v
### Creating stimulus vectors ...
### Done generating VERILOG Test Bench.
### Starting Verilog code generation process for filter: tonecontrol4
### Generating: /tmp/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/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/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/tonecontrol4_tb.v
### Creating stimulus vectors ...
### Done generating VERILOG Test Bench.
### Starting Verilog code generation process for filter: tonecontrol5
### Generating: /tmp/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/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/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/tonecontrol5_tb.v
### Creating stimulus vectors ...
### Done generating VERILOG Test Bench.
### Starting Verilog code generation process for filter: tonecontrol6
### Generating: /tmp/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/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/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/tonecontrol6_tb.v
### Creating stimulus vectors ...
### Done generating VERILOG Test Bench.
### Starting Verilog code generation process for filter: tonecontrol7
### Generating: /tmp/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/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/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/tonecontrol7_tb.v
### Creating stimulus vectors ...
### Done generating VERILOG Test Bench.
### Starting Verilog code generation process for filter: tonecontrol8
### Generating: /tmp/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/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/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/tonecontrol8_tb.v
### Creating stimulus vectors ...
### Done generating VERILOG Test Bench.
### Starting Verilog code generation process for filter: tonecontrol9
### Generating: /tmp/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/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/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/tonecontrol9_tb.v
### Creating stimulus vectors ...
### Done generating VERILOG Test Bench.
### Starting Verilog code generation process for filter: tonecontrol10
### Generating: /tmp/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/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/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/tonecontrol10_tb.v
### Creating stimulus vectors ...
### Done generating VERILOG Test Bench.
### Starting Verilog code generation process for filter: tonecontrol11
### Generating: /tmp/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/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/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/tonecontrol11_tb.v
### Creating stimulus vectors ...
### Done generating VERILOG Test Bench.
### Starting Verilog code generation process for filter: tonecontrol12
### Generating: /tmp/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/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/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/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/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/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/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/tonecontrol13_tb.v
### Creating stimulus vectors ...
### Done generating VERILOG Test Bench.
### Starting Verilog code generation process for filter: tonecontrol14
### Generating: /tmp/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/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/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/tonecontrol14_tb.v
### Creating stimulus vectors ...
### Done generating VERILOG Test Bench.
### Starting Verilog code generation process for filter: tonecontrol15
### Generating: /tmp/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/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/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/tonecontrol15_tb.v
### Creating stimulus vectors ...
### Done generating VERILOG Test Bench.
### Starting Verilog code generation process for filter: tonecontrol16
### Generating: /tmp/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/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/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/tonecontrol16_tb.v
### Creating stimulus vectors ...
### Done generating VERILOG Test Bench.
### Starting Verilog code generation process for filter: tonecontrol17
### Generating: /tmp/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/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/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/tonecontrol17_tb.v
### Creating stimulus vectors ...
### Done generating VERILOG Test Bench.
### Starting Verilog code generation process for filter: tonecontrol18
### Generating: /tmp/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/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/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/tonecontrol18_tb.v
### Creating stimulus vectors ...
### Done generating VERILOG Test Bench.
### Starting Verilog code generation process for filter: tonecontrol19
### Generating: /tmp/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/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/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/tonecontrol19_tb.v
### Creating stimulus vectors ...
### Done generating VERILOG Test Bench.
### Starting Verilog code generation process for filter: tonecontrol20
### Generating: /tmp/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/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/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/tonecontrol20_tb.v
### Creating stimulus vectors ...
### Done generating VERILOG Test Bench.
### Starting Verilog code generation process for filter: tonecontrol21
### Generating: /tmp/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/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/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/tonecontrol21_tb.v
### Creating stimulus vectors ...
### Done generating VERILOG Test Bench.
### Starting Verilog code generation process for filter: tonecontrol22
### Generating: /tmp/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/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/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/tonecontrol22_tb.v
### Creating stimulus vectors ...
### Done generating VERILOG Test Bench.
### Starting Verilog code generation process for filter: tonecontrol23
### Generating: /tmp/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/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/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/tonecontrol23_tb.v
### Creating stimulus vectors ...
### Done generating VERILOG Test Bench.
### Starting Verilog code generation process for filter: tonecontrol24
### Generating: /tmp/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/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/BR2020ad_1302590_239645/mlx_to_docbook1/tp052690fd_b07d_4412_8623_d51a7308dfb9/tonecontrol24_tb.v
### Creating stimulus vectors ...
### Done generating VERILOG Test Bench.

ModelSim® Simulation Results

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

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

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

Заключение

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

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

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