【问题标题】:Removing Implicit Trendline In Matlab在 Matlab 中删除隐式趋势线
【发布时间】: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


    【解决方案1】:

    您可以使用 medfilt1,例如

    med_speed=medfilt1(speed,10);
    

    将计算 10 个连续样本的中位数,贯穿整个时间序列。

    不确定您如何处理标准化中的规模,即通常您会考虑例如某个时期的中位数(或平均值)并除以标准差,以说明数据中不同尺度的可能性。运行平均值和实际值之间的差异可能适用于一只老鼠,但如果您想比较 n 只老鼠,每只老鼠都可以以不同的基本速度执行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-27
      • 1970-01-01
      • 2022-01-14
      相关资源
      最近更新 更多