簡體   English   中英

無法使用Matlab Coder將Matlab代碼轉換為C代碼

[英]Cannot convert Matlab code to C code using 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

這個問題可能是重復的,但我搜索了互聯網,找不到任何相關的帖子。 有什么方法可以解決這個錯誤嗎?

您已將tic, toc聲明為外在的,這是正確的,因為它們不支持代碼生成。 由於它們是外在的,因此這些函數的結果不能直接用於其他表達式。 編碼器在運行時不知道這些結果的內容。 但是您可以通過將結果分配給已知變量來提供有關其類型的提示。 你應該更換線路

while toc < 60

有以下幾行

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

由於我們用0初始化tElapsed,因此它是一種已知類型的雙標量。 分配給tElapsed時,toc的輸出將轉換為此類型。

另請注意,使用MATLAB Coder生成mex文件時,代碼可以正常工作。 但是你不能從中生成獨立的代碼,因為外部函數需要運行MATLAB。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM