Main Content

MATLAB에서 System object를 사용하는 시스템 설계

MATLAB에서의 시스템 설계 및 시뮬레이션

System object를 사용하여 MATLAB®에서 시스템을 설계하고 시뮬레이션할 수 있습니다. 다음 도식에 표시된 것과 같이 MATLAB에서 System object를 사용합니다.

The process of using System object. First create individual components, followed by configure components, then assemble components into system and finally run the system

  1. 개별 컴포넌트 생성하기 — 시스템에서 사용할 System object를 만듭니다. 개별 컴포넌트 생성하기. 툴박스에서 제공되는 System object 외에 자신만의 고유한 System object를 만들 수도 있습니다. System object 생성하기를 참조하십시오.

  2. 컴포넌트 구성하기 — 필요한 경우, 객체의 속성값을 변경하여 원하는 특정 시스템을 모델링합니다. 모든 System object™ 속성은 변경 없이 사용할 수 있는 디폴트 값을 가집니다. 컴포넌트 구성하기를 참조하십시오.

  3. 컴포넌트를 시스템으로 조립하기 — System object를 포함하고, 시스템 시뮬레이션을 위한 입력값과 출력값으로 MATLAB 변수를 사용하여 이러한 System object를 연결하는 MATLAB 프로그램을 작성합니다. System object 연결하기를 참조하십시오.

  4. 시스템 실행하기 — 프로그램을 실행합니다. 시스템이 실행 중인 동안 조정 가능형 속성을 변경할 수 있습니다. 시스템 실행하기객체 재구성하기 항목을 참조하십시오.

개별 컴포넌트 생성하기

이 섹션의 예제에서는 소프트웨어에 미리 정의된 System object를 사용하는 방법을 보여줍니다. 함수를 사용하여 System object를 만들고 사용하는 경우 조건 코드를 사용하여 객체 생성을 지정하십시오. 생성을 조건화하면 루프 내에서 해당 함수를 호출할 경우 오류를 방지할 수 있습니다. 자체적인 System object를 만들 수도 있습니다. System object 생성하기 항목을 참조하십시오.

이 섹션에서는 DSP System Toolbox™와 Audio Toolbox™의 미리 정의된 컴포넌트를 사용하여 시스템을 설정하는 방법을 보여줍니다.

  • dsp.AudioFileReader — 오디오 데이터 파일을 읽습니다.

  • dsp.FIRFilter — 오디오 데이터를 필터링합니다.

  • audioDeviceWriter — 필터링된 오디오 데이터를 재생합니다.

먼저, 디폴트 속성 설정을 사용하여 컴포넌트 객체를 만듭니다.

audioIn = dsp.AudioFileReader;
filtLP = dsp.FIRFilter;
audioOut = audioDeviceWriter;

컴포넌트 구성하기

컴포넌트를 구성하는 경우

객체를 만들 때 객체의 속성을 설정하지 않았으며 디폴트 값을 사용하지 않으려면 이러한 속성을 명시적으로 설정해야 합니다. 일부 속성의 경우 시스템이 실행 중인 동안 해당 속성값을 변경할 수 있습니다. 자세한 내용은 객체 재구성하기 항목을 참조하십시오.

대부분의 속성은 서로 독립적입니다. 그러나 일부 System object 속성은 다른 속성을 활성화 또는 비활성화하거나 다른 속성의 값을 제한합니다. 오류나 경고를 방지하려면 종속 속성을 설정하기 전에 제어 속성을 설정해야 합니다.

컴포넌트 속성값 표시하기

객체에 대한 현재 속성값을 표시하려면 명령줄에 해당 객체의 핸들 이름을 입력하십시오(예: audioIn). 특정 속성의 값을 표시하려면 objecthandle.propertyname을 입력하십시오(예: audioIn.FileName).

컴포넌트 속성값 구성하기

이 섹션에서는 컴포넌트 객체의 속성을 설정하여 시스템의 컴포넌트를 구성하는 방법을 보여줍니다.

컴포넌트 구성과는 별개로 컴포넌트를 생성한 경우 이 절차를 따르십시오. 뒷부분에 나오는 예제에 설명된 대로, 컴포넌트를 생성하면서 동시에 구성할 수도 있습니다.

file reader 객체의 경우, 읽을 파일을 지정하고 출력 데이터형을 설정합니다.

filter 객체의 경우, 저역통과 필터 차수와 차단 주파수를 지정하는 fir1 함수를 사용하여 필터 분자 계수를 지정합니다.

audio device writer 객체의 경우, 샘플 레이트를 지정합니다. 여기에서는 입력 데이터와 동일한 샘플 레이트를 사용합니다.

audioIn.Filename = "speech_dft_8kHz.wav";
audioIn.OutputDataType = "single";
filtLP.Numerator = fir1(160,.15);
audioOut.SampleRate = audioIn.SampleRate;

컴포넌트를 만드는 동시에 구성하기

이 예제에서는 System object 컴포넌트를 만들면서 동시에 원하는 속성을 구성하는 방법을 보여줍니다. 'Name', Value 인수 쌍으로 각 속성을 지정합니다.

file reader 객체를 만들고, 읽을 파일을 지정하고, 출력 데이터형을 설정합니다.

