使用新时间阵列

时间:2017-12-13 19:30:08

标签: matlab signals signal-processing

我问的是我的查询的升级版和更有针对性的版本,因为我认为在上一次查询中我仍无法正确解释。

我想基于新的时间数组down sample我的信号。

我有time arraysample array

t = [0 2 3 7 8 9 10 11 12 17 18 19 20];

A = [0 0 1 2 3 5.2 0 -1.4 0 2 2.7 2 2.3];

新时间数组是:

Tx = 1:4:25;

我正在使用Andrei Davydov提出的关于stackoverflow的插值,但我认为我有点错。

有人能指出我有错的地方吗?非常感谢。

如果A的值在Tx与w.r.t(t)相同,则使用该值,如果没有找到值,则插值并将该值分配给新时间。

示例代码:

t = [0 2 3 7 8 9 10 11 12 17 18 19 20 ];
A = [0 0 1 2 3 5.2 0 -1.4 0 2 2.7 2 2.3 ];
plot(t,A)
Tx = 1:4:25;
B = interp1(t,A,Tx); %re-make example data to have decimal points on the x-axis
 y = resample(B, 1, 2); 
 T = 0.05;
 Ty = T / (1 / 2); 
 ty = (0:length(y)-1)*Ty;
figure 
plot(Tx,B,'b')
hold on
plot(ty,y,'r')
plot(t,A,'g')
hold off

此处附有我之前提问的链接。

Resampling of time signal in MATLAB

注意:

这正是我想要的,所以这更加清晰和成熟。

我正在使用MATLAB版本2012b所以请为我提供解决方案w.r.t,因为很少有Matlab内置命令在2012b中不起作用。

1 个答案:

答案 0 :(得分:1)

主要你的问题 - 你试图推断,因为原始时间结束于20,但你的结束时间为25.尝试此代码:

clc
t = [0 2 3 7 8 9 10 11 12 17 18 19 20 ];
A = [0 0 1 2 3 5.2 0 -1.4 0 2 2.7 2 2.3 ];

Tx = 1:4:25; % Are you sure you want to extrapolate?
              % max(Tx1)>max(t)

% This variant is WITHOUT extrapolation
B = interp1(t,A,Tx);
% This variant is WITH extrapolation and WHOLE time-series interpolated
% cubically
extrapBcub=interp1(t,A,Tx,'pcchip');
% If you want to have linear (default) interpolation, but cubic
% extrapolation then
extrapBlin=[B(~isnan(B)), extrapBcub(isnan(B))];

它给出了下图:

f=figure('Position',[50 50 1500 800])
h1=subplot(1,2,1);
hold all
h(1)=plot(t,A,'-ok','LineWidth',3)
h(2)=plot(Tx,B,'-ob','LineWidth',9)
h(3)=plot(Tx,extrapBcub,':or','LineWidth',7)
h(4)=plot(Tx,extrapBlin,'-og','LineWidth',3)
xlabel('time')
ylabel('signal')
set(gca,'Box','off','Color','none','FontSize',14,'LineWidth',2)
legend({'Original data','No extrapolation','Cubic all',...
    'Linear interpolation+cubic extrapolation'},'Location','SouthOutside',...
    'FontSize',22)
legend boxoff
h2=subplot(1,2,2);
hold all
h3 = copyobj(h(end:-1:1), h2) % copy plots just for scaling
ylim([-2 6])
xlabel('time')
ylabel('signal')
set(gca,'Box','off','Color','none','FontSize',14,'LineWidth',2)

enter image description here