How to write C code generation for ' not available function for standalone generation' ?

13 views (last 30 days)
Hi, i can not transfert my matlab algorithme. When I use Matlab Coder to convert it into C code, it build failed with the following error:
The function 'designfilt' is not supported for standalone code generation. See the documentation for coder.extrinsic to learn how you can use this function in simulation.
Then i think i need to write a bandpass filter in C code by myself using DFT and inverse fourier transformation, but i really don't know how to write it. May somebody help me ?
  2 Comments
Jan
Jan on 27 Apr 2017
Please do not use # characters in the tags. This is not twitter.
What kind of bandpass filter do you need? As long, as you do not explain this, it is hard to suggest a solution. A full replacement of the designfilt command would be an overkill.
Julien Pelet
Julien Pelet on 28 Apr 2017
Hi Jan, sorry i am new here. I use two different kind of filter, one 'designfilter' and the other 'Least Square' is reported just over there ))
function [td_filtrage]= LeastSquare(Datad,Fs)
N = 40; % Order
Fstop1 = 0.7; % First Stopband Frequency
Fpass1 = 0.9; % First Passband Frequency
Fpass2 = 1.4; % Second Passband Frequency
Fstop2 = 1.5; % Second Stopband Frequency
Wstop1 = 1; % First Stopband Weight
Wpass = 1; % Passband Weight
Wstop2 = 1; % Second Stopband Weight
% Calculate the coefficients using the FIRLS function.
b = firls(N, [0 Fstop1 Fpass1 Fpass2 Fstop2 Fs/2]/(Fs/2), [0 0 1 1 0 ...
0], [Wstop1 Wpass Wstop2]);
Hd = dfilt.dffir(b);
td_filtrage = filter(Hd,Datad)
Then when i try to translate in C code, the software send me: Error 'dfilt.dffir' is not supported for code generation.
Thank you to help me !

Sign in to comment.

Accepted Answer

Honglei Chen
Honglei Chen on 27 Apr 2017
Do you need to change your filter over the simulation, if not, then the coder.extrinsic approach, as outlined in the error message, would be a good way to go. Essentially you can use MATLAB to compute the coefficients and then perform the filtering.
HTH
  8 Comments
Julien Pelet
Julien Pelet on 2 May 2017
I fix the problem about the constant Fs, I put this variable insade the LeastSquare function.
function [td_filtrage]= LeastSquare(Datad)
Fs = 37;
N = 40; % Order
Fstop1 = 0.7; % First Stopband Frequency
Fpass1 = 0.9; % First Passband Frequency
Fpass2 = 1.4; % Second Passband Frequency
Fstop2 = 1.5; % Second Stopband Frequency
Wstop1 = 1; % First Stopband Weight
Wpass = 1; % Passband Weight
Wstop2 = 1; % Second Stopband Weight
% Calculate the coefficients using the FIRLS function.
b = firls(N, [0 Fstop1 Fpass1 Fpass2 Fstop2 Fs/2]/(Fs/2), [0 0 1 1 0 ...
0], [Wstop1 Wpass Wstop2]);
td_filtrage = filter(b,1,Datad);
Then i change the call code in the Main
td_filtrage = LeastSquare(Datad);
I received my function in C code, i think its working. I need to put the code in my microprocesor . Thank you for everything !!
Hari Ijjada
Hari Ijjada on 30 Aug 2019
i am facing the same issue but instead of bandpass filter i am using low pass filter. how to design the lowpass filter using firls syntax ?

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!