MATLAB Examples

Verify FIR Filter on ARM Cortex-A Processor in MATLAB

This example shows how to use the Code Replacement Library (CRL) for ARM Cortex-A processor with DSP System object™. The example uses a dsp.FIRFilter System object to filter two sine waves of different frequencies.

Contents

Task 1: Setup and Simulate

1. Open the ex_fir_ne10_tut_ml example function, which implements a lowpass FIR filter object.

2. Create two sine wave signals with 1KHz and 3KHz frequency, respectively.

   sin1 = dsp.SineWave('Amplitude',1,'Frequency',1000,...
                        'SampleRate',8000, 'SamplesPerFrame', 76,...
                        'OutputDataType', 'single');

   sin2 = dsp.SineWave('Amplitude',4,'Frequency',3000,...
                        'SampleRate',8000, 'SamplesPerFrame', 76,...
                        'OutputDataType', 'single');

3. Create a spectrum analyzer to view the spectrum of the input and filtered output.

   scope = dsp.SpectrumAnalyzer('SampleRate',8e3,'ShowLegend',true,...
                             'PlotAsTwoSidedSpectrum', false, ...
                             'RBWSource', 'Property',...
                             'RBW',8000/260, 'Window','Kaiser', ...
                             'OverlapPercent', 80,...
                             'YLimits', [-76 56], 'SpectralAverages',10);

4. Simulate the example

   NN = 2000;
   for k = 1:NN
      x1k = sin1(); % generate 1K Hz sine wave
      x3k = sin2(); % generate 3K Hz sine wave
      n1 = randn(size(x1k), 'single')*sqrt(.05); % generate noise signal
      u1 = x1k+x3k+n1;
      y1 = ex_fir_ne10_tut_ml(u1);
      scope([u1,y1]);
   end

Task 2: Configure for Code Replacement

1. Create a code generation configuration object for use with codegen when generating a C/C++ static library.

   cfgEx = coder.config('lib');
   cfgEx.CodeReplacementLibrary = 'ARM Cortex-A';
   cfgEx.HardwareImplementation.ProdHWDeviceType = 'ARM Compatible->ARM Cortex';
   cfgEx.GenCodeOnly = true;

2. Open the Custom Code panel of the configuration dialog and verify the settings.

cfgEx.dialog

Task 3: Generate code

1. Change your current folder in MATLAB to a temporary writable folder. Copy the MATLAB file to the temporary folder.

   tempdirObj = armcortexadstexample.dstTempdir('ex_fir_ne10_tut_ml_workflow');
   dstarmsrc = which('ex_fir_ne10_tut_ml');
   dstarmtmpdir = tempdirObj.tempDir;
   type(fullfile(dstarmsrc))
   copyfile(dstarmsrc, dstarmtmpdir, 'f');
function y1 = ex_fir_ne10_tut_ml(u1)
% Copyright 2014-2016 The MathWorks, Inc.
    
%#codegen
    
    persistent fir;
    if isempty(fir)
        fir = dsp.FIRFilter('Numerator', fir1(63, 0.33));
    end
    y1 = fir(u1);
end

2. Generate C code for the MATLAB function ex_fir_ne10_tut_ml.m.

codegen ex_fir_ne10_tut_ml -args single(u1) -config cfgEx -report

3. When code generation finishes successfully, click View report to display the code generation report.

4. Click on the ex_fir_ne10_tut_ml.c file. Notice the NE10 functions, ne10_fir_init_float and ne10_fir_float_neon in the ex_fir_ne10_tut_ml function.

Task 4: Verify the generated C code on target

The generated code can be compiled and executed on ARM Cortex-A target by using a user- selected tool chain.

Run the following code to delete the temporary directory.

   status = tempdirObj.cleanUp;