Реализуйте децимирующий фильтр CIC для HDL

В этом примере показано, как использовать блок CIC Decimation HDL Optimized, чтобы отфильтровать и проредить данные. Пример выполняет эти шаги:

  1. Сгенерируйте системы координат случайных входных выборок.

  2. Сгенерируйте ссылочные выходные данные от dsp.CICDecimation Система object™.

  3. Запустите модель Simulink, которая содержит блок CIC Decimation HDL Optimized.

  4. Сравните выходные данные блока Simulink со справочными данными.

Можно сгенерировать HDL-код от подсистемы в модели Simulink®.

Настройте параметры входных данных. Модель использует эти переменные рабочей области, чтобы сконфигурировать блок CIC Decimation HDL Optimized.

R = 8; % Decimation factor
M = 1; % Differential delay
N = 3; % Number of sections

Сгенерируйте системы координат случайных входных выборок. Чтобы сгенерировать ссылочные выходные данные для сравнения, примените выборки к dsp.CICDecimation Системный объект.

framesize = R*randi([5 20],1,1);
dataSamples  = fi(randn(framesize,1),1,16,8);
obj = dsp.CICDecimator('DecimationFactor',R,'DifferentialDelay',M,'NumSections',N);
cicFcnOutput = step(obj,dataSamples ).';
release(obj);

Сгенерируйте поток выборок путем преобразования систем координат в выборки и обеспечьте те выборки (sampleIn) как введено к модели Simulink наряду с соответствующим допустимым сигналом (validIn).

idlecyclesbetweensamples = 0;
idlecyclesbetweenframes = 0;

data = []; valid=[];
for ii = 1:length(dataSamples)
    data = [data dataSamples(ii) ...
        zeros(1,idlecyclesbetweensamples)];
    valid = [valid true(1,1) ...
        false(1,idlecyclesbetweensamples)];
 end

sampleIn = cast([data,zeros(1,idlecyclesbetweenframes)],'like',dataSamples);
validIn = logical([valid,zeros(1,idlecyclesbetweenframes)]);

sampletime = 1;
simTime = length(validIn);

Запустите модель Simulink.

modelname = 'HDLCICDecimationModel';
open_system(modelname);
sim(modelname);

Получите выходные данные из модели Simulink и сравните ее с выходом от dsp.CICDecimation Системный объект.

sampleOut = squeeze(sampleOut_ts.Data).';
validOut  = squeeze(validOut_ts.Data);
cicOutput = sampleOut(validOut);

fprintf('\nHDL CIC Decimation\n');
difference = (abs(cicOutput-cicFcnOutput(1:length(cicOutput)))>0);
fprintf('\nTotal number of samples differed between Simulink block output and MATLAB function output is: %d \n',sum(difference));
HDL CIC Decimation

Total number of samples differed between Simulink block output and MATLAB function output is: 0 

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

Блоки

Для просмотра документации необходимо авторизоваться на сайте