背景:
计算机刷新率60Hz,每一帧的时间为 1/60 = 16.67ms。
目的:
想把运算量的计算时间控制在一帧以内,以实现帧同步。(需求:优化代码)
问题:
通过测试,发现每次运算的时间都大于一帧。约3到4帧的时间。如下图。
由于个人能力有限,网上也查阅了很多方法,折腾了好久,实现想不出更好的方法了。恳请各位论坛前辈帮忙。
% 通过数学运算得到棋盘格
white =1;
black = 0;
grey = 0.5;
screenYpix = 1080;
% Number of white/black circle pairs
rcycles = 8;
% Number of white/black angular segment pairs (integer)
tcycles = 24;
% Now we make our checkerboard pattern
xylim = 2 * pi * rcycles;
[x, y] = meshgrid(-xylim: 2 * xylim / (screenYpix - 1): xylim,...
-xylim: 2 * xylim / (screenYpix - 1): xylim);
at = atan2(y, x);
atC=at*tcycles/(4*pi);
firstSec=atC<=1 & at>=0;
r=sqrt(xylim*sqrt(x.^2 + y.^2));
rC=r/(4*pi);
circle = rC>=1 & rC<4;
N_loc=(rcycles/2-1)*tcycles/2;
locInd=cell(N_loc,1);
k=0;
for i=1:rcycles/2-1
for j=-tcycles/4:tcycles/4-1
k=k+1;
locInd{k} = find(rC>=i & rC=j & atC
end
end
checks = ((1 + sign(sin(at * tcycles) + eps)...
.* sign(sin(sqrt(xylim*sqrt(x.^2 + y.^2))))) / 2) * (white - black) + black;
Checks = circle .* checks + grey * ~circle;
% The stimulus texture
Checks(rC<0.95 & (abs(x)
% Seq以附件上传
load Seq;
Seq = logical(Seq);
[L_seq,~] = size(Seq);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 每次在循环汇中每次重复该代码
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for i=1:
% tic;
checks = Checks;
ii=mod(i,L_seq)+1;
loc=cell2mat(locInd(Seq(ii,1:N_loc)));
checks(loc) = white - checks(loc);
% toc;
end
想通过更好优化的方法,能够使循环中的计算能够减小至计算机1帧的时间以内。
提前感谢各位能提出建议和给出方法的坛友。
谢谢!!
1575902573(1).jpg
(4.4 KB, 下载次数: 0)
2019-12-9 22:44 上传
2019-12-9 22:47 上传
点击文件名下载附件
24.19 KB, 下载次数: 2
Seq