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

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)

这个问题可能是重复的,但我搜索了互联网,找不到任何相关的帖子.有什么方法可以解决这个错误吗?

Nav*_*van 5

您已声明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.