Verify FIR Filter on ARM Cortex-M Processor in MATLAB
This example shows how to use the code replacement library (CRL) for ARM® Cortex®-M processor with DSP System object™. The example uses a dsp.FIRFilter
System object to filter two sine waves of different frequencies.
Prerequisites
MATLAB® Coder™
Task 1: Setup and Simulate
1. Open the ex_fircmsis_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', 75,... 'OutputDataType', 'single');
sin2 = dsp.SineWave('Amplitude',4,'Frequency',3000,... 'SampleRate',8000, 'SamplesPerFrame', 75,... 'OutputDataType', 'single');
3. Create a spectrum analyzer to view the spectrum of the input and filtered output.
scope = 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_fircmsis_tut_ml(u1); scope([u1,y1]); end
Once you are satisfied with simulation results with test inputs, you can proceed to generate code for ex_fircmsis_tut_ml example function to run with your ARM Cortex-M based hardware.
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-M'; 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. Generate C code for the MATLAB function ex_fircmsis_tut_ml.m.
codegen ex_fircmsis_tut_ml -args single(u1) -config cfgEx -report
For more information, see codegen
You can specify an output directory with option -d as described in codegen documentation to generate code in separate folder for each individual MATLAB function.
2. When code generation finishes successfully, click View report to display the code generation report.
3. Click on the ex_fircmsis_tut_ml.c
file. Observe the CMSIS functions arm_fir_init_f32
and arm_fir_f32
in the ex_fircmsis_tut_ml
C function.
Task 4: Verify the Generated C Code on Target
You can be compile and execute the generated C code on an ARM Cortex-M target using a user selected tool chain, such as the ARM KEIL uVision IDE.
Task 5: Fixed-Point FIR Filter
Following similar steps of Task 3, you can generate fixed-point C code for the MATLAB function ex_fircmsis_tut_ml_q15.m.
codegen ex_fircmsis_tut_ml_q15 -args fi(u1, true, 16, 15) -config cfgEx -report
Task 6: Use Processor in the Loop (PIL)
Follow the steps in example Processor-in-the-Loop Verification of MATLAB Functions