Этот пример иллюстрирует, как сгенерировать 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 для каждого из 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/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/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/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/tonecontrol1_tb.v ### Creating stimulus vectors ... ### Done generating VERILOG Test Bench. ### Starting Verilog code generation process for filter: tonecontrol2 ### Generating: /tmp/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/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/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/tonecontrol2_tb.v ### Creating stimulus vectors ... ### Done generating VERILOG Test Bench. ### Starting Verilog code generation process for filter: tonecontrol3 ### Generating: /tmp/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/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/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/tonecontrol3_tb.v ### Creating stimulus vectors ... ### Done generating VERILOG Test Bench. ### Starting Verilog code generation process for filter: tonecontrol4 ### Generating: /tmp/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/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/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/tonecontrol4_tb.v ### Creating stimulus vectors ... ### Done generating VERILOG Test Bench. ### Starting Verilog code generation process for filter: tonecontrol5 ### Generating: /tmp/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/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/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/tonecontrol5_tb.v ### Creating stimulus vectors ... ### Done generating VERILOG Test Bench. ### Starting Verilog code generation process for filter: tonecontrol6 ### Generating: /tmp/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/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/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/tonecontrol6_tb.v ### Creating stimulus vectors ... ### Done generating VERILOG Test Bench. ### Starting Verilog code generation process for filter: tonecontrol7 ### Generating: /tmp/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/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/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/tonecontrol7_tb.v ### Creating stimulus vectors ... ### Done generating VERILOG Test Bench. ### Starting Verilog code generation process for filter: tonecontrol8 ### Generating: /tmp/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/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/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/tonecontrol8_tb.v ### Creating stimulus vectors ... ### Done generating VERILOG Test Bench. ### Starting Verilog code generation process for filter: tonecontrol9 ### Generating: /tmp/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/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/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/tonecontrol9_tb.v ### Creating stimulus vectors ... ### Done generating VERILOG Test Bench. ### Starting Verilog code generation process for filter: tonecontrol10 ### Generating: /tmp/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/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/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/tonecontrol10_tb.v ### Creating stimulus vectors ... ### Done generating VERILOG Test Bench. ### Starting Verilog code generation process for filter: tonecontrol11 ### Generating: /tmp/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/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/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/tonecontrol11_tb.v ### Creating stimulus vectors ... ### Done generating VERILOG Test Bench. ### Starting Verilog code generation process for filter: tonecontrol12 ### Generating: /tmp/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/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/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/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/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/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/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/tonecontrol13_tb.v ### Creating stimulus vectors ... ### Done generating VERILOG Test Bench. ### Starting Verilog code generation process for filter: tonecontrol14 ### Generating: /tmp/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/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/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/tonecontrol14_tb.v ### Creating stimulus vectors ... ### Done generating VERILOG Test Bench. ### Starting Verilog code generation process for filter: tonecontrol15 ### Generating: /tmp/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/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/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/tonecontrol15_tb.v ### Creating stimulus vectors ... ### Done generating VERILOG Test Bench. ### Starting Verilog code generation process for filter: tonecontrol16 ### Generating: /tmp/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/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/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/tonecontrol16_tb.v ### Creating stimulus vectors ... ### Done generating VERILOG Test Bench. ### Starting Verilog code generation process for filter: tonecontrol17 ### Generating: /tmp/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/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/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/tonecontrol17_tb.v ### Creating stimulus vectors ... ### Done generating VERILOG Test Bench. ### Starting Verilog code generation process for filter: tonecontrol18 ### Generating: /tmp/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/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/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/tonecontrol18_tb.v ### Creating stimulus vectors ... ### Done generating VERILOG Test Bench. ### Starting Verilog code generation process for filter: tonecontrol19 ### Generating: /tmp/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/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/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/tonecontrol19_tb.v ### Creating stimulus vectors ... ### Done generating VERILOG Test Bench. ### Starting Verilog code generation process for filter: tonecontrol20 ### Generating: /tmp/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/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/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/tonecontrol20_tb.v ### Creating stimulus vectors ... ### Done generating VERILOG Test Bench. ### Starting Verilog code generation process for filter: tonecontrol21 ### Generating: /tmp/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/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/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/tonecontrol21_tb.v ### Creating stimulus vectors ... ### Done generating VERILOG Test Bench. ### Starting Verilog code generation process for filter: tonecontrol22 ### Generating: /tmp/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/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/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/tonecontrol22_tb.v ### Creating stimulus vectors ... ### Done generating VERILOG Test Bench. ### Starting Verilog code generation process for filter: tonecontrol23 ### Generating: /tmp/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/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/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/tonecontrol23_tb.v ### Creating stimulus vectors ... ### Done generating VERILOG Test Bench. ### Starting Verilog code generation process for filter: tonecontrol24 ### Generating: /tmp/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/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/BR2019ad_1062519_57051/mlx_to_docbook1/tp55005192_be4a_4d01_a844_92f873043032/tonecontrol24_tb.v ### Creating stimulus vectors ... ### Done generating VERILOG Test Bench.
Следующее отображение показывает симулятор HDL ModelSim®, запускающий эти испытательные стенды.
Характеристика пропускания нижних частот к тону на 20 Гц:
Тройной ответ на тон на 10 кГц:
Вы разработали набор фильтров баса с двойной точностью и тройных фильтров первого порядка повышения/сокращения непосредственно использование билинейного преобразования. Вы затем использовали коэффициенты фильтра, чтобы создать банк квантованных фильтров с качеством CD 16-битные входные параметры и 18-битные выходные параметры. После проверки ответа квантованных фильтров вы сгенерировали код Verilog для каждого, просачиваются набор фильтров наряду с испытательным стендом Verilog, который использовал пользовательский входной стимул для баса и тройных фильтров.
Завершать решение обеспечения тона управляет к аудиосистеме, можно добавить перекрестный регулятор громкости в выходные параметры каждого раздела набора фильтров. Эти перекрестные регуляторы громкости должны взять несколько шагов расчета, чтобы переключиться гладко от одного повышения или сократить шаг к следующему.
Используя полный банк фильтров только один подход к решению этого типа проблемы. Другой подход должен был бы использовать два фильтра для каждой полосы (бас и тройной) с программируемыми коэффициентами, которые могут быть изменены при программном управлении. Один из двух фильтров был бы текущей установкой, в то время как другой будет следующая установка. Когда вы настроили тональные средства управления, программное обеспечение будет пинг-понг между фильтрами, обменивающимися текущим и следующим с простым регулятором громкости. Компромисс - то, что постоянный содействующий набор фильтров, показанный выше, является использованием никакие множители, в то время как по-видимому более простая схема пинг-понга требует нескольких множителей.