【发布时间】:2016-02-26 09:06:42
【问题描述】:
我有 2 个 [T,1] 个关于老鼠在多次试验中在线性轨道上来回奔跑的位置和速度向量。
我的目标是“标准化”速度,使得在每个时间 t,新的速度矢量不会反映绝对速度,而是“相对速度”,定义为大鼠在该位置的实际速度与它在该位置的中值(或平均)速度。
这是我当前的代码,但我觉得它的效率非常低,因为 (1) 数值复杂性 (2) 无法“平滑”跨位置的中位数 (3) 需要定义一个“网格”,其分辨率与速度:
%% NOTE, pos=position ranges from 0 to 420 & dir=direction & is either 1/-1
med_speed=speed;
grid=linspace(0,max(pos),200); %make grid of arbitrary spacing
[~,I]=histc(pos,grid);
tic
for i=1:length(grid)
I1=I==i & dir==1; I2=I==i & dir==-1;
med_speed(I1)=median(med_speed(I1));
med_speed(I2)=median(med_speed(I2));
end
toc
norm_speed=speed-med_speed;
%%Plot
subplot(121), plot(pos,speed);
hold on, plot(pos,med_speed,'r','LineWidth',2), hold off
legend('Velocity','Median Velocity at that Position');
xlabel('Position'); ylabel('Speed'); axis tight
subplot(122), plot(pos,norm_speed)
xlabel('Position'); ylabel('Normalized Speed')
得到的图如下。
我觉得有一种方法可以使用 interp1....
任何帮助将不胜感激!谢谢!
【问题讨论】:
标签: matlab signal-processing interpolation normalization