Main Content

고정소수점 시뮬레이션 가속화하기

이 예제에서는 fiaccel 함수를 사용하여 고정소수점 알고리즘의 속도를 높이는 방법을 보여줍니다. 코드 가속화를 사용하면 MEX 파일 생성을 통해 고정소수점 알고리즘이 가속화되도록 최적화됩니다. Fixed-Point Designer™는 MATLAB 코드를 MEX 함수로 변환하는 편의 함수 fiaccel을 제공하고, 이 함수를 사용하여 고정소수점 알고리즘의 실행 속도를 크게 높일 수 있습니다. 이 예제에서는 MATLAB® 코드에서 MEX 함수를 생성하고, 생성된 MEX 함수를 실행하고, 그 실행 속도를 MATLAB 코드 시뮬레이션과 비교합니다.

예제에 대한 설명

이 예제에서는 1차 피드백 루프를 사용합니다. 출력-신호 유형으로 형변환하면 무한 비트 증가가 방지됩니다. 출력 신호는 하나의 샘플만큼 지연되고 입력 신호 약화를 위해 다시 전달됩니다.

MATLAB® 피드백 함수 코드 검사하기

피드백 루프를 수행하는 MATLAB 함수는 파일 fiaccelFeedback.m 내에 있습니다. 출력 y에 첨자를 사용하여 할당하면 y의 유형이 형변환되고 무한 비트 증가가 방지됩니다.

function [y,z] = fiaccelFeedback(x,a,y,z)
    for n = 1:length(x)
        y(n) = x(n) - a*z;
        z(:) = y(n);
    end
end

이 함수에는 다음 변수가 사용됩니다.

  • x는 입력 신호 벡터입니다.

  • y는 출력 신호 벡터입니다.

  • a는 피드백 이득입니다.

  • z는 단위 지연된 출력 신호입니다.

입력 신호 생성 및 변수 초기화하기

clearvars

난수 생성기의 설정을 디폴트 값으로 둡니다.

rng('default');

입력 신호입니다.

x = fi(2*rand(1000,1)-1,true,16,15);

피드백 이득입니다.

a = fi(0.9,true,16,15);

출력을 초기화합니다. 오버플로 방지를 위해 소수부 길이가 선택되었습니다.

y = fi(zeros(size(x)),true,16,12);

지연된 출력을 초기화합니다.

z = cast(0,'like',y);

인터프리터 모드로 MATLAB 실행하고 시간 측정하기

tic
y1 = fiaccelFeedback(x,a,y,z);
t1 = toc;

MEX 버전의 피드백 코드 만들기

코드 생성을 위해 피드백 이득 파라미터 a 상수를 선언합니다.

fiaccel fiaccelFeedback -args {x,coder.Constant(a),y,z} -o fiaccelFeedback_mex

MEX 버전 실행하고 시간 측정하기

한 번 실행하여 MEX 파일을 메모리로 불러옵니다.

fiaccelFeedback_mex(x,a,y1,z);

다시 실행하여 시간을 측정합니다.

tic
y2 = fiaccelFeedback_mex(x,a,y,z);
t2 = toc;

가속 속도

MEX 실행 속도를 MATLAB 코드 시뮬레이션과 비교합니다.

ratio_of_speed_up = t1/t2
ratio_of_speed_up =

  147.5653

고정소수점 출력값이 인터프리터 모드 MATLAB과 MEX 간에 동일한지 확인하기

isequal(y1,y2)
ans =

  logical

   1

코드 분석기 경고를 표시하지 않습니다.

%#ok<*NOPTS>

참고 항목