[英]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.