Matlab:重新采样非均匀采样信号

时间:2016-09-29 07:32:39

标签: matlab signal-processing

我有3个信号:2个输入和1个输出用于化学过程。每分钟对2个输入进行均匀采样,同时每30分钟对输出进行精确采样,有时每40分钟采样一次或50次等等...

我的输出信号仅关注30分钟的采样输入,而不是超出该输入信号,即每个输入对0到30分钟的输出有一个总响应。

如何在Matlab中对所有内容进行重新采样,以成为一系列30分钟的时间间隔?

2 个答案:

答案 0 :(得分:2)

你想要做的是插值。在一个维度中执行此操作的基本方法是使用interp1。首先阅读the methods并确定哪种方法最符合您的需求。

想象一下val是您的数据点,t是数据采集时间的向量。您可以按如下方式在时间向量T上插入数据:

t = [0 40 80 120 170 220 270];
val = rand(1, 7);
T = min(t):30:max(t);
Method = 'pchip'; % or whatever you prefer
vq = interp1(t, val, T, Method);

这是输出vq的样子:

enter image description here

答案 1 :(得分:1)

似乎这是一个过程控制系统,你应该使用symulink这个想法:

http://es.mathworks.com/company/newsletters/articles/modeling-industrial-chemical-processes-with-matlab-and-simulink-at-hugo-petersen-gmbh.html

这是一个过程控制的pdf教程:

http://homepages.lboro.ac.uk/~cgzkn/processcontrol/simulink4controlnewsinglepage.pdf

提出你的问题,在matlab中你可以使用resample,(也要小心信号的别名),在你的情况下

  

y = resample(x,p,q)重新采样输入序列x,p / q乘以   原始样本率。如果x是矩阵,则重新采样处理每个矩阵   x列作为独立通道。重新采样适用   抗混叠FIR低通滤波器到x并补偿延迟   由过滤器介绍。

所以你有一个信号需要重新采样30 fs1 / fs2((1/60)/(1 /(60 * 30))= 30,在这种情况下你可以这样做:

OutputResampled = resample(outputSignal,30,1)