赞
踩
示例说明
此示例使用一阶反馈回路。它还使用量化器来避免无限的位增长。输出信号被延迟一个采样周期并通过回馈来缓冲输入信号。
复制必需的文件
您需要此 MATLAB 文件来运行此示例。将其复制到临时目录。此步骤需要具有对系统临时目录的写入访问权限。
tempdirObj = fidemo.fiTempdir('fiaccelbasicsdemo');
fiacceldir = tempdirObj.tempDir;
fiaccelsrc = ...
fullfile(matlabroot,'toolbox','fixedpoint','fidemos','+fidemo','fiaccelFeedback.m');
copyfile(fiaccelsrc,fiacceldir,'f');
检查 MATLAB 反馈函数代码
执行反馈回路的 MATLAB 函数位于文件 fiaccelFeedback.m 中。以下代码将量化输入,并执行反馈回路操作:
type(fullfile(fiacceldir,'fiaccelFeedback.m'))
function [y,w] = fiaccelFeedback(x,a,y,w)
%FIACCELFEEDBACK Quantizer and feedback loop used in FIACCELBASICSDEMO.
% Copyright 1984-2013 The MathWorks, Inc.
%#codegen
for n = 1:length(x)
y(n) = quantize(x(n) - a*w, true, 16, 12, 'floor', 'wrap');
w = y(n);
end
此函数中使用以下变量:
x 是输入信号向量。
y 是输出信号向量。
a 是反馈增益。
w 是延迟一个单位时间的输出信号。
创建输入信号并初始化变量
rng('default'); % Random number generator
x = fi(2*rand(1000,1)-1,true,16,15); % Input signal
a = fi(.9,true,16,15); % Feedback gain
y = fi(zeros(size(x)),true,16,12); % Initialize output. Fraction length
% is chosen to prevent overflow
w = fi(0,true,16,12); % Initialize delayed output
A = coder.Constant(a); % Declare "a" constant for code
% generation
运行 Normal 模式
tic,
y = fiaccelFeedback(x,a,y,w);
t1 = toc;
编译反馈代码的 MEX 版本
fiaccel fiaccelFeedback -args {x,A,y,w} -o fiaccelFeedback_mex
运行 MEX 版本
tic
y2 = fiaccelFeedback_mex(x,y,w);
t2 = toc;
加速比
代码加速为通过 MEX 文件生成加速定点算法提供优化。Fixed-Point Designer™ 提供了一个方便的函数 fiaccel 来将您的 MATLAB 代码转换为 MEX 函数,这可以大大加快定点算法的执行速度。
r = t1/t2
r =
13.7451
清理临时文件
clear fiaccelFeedback_mex;
tempdirObj.cleanUp;
%#ok
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。