exponenta event banner

Децимация FIR для FPGA

В этом примере показано, как прореживать потоковые выборки с помощью аппаратного многофазного фильтра FIR. Он также показывает различия между dsp.FIRDecimator объект и удобный для аппаратного обеспечения потоковый интерфейс блока FIR Decimation HDL Optimized.

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

T = 512;
waveGen = dsp.SineWave(0.9,100,0,'SamplesPerFrame',T);
dataIn = fi(waveGen()+0.05,1,16,14);

inputVecSize=4;
decimFactor=8;

Пример модели импортирует входной сигнал из рабочего пространства MATLAB и применяет его как векторы к блоку FIR Decimation HDL Optimized. Модель возвращает выходные данные блока в рабочую область MATLAB для сравнения.

Блок FIR Decimation HDL Optimized применяет выборки к фильтру в фазе, отличной от фазы dsp.FIRDecimator object. Для соответствия числовому поведению примените decimFactor - 1 нуль в блоке FIR Decimation HDL Optimized перед началом выборок данных.

dataInHDL = [zeros(decimFactor-1,1);dataIn];

modelName = 'FIRDecimHDL';
open_system(modelName);
set_param(modelName,'SimulationCommand','Update');

Блок, оптимизированный для децимации HDL, принимает вектор inputVecSize-by-1 отсчитывает и возвращает скалярные выходные данные. Блок выполняет односкоростную обработку и указывает допустимые выборки в выходном сигнале путем установки выходного действительного сигнала в 1. Время выборки Simulink равно inputVecSize для всей модели. Блок устанавливает выходной действительный сигнал на 1 каждый decimFactor/inputVecSize образцы.

out = sim('FIRDecimHDL');

Создать dsp.FIRDecimator Система object™ и генерирует ссылочные данные для сравнения с выводом модели HDL. В этом примере используются коэффициенты фильтра по умолчанию, которые одинаковы для блока и объекта. Объект может принимать любой размер входного вектора, кратный коэффициенту прореживания, поэтому можно вычислить выходные данные одним вызовом объекта. При изменении коэффициента прореживания на значение, которое не является коэффициентом T, также необходимо скорректировать значение T (размер dataIn).

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

decimRef = dsp.FIRDecimator(decimFactor);
refDataOut = decimRef(dataIn);

Для вывода блока FIR Decimation HDL Optimized выберите выборки данных, где выходной действительный сигнал был 1и сравните их с образцами, возвращенными из dsp.FIRDecimator объект.

hdlVec = out.dataOut(out.validOut);
refVec = refDataOut(1:size(hdlVec,1));
errVec = hdlVec - refVec;
maxErr = max(abs(errVec));
fprintf('\nFIR decimator versus reference: Maximum error out of %d values is %d\n',length(hdlVec),maxErr);
FIR decimator versus reference: Maximum error out of 54 values is 0

См. также

Блоки