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

14 vues (au cours des 30 derniers jours)
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 commentaires
Jan
Jan le 27 Avr 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 le 28 Avr 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 !

Connectez-vous pour commenter.

Réponse acceptée

Honglei Chen
Honglei Chen le 27 Avr 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 commentaires
Julien Pelet
Julien Pelet le 2 Mai 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 le 30 Août 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 ?

Connectez-vous pour commenter.

Plus de réponses (0)

Community Treasure Hunt

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

Start Hunting!

Translated by