使用Matlab Coder无法将Matlab代码转换为C代码

4
我有一段MATLAB代码,如下所示。我尝试使用MATLAB Coder将此代码转换为C代码,但是遇到了错误。
期望是逻辑、字符、整数、fi、单精度或双精度。发现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

这个问题可能是一个重复的问题,但我搜索了互联网并没有找到任何相关的帖子。有没有什么办法来解决这个错误?

1个回答

5

您已将tic、toc声明为外部函数,这是正确的,因为它们不支持代码生成。由于它们是外部函数,这些函数的结果不能直接用于其他表达式中。编码器无法在运行时知道这些结果的内容。但是您可以通过将它们的结果分配给已知变量来提供有关其类型的提示。您应该替换该行:

while toc < 60

以下是相关内容:

使用以下代码行

tElapsed = 0;
tElapsed = toc;
while tElapsed < 60

由于我们使用0初始化tElapsed,它是已知类型的双精度标量。当toc的输出被赋值给tElapsed时,它将被转换为此类型。

还要注意,当您使用MATLAB Coder生成mex文件时,您的代码将正常工作。但是,由于外部函数需要MATLAB运行,因此无法从中生成独立的代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接