the*_*vil 4 c matlab code-generation mex matlab-coder
我有一个MATLAB代码如下所示.我试图使用MATLAB Coder将此代码转换为C代码,但我遇到了错误.

预期逻辑,char,int,fi,single或double.找到了一个mxArray.MxArrays从对MATLAB解释器的调用返回,并且在表达式中不受支持.它们可能只用于赋值的右侧,也可用作外在函数的参数.
% Applies A-weighted filtering to sound and draws it's plot
% in a figure as output.
function A_filtering
coder.extrinsic('tic')
coder.extrinsic('toc')
coder.extrinsic('display')
sampleRate = 44100;
reader = dsp.AudioFileReader('Jet_Flypast.wav');
fs = 44100;
weightFilter = weightingFilter('A-weighting',fs);
% fileWriter = dsp.AudioFileWriter('SampleRate',fs);
% visualize(weightFilter,'class 1')
scope = dsp.SpectrumAnalyzer('SampleRate',fs,...
'PlotAsTwoSidedSpectrum',false,...
'FrequencyScale','Log',...
'FrequencyResolutionMethod','WindowLength',...
'WindowLength',sampleRate,...
'Title','A-weighted filtering',...
'ShowLegend',true,...
'ChannelNames',{'Original Signal','Filtered Signal'});
tic
while toc < 60
x = reader();
y = weightFilter(x);
scope([x(:,1),y(:,1)])
display(x(:,1))
end
release(scope);
release(weightFilter);
release(reader);
end
Run Code Online (Sandbox Code Playgroud)
这个问题可能是重复的,但我搜索了互联网,找不到任何相关的帖子.有什么方法可以解决这个错误吗?
您已声明tic, toc为外在的,因为它们不支持代码生成.由于它们是外在的,因此这些函数的结果不能直接用于其他表达式.编码器在运行时不知道这些结果的内容.但是,您可以通过将结果分配给已知变量来提供有关其类型的提示.你应该更换线路
while toc < 60
Run Code Online (Sandbox Code Playgroud)
有以下几行
tElapsed = 0;
tElapsed = toc;
while tElapsed < 60
Run Code Online (Sandbox Code Playgroud)
由于我们用0初始化tElapsed,因此它是一种已知类型的双标量.分配给tElapsed时,toc的输出将转换为此类型.
另请注意,使用MATLAB Coder生成mex文件时,代码可以正常工作.但是你不能从中生成独立的代码,因为外部函数需要运行MATLAB.