2013-05-31 2 views
1

좋은 하루! Embedded Matlab 함수 사용

는 다음 사항을 고려하십시오 :

내가 "Emebedded 매트랩 기능"을 사용하여 Simulnk에서 Matlab의 기능 square()을 사용하여 구형파를 생성합니다. 나는 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 유형"(AKA mxArray)을 유지해야합니다. Embedded 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

덕분에 많은 동료! 나는 follwing 질문을 가지고있다 : 1. 나는 범위에서 하나의 완전한 기간을 볼 수 없다. 어떤 제안? – sheetansh

+2

각 시간 단계마다 길이 2948의 신호를 생성합니다. 즉, 한 번에 전체 사각형 파형 추적을 생성 할 때마다, 그리고 매 시간 단계마다 신호를 생성합니다. 아마도 각 시간 단계마다 길이 1의 신호를 생성하고 그 시간에만 구형파의 값을 포함하려고합니다. 가장 쉬운 방법은 MATLAB에서 신호를 생성 한 다음 From Workspace 블록을 사용하여 Simulink에 입력하는 것입니다. –

+0

@PhilGoddard : 답장을 보내 주셔서 감사합니다. 그리고 늦은 수용을 위해 유감스럽게 생각해, 나는이 주말에 그물 연결이 있지 않았다. 나는 이미 SIM-IN 블록을 사용해 보았지만 항상 프레임 또는 샘플 시간이 정의되지 않았다는 오류가있어, 왜 임베디드 기능으로 전환했는지. 그래서 당신이 옳은 것을 이해했다면, 첫 번째 열은 시간이고 다른 두 열은 단순히 원하는 값인 [100x3] 매트릭스를 정의해야한다는 뜻입니까? 권리?? – sheetansh