2013-05-31 86 views
1

美好的一天!使用嵌入式Matlab函數

請考慮以下幾點:

我要生成使用MATLAB功能square()在Simulnk使用「Emebedded MATLAB函數」的方波。我嘗試同樣使用eml.extrinsic, 但我不斷收到該條規定

'y'<the output from embedded function block> cannot be equated to square. 

有誤,請參閱下面的屏幕截圖:

BLOCK IN SIMULINK Code for the said Block Error List

背後的想法這個塊根據定義的頻率範圍產生方波。

  • a =幅度
  • f =頻率
  • dc =佔空比

請讓我知道我做錯了嗎?或者指出我爲了理解我的錯誤而必須閱讀的內容?或者提供替代方法來完成我想要的。

在此先感謝!

回答

1

編譯器無法確定外部函數輸出的類型和大小。因此,編譯器將被迫保持「MATLAB類型」(也就是mxArray)。你可以用嵌入式Matlab中的mxArray做的唯一事情是將它傳遞給另一個外部函數,但是你不能直接將它分配給任何東西。

在調用外部函數之前,您必須告訴MATLAB外部函數的輸出的類型和大小。您可以通過預先分配具有相同類型和大小(預期)輸出的變量來完成此操作。

因此,對於您的方波:

function y = fcn(~) 
%#eml 

eml.extrinsic('square', 'linspace'); 

a = 1; 
dc = 50;  
f = 2*pi* (6908:1:9856); 

% Pre-allocate 
t = f; 
% THEN assign 
t = linspace(0, 1, numel(f)); 

% pre-allocate 
y = t; 
% THEN assign 
y = a*square(f.*t, dc); 
+0

非常感謝隊友! 我有一個下面的問題: 1.我甚至看不到範圍內的一個完整時期。有什麼建議麼? – sheetansh

+2

您正在每個時間步長生成一個長度爲2948的信號,即您正在生成整個方波跡線,並且在每個時間步。假設你真的想在每個時間步長產生一個長度爲1的信號,只包含當時的方波值。最簡單的方法是在MATLAB中生成信號,然後使用From Workspace塊輸入Simulink。 –

+0

@PhilGoddard:謝謝你的回覆。對於遲到的接受感到抱歉,本週末我沒有網絡連接。 我已經嘗試過使用SIM-IN模塊,但總是收到一個錯誤,表示沒有時間幀或採樣時間定義,爲什麼我切換到嵌入式功能。所以如果我理解你是對的,你的意思是我應該定義一個[100×3]矩陣,其中第一列是時間,另外兩個是我想要的值?對?? – sheetansh