Main Content

가변 크기의 MATLAB Function 블록 변수 선언하기

MATLAB Function 블록은 가변 크기 배열 지원 블록 속성이 활성화된 경우 시뮬레이션 중에 크기를 변경하는 변수를 지원합니다. Support variable-size arrays 항목을 참조하십시오. 그러나 가변 크기로 지정된 변수만 시뮬레이션 중에 크기를 변경할 수 있습니다. 범위에 따라 MATLAB Function 블록 편집기를 사용하거나 coder.varsize 함수를 사용하거나 연결된 블록 신호에서 크기 가변성을 상속하여 변수를 가변 크기로 설정할 수 있습니다. 범위에 대한 자세한 내용은 Scope 항목을 참조하십시오.

출력 변수

기본적으로, 출력 변수는 가변 크기가 아닙니다. 출력을 가변 크기로 지정하려면 다음을 수행하십시오.

  1. MATLAB Function 블록을 더블 클릭하여 MATLAB Function 블록 편집기를 엽니다.

  2. 기호 창과 속성 인스펙터를 엽니다. 함수 탭에서 데이터 편집을 클릭합니다.

  3. 기호 창에서 출력 변수를 선택합니다.

  4. 속성 인스펙터의 속성 탭에서 가변 크기 속성을 선택합니다.

  5. 크기 속성에서 크기의 상한을 지정합니다. 예를 들어, 2×4 행렬을 허용되는 최대 크기로 지정하려면 [2 4]를 입력하십시오.

다른 범위 유형

입력 변수는 연결된 신호에서 크기를 상속합니다. 따라서 입력 변수는 명시적으로 가변 크기로 정의하지 않습니다. 가변 크기 신호 생성에 대한 자세한 내용은 Variable-Size Signal Basics 항목을 참조하십시오.

변수가 입력 변수나 출력 변수가 아니면 coder.varsize 함수를 사용하여 변수를 정의하십시오.

필터링 알고리즘에서 가변 크기 신호 사용하기

이 예제에서는 가변 크기 벡터를 사용하여 백색 잡음 신호의 값을 저장합니다. 다음과 같은 방식으로 함수가 신호 값을 가지치기하므로 벡터의 크기는 런타임 시 달라질 수 있습니다.

  • 각각의 지정된 허용오차 내에서 고유하지 않은 신호 값을 필터링합니다.

  • 2개의 신호 값마다 평균을 구하고 결과로 생성되는 평균만 출력합니다.

이 모델에서 Band-Limited White Noise 블록은 정규분포된 난수 값 집합을 백색 잡음 신호의 소스로 생성합니다. MATLAB Function 블록인 Filter는 각각의 지정된 허용오차 내에서 고유하지 않은 신호 값을 필터링합니다. 그런 다음, MATLAB Function 블록 Average가 지정된 개수의 고유한 신호 값의 평균을 출력합니다. Scope 블록은 Filter 블록과 Average 블록의 출력을 표시합니다. 구성을 표시할 모델을 엽니다.

model = "emldemo_process_signal";
open_system(model);

model_var_size_MLFB.png

소스 신호 검사하기

Band-Limited White Noise 블록을 열어 소스 신호 속성을 확인합니다. 잡음 전력 파라미터의 크기는 신호 값을 유지하는 배열의 크기를 정의합니다. 이 배열은 double형 값으로 구성된 1×9 벡터입니다.

ex_varsize_source.png

Filter MATLAB Function 블록 검사하기

Filter를 열어서 필터링 함수를 검사합니다. Filter는 각각의 허용오차 0.2 내에 있지 않은 고유한 신호 값을 필터링합니다. 이 함수는 외부 MATLAB® 함수 파일 emldemo_uniquetol.m을 호출하여 신호 값을 필터링합니다. 이 함수는 백색 잡음 신호 값으로 구성된 1×9 벡터를 첫 번째 인수로, 허용오차 값을 두 번째 인수로 전달합니다.

function y = uniquify(u)
y = emldemo_uniquetol(u,0.2);

MATLAB 함수 파일 emldemo_uniquetol.m을 열어 외부 함수 emldemo_uniquetol의 코드를 확인합니다. emldemo_uniquetol은 모든 ij에 대해 abs(B(i) - B(j)) > tol를 만족하는 출력 벡터 B에서 필터링된 값 A를 반환합니다.

function B = emldemo_uniquetol(A,tol) 
%#codegen

A = sort(A);
B = A(1);
k = 1;
for i = 2:length(A)
    if abs(A(k) - A(i)) > tol
        B = [B A(i)];
        k = i;
    end
end

각 시간 스텝에서 Band-Limited White Noise 블록은 A에 대해 다른 세트의 난수 값을 생성하고 emldemo_uniquetolB에 다른 개수의 출력 신호를 만들 수 있습니다. 그러므로 y는 가변 크기여야 합니다. y가 가변 크기를 가지려면 가변 크기 속성을 활성화해야 합니다. 이 예제에서 가변 크기y에 대해 활성화됩니다. Filter에서 기호 창과 속성 인스펙터를 엽니다. 함수 탭에서 데이터 편집을 클릭합니다. 기호 창에서 y를 클릭하면 속성 인스펙터에서 속성을 확인할 수 있습니다. 가변 크기 출력의 경우 크기 속성을 최대 크기 상한으로 지정해야 합니다. 이 예에서 크기[1 9]입니다.

ex_varsize_output_uniquify.png

MATLAB Function 블록의 가변 크기 배열 지원 속성을 활성화하여 출력의 가변 크기 속성을 활성화해야 합니다.

Average MATLAB Function 블록 검사하기

Average는 다음 조건에 따라 Filter로 필터링된 값의 평균을 구합니다.

  • 신호의 개수가 1보다 크고 2로 나누어진다면 Average는 연속되는 값 쌍마다 평균을 구합니다.

  • 신호의 개수가 1보다 크고 2로 나누어지지 않는다면 Average는 첫 번째 값을 기각하고 남아있는 연속 쌍의 평균을 구합니다.

  • 정확히 하나의 신호만 있다면 Average는 값을 변경하지 않고 그대로 반환합니다.

Average를 열어 코드를 확인합니다.

function y = avg(u)

if numel(u) == 1
    y = u;
else
    k = numel(u)/2;
    if k ~= floor(k)
        u = u(2:numel(u));
    end
    y = emldemo_navg(u,2);
end

avg 함수는 외부 MATLAB 함수 emldemo_navg를 호출하여 2개의 연속되는 신호 값마다 평균을 계산합니다.

function B = emldemo_navg(A,n) 
%#codegen

assert(n>=1 && n<=numel(A));

B = zeros(1,numel(A)/n);
k = 1;
for i = 1 : numel(A)/n
     B(i) = mean(A(k + (0:n-1)));
     k = k + n;
end

uy는 모두 가변 크기입니다. u가 입력이므로 u를 가변 크기로 명시적으로 정의하지 않아도 됩니다. u가 제공하는 크기에 따라 요소의 개수가 다르므로 출력 y는 가변 크기 벡터로 선언됩니다. y의 속성을 검사하여 가변 크기임을 확인합니다.

모델 시뮬레이션하기

모델을 시뮬레이션하여 각 Scope 블록의 결과를 확인합니다. Filter는 실행될 때마다 가변적인 개수의 신호 값을 출력합니다.

Scope_filter.png

Average는 실행될 때마다 가변적인 개수의 신호 값을 출력합니다. 이 블록은 고유한 값들의 약 절반 정도를 반환합니다.

Scope_average.png

참고 항목

관련 항목