고정소수점 시뮬레이션 가속화하기
이 예제에서는 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 = 158.3828
고정소수점 출력값이 인터프리터 모드 MATLAB과 MEX 간에 동일한지 확인하기
isequal(y1,y2)
ans = logical 1
코드 분석기 경고를 표시하지 않습니다.
%#ok<*NOPTS>