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

14 次查看(过去 30 天)
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 个评论
Jan
Jan 2017-4-27
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 2017-4-28
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 !

请先登录,再进行评论。

采纳的回答

Honglei Chen
Honglei Chen 2017-4-27
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 个评论
Julien Pelet
Julien Pelet 2017-5-2
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 2019-8-30
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 ?

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Filter Design 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by