Matlab:插值误差
我想对以下曲线进行基于帧的分析,该曲线表示时间和浓度之间的关系(x轴:以分钟为单位的时间;y轴:以Mbq为单位的浓度): 对于上述曲线,我希望通过将曲线拆分为19帧来执行基于帧的采样:Matlab:插值误差,matlab,debugging,sampling,Matlab,Debugging,Sampling,我想对以下曲线进行基于帧的分析,该曲线表示时间和浓度之间的关系(x轴:以分钟为单位的时间;y轴:以Mbq为单位的浓度): 对于上述曲线,我希望通过将曲线拆分为19帧来执行基于帧的采样: 19 frames: 4 frames : Each of 15 seconds time interval 2 frames : Each of 30 seconds time interval 2 frames : Each of 60 seconds time interval 11 frames
19 frames:
4 frames : Each of 15 seconds time interval
2 frames : Each of 30 seconds time interval
2 frames : Each of 60 seconds time interval
11 frames : Each of 200 seconds time interval
我已经为框架分析编写了以下插值函数c_t
是存储上图中表示的信号的位置:
function c_i = Frame_analysis(a1,a2,a3,b1,b2,b3,td,tmax,k1,k2,k3)
t= 0:6:3000; % The original sample time, in seconds
t_i =[0:15:60,90:30:120,180:60:240,440:200:2240];% The interpolated sample time for first 4 frames of 15 second interval
K_1 = (k1*k2)/(k2+k3);
K_2 = (k1*k3)/(k2+k3);
%DV_free= k1/(k2+k3);
c_t = zeros(size(t));
ind = (t > td) & (t < tmax);
c_t(ind)= conv(((t(ind) - td) ./ (tmax - td) * (a1 + a2 + a3)),(K_1*exp(-(k2+k3)*t(ind)+K_2)),'same');
% Y_i = interp1(t,c_t(ind), t_i); % Interpolation for first frame
ind = (t >= tmax);
c_t(ind)=conv((a1 * exp(-b1 * (t(ind) - tmax))+ a2 * exp(-b2 * (t(ind) - tmax))) + a3 * exp(-b3 * (t(ind) - tmax)),(K_1*exp(-(k2+k3)*t(ind)+K_2)),'same');
c_i = interp1(c_t(ind),t_i);% Interpolation for Next consequtive frames
figure;
plot(t_i,c_i);
axis([0 3000 -2000 80000]);
xlabel('Time[secs]');
ylabel('concentration [Mbq]');
title('My signal');
%plot(t,c_tnp);
end
这里有多个问题,如何解决这些问题将由您决定。
这就是我能提供的:
y = 1:2:6;
plot(y);
hold on;
y = 1:1:6;
plot(y);
你会看到区别。这如何适用于你的情况?您可以指定分辨率更高的矢量(
t\u i
,而不是t
),但在plot命令中,您没有为x坐标提供此新矢量c\u t
的定义提供了非常小的值(顺序为10^-77
)。从t>60,输出与0无关。这对插值有何影响?
您指定间隔
[0 60]
的步长为15-这不会给您带来很多分辨率:
您可能希望更改为以下内容:
t_i =[0:0.5:60,90:30:120,180:60:240,440:200:2240];
这将为您提供以下绘图:
axis([0 3000-2000 80000])
远远超过y值的范围,并掩盖了小x的非零数据项这可能只是一个缩放问题吗?在第二个图中,x轴范围为0到3000,而在原始图形中,x轴范围为0到50。此外,在x=50时,您已经处于0-因此对于任何x>50,您可以期望在任何插值后处于0(这是您在第二个图中看到的)。图中有意义的部分可能是非常接近x=0的尖峰。@Schorsch,我已经解决了缩放问题,但我仍然遇到了同样的问题,缩放可以在分钟或秒内完成,是的,尖峰将在tmax时间,大约80秒,如果可能的话,请您告诉我一种方法,我可以将曲线采样到19帧。当我复制/粘贴您的示例时,我得到以下错误:
使用GriddedInterplant时出错-插值要求每个维度至少有两个采样点。
在您第一次计算Y\u i
的行中。问题似乎是,根据您提供的,c_t(ind)
是一个标量(而不是向量)。@Schorsch:我已经重新编辑了代码,请检查它并在什么时候查看?如您所见,我之前的评论比您上次编辑的评论更新。最后一次机会……DayySua请考虑接受这个回答或评论什么对你不起作用。为延迟响应道歉,我失去了我的用户帐户,所以我不能回应你,关于这个问题,我选择了3000秒的时间跨度,因为这是扫描时间,病人经历PET扫描,上图中的特征示踪剂的化学动力学在执行PET扫描时,我对逐帧分析示踪剂的特征感兴趣,因此我需要将示踪剂的动力学行为采样到19帧中,然后将噪声添加到数据中,你的答案不适用于我你所说的答案不是我需要的,确切地说,我需要将输出曲线采样到19帧,每帧都有如上所述的特定持续时间,我必须用采样数据绘制输出特性。。我在你的答案中看到的并不完全是我想要实现的,我在不同的时间点执行插值以获得采样数据,如果您认为我需要以不同的方式处理此问题,请让我知道如何将输出曲线采样为19个不同的采样点frames@DaryushShah我不会也不能解决你的具体问题。我试图回答你问的问题。您正在显示一个似乎不显示插值的绘图。我提供了一个关于您提供的示例的问题的答案。您可以选择您想要的秒数-这不会改变您在问题中显示的数据在60秒后不会发生任何事情的事实。剩下2940秒的零。
t_i =[0:0.5:60,90:30:120,180:60:240,440:200:2240];