В этом примере показано, как использовать блок CIC Decimation HDL Optimized, чтобы отфильтровать и проредить данные. Пример выполняет эти шаги:
Сгенерируйте системы координат случайных входных выборок.
Сгенерируйте ссылочные выходные данные от dsp.CICDecimation
Система object™.
Запустите модель Simulink, которая содержит блок CIC Decimation HDL Optimized.
Сравните выходные данные блока 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