Accelerating the pace of engineering and science

# MATLAB Coder

## 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.

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

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

```   hsin1 = dsp.SineWave('Amplitude',1,'Frequency',1000,...
'SampleRate',8000, 'SamplesPerFrame', 75,...
'OutputDataType', 'single');

hsin2 = 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.

```   hs = 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 = step(hsin1); % generate 1K Hz sine wave
x3k = step(hsin2); % 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);
step(hs,[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-M';
cfgEx.HardwareImplementation.ProdHWDeviceType = 'ARM Compatible->ARM Cortex';
cfgEx.GenCodeOnly = true;
```

2. Open the Hardware panel of the configuration dialog and verify teh settings.

```cfgEx.dialog
```

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

```   tempdirObj = dstarmexample.dstTempdir('ex_fircmsis_tut_ml_workflow');
```

2. Generate C code for the MATLAB function ex_fircmsis_tut_ml.mex_fircmsis_tut_ml.m.

```codegen ex_fircmsis_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_fircmsis_tut_ml.c file. Notice the CMSIS functions, arm_fir_init_f32 and arm_fir_f32 in the ex_fircmsis_tut_ml function.

Task 4: Verify the generated C code on target

The generated code can be compiled and executed on ARM Cortex-M target by using a user- selected tool chain, for example, ARM® KEIL™ uVision® IDEARM® KEIL™ uVision® IDE.

```codegen ex_fircmsis_tut_ml_q15 -args fi(u1, true, 16, 15) -config cfgEx -report
```   status = tempdirObj.cleanUp;