주요 콘텐츠

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

이 예제에서는 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 =

  186.7901

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

isequal(y1,y2)
ans =

  logical

   1

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

%#ok<*NOPTS>

참고 항목