Generation of C code from simulink

3 views (last 30 days)
I am trying to get a C code for the peaking IIR filter, but I am getting the following error in MATLAB Code Report Viewer.I am attaching the MATLAB code below .Please help me to debug this error .Any help would be appreciated
function Hd = Filter1_150_matlab
%FILTER1_150_MATLAB Returns a discrete-time filter object.
% MATLAB Code
% Generated by MATLAB(R) 9.4 and DSP System Toolbox 9.6.
% Generated on: 26-Mar-2019 16:44:54
% IIR Peaking filter designed using the IIRPEAK function.
% All frequency values are in Hz.
Fs = 1000; % Sampling Frequency
Fpeak = 150; % Peak Frequency
Q = 100; % Q-factor
Apass = 1; % Bandwidth Attenuation
BW = Fpeak/Q;
% Calculate the coefficients using the IIRNOTCHPEAK function.
[b, a] = iirpeak(Fpeak/(Fs/2), BW/(Fs/2), Apass);
Hd = dsp.IIRFilter( ...
'Structure', 'Direct form II', ...
'Numerator', b, ...
'Denominator', a);
num = [0.0092 0 -0.0092]
den = [1 -1.1648 0.9816]
%Hz1 = filt(num,den)
%disp(Hz1)
% [EOF]
I am getting following error message
Handle Classes in top-level outputs are not supported in MATLAB Coder.
Output parameter 'Hd' contains a handle class.
  2 Comments
Walter Roberson
Walter Roberson on 26 Mar 2019
What error message are you observing?
Walter Roberson
Walter Roberson on 27 Mar 2019
Are you asking Coder to compile this as your main routine, or is there a different main routine that calls this one and you are asking to compile that other routine?

Sign in to comment.

Accepted Answer

David Fink
David Fink on 28 Mar 2019
Based on the error message, Hd (a dsp.IIRFilter) contains a member that is a handle class, which let multiple names refer to the same object.
While handle classes are supported for code generation, as of R2019a, they are not yet supported as inputs or outputs (or data members of inputs or outputs) to entry-point functions (the function name you tell MATLAB Coder to generate code for).
We've made an internal note of your request so we can look at lifting that limitation in the future.
For now, a workaround is to pass non-handle data as output.
Instead of the filter as output, the function could take in input data and output the result of the filter on that data.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!