audioIn = dsp.AudioFileReader("speech_dft_8kHz.wav",...
                              'OutputDataType',"single");

fir1 함수를 사용하여 filter 객체를 만들고 필터 분자를 지정합니다. fir1 함수의 저역통과 필터 차수와 차단 주파수를 지정합니다.

filtLP = dsp.FIRFilter('Numerator',fir1(160,.15));

오디오 플레이어 객체를 만들고 샘플 레이트를 입력 데이터와 동일한 샘플 레이트로 설정합니다.

audioOut = audioDeviceWriter('SampleRate',audioIn.SampleRate);

컴포넌트를 시스템으로 조립하기

System object 연결하기

필요한 컴포넌트를 확인하고 System object를 만들고 구성한 후 시스템을 조립합니다. 다른 MATLAB 변수와 마찬가지로 System object를 사용하고 MATLAB 코드에 포함시킵니다. System object의 내부 또는 외부로 MATLAB 변수를 전달할 수 있습니다.

System object 사용과 함수 사용의 주요 차이점은 System object의 경우 2단계 절차를 사용한다는 점입니다. 먼저, 객체를 만들고 객체의 파라미터를 설정한 후 객체를 실행합니다. 객체를 실행하면 객체가 초기화되고 시스템의 데이터 흐름 및 상태 관리를 제어하게 됩니다. 일반적으로 코드 루프 내에서 System object를 호출합니다.

객체의 출력값을 다른 객체의 입력값으로 사용합니다. 일부 System object의 경우 해당 객체의 속성을 사용하여 입력값이나 출력값을 변경할 수 있습니다. 적절한 입력값 개수와 출력값 개수가 사용되고 있는지 확인하려면 임의의 System object에서 narginnargout을 사용하십시오. 사용 가능한 모든 System object 함수에 대한 자세한 내용은 System object 함수 항목을 참조하십시오.

시스템의 컴포넌트 연결하기

이 섹션에서는 오디오 데이터 파일을 읽고 필터링하고 재생하기 위해 컴포넌트를 함께 연결하는 방법을 보여줍니다. while 루프는 isDone 함수를 사용하여 전체 파일을 끝까지 읽습니다.

while ~isDone(audioIn)
    audio = audioIn();    % Read audio source file
    y = filtLP(audio);        % Filter the data
    audioOut(y);              % Play the filtered data
end

시스템 실행하기

명령줄에 직접 입력하거나 프로그램이 들어 있는 파일을 실행하여 코드를 실행합니다. 시스템에 대해 코드를 실행하면 객체를 통해 데이터가 처리됩니다.

시스템이 실행 중인 동안 변경할 수 없는 사항

System object를 처음 호출하면 객체를 초기화한 후 실행합니다. System object가 데이터 처리를 시작하면 조정 불가형 속성은 변경할 수 없습니다.

System object에 따라 다음과 같은 사양도 추가적으로 제한될 수 있습니다.

  • 입력값 크기

  • 입력값의 실수/복소수 여부

  • 입력 데이터형

  • 조정 가능형 속성 데이터형

  • 이산 상태 데이터형

System object 작성자가 위 사양을 제한한 경우, System object가 사용 중일 때 이를 변경하려고 하면 오류가 발생합니다.

객체 재구성하기

속성 변경하기

System object가 데이터 처리를 시작하면 조정 불가형 속성은 변경할 수 없습니다. 사용자는 아무 System object에 대해 isLocked를 사용하여 객체가 데이터를 처리하고 있는지 여부를 확인할 수 있습니다. 처리가 완료되면 release 함수를 사용하여 리소스를 해제하고 조정 불가형 속성을 변경하도록 허용할 수 있습니다.

일부 객체 속성은 조정 가능형이므로 객체가 사용 중이어도 변경할 수 있습니다. 대부분의 System object 속성은 조정 불가형입니다. 개별 속성이 조정 가능형인지 확인하려면 객체의 함수 도움말 페이지를 참조하십시오.

입력값의 실수/복소수 여부, 입력 차원 또는 입력 데이터형 변경하기

일부 System object는 객체를 사용하는 동안에는 알고리즘을 호출한 후 입력값의 실수/복소수 여부, 입력값 크기 또는 입력 데이터형을 변경하도록 허용하지 않습니다. System object가 이러한 사양을 제한한 경우, release를 호출하여 변경할 수 있습니다. release를 호출하면 상태 및 Discrete 상태 같은 System object의 다른 항목도 재설정할 수 있습니다.

시스템에서 조정 가능형 속성 변경하기

이 예제에서는 filter 객체의 Numerator 속성을 수정하여 코드가 실행 중인 동안 필터 유형을 고역통과 필터로 변경하는 방법을 보여줍니다. 변경 사항은 다음에 객체를 호출할 때 적용됩니다.

reset(audioIn);% Reset audio file
Wn = [0.05,0.1,0.15,0.2];
for x=1:4000
    Wn_X = ceil(x/1000);
    filtLP.Numerator = fir1(160,Wn(Wn_X),'high');
    audio = audioIn();    % Read audio source file
    y = filtLP(audio);    % Filter the data
    audioOut(y);          % Play the filtered data
end