我有3个信号:2个输入和1个输出用于化学过程。每分钟对2个输入进行均匀采样,同时每30分钟对输出进行精确采样,有时每40分钟采样一次或50次等等...
我的输出信号仅关注30分钟的采样输入,而不是超出该输入信号,即每个输入对0到30分钟的输出有一个总响应。
如何在Matlab中对所有内容进行重新采样,以成为一系列30分钟的时间间隔?
答案 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
的样子:
答案 1 :(得分:1)
似乎这是一个过程控制系统,你应该使用symulink这个想法:
这是一个过程控制的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)