【发布时间】:2016-09-29 07:32:39
【问题描述】:
我有 3 个信号:用于化学过程的 2 个输入和 1 个输出。 2 个输入每分钟均匀采样,而输出应每 30 分钟精确采样一次,我有时每 40 分钟或 50 分钟采样一次……
我的输出信号只关心 30 分钟的采样输入,而不是超过那个,即每个输入对 0 到 30 分钟的输出都有一个总响应。
如何重新采样 Matlab 中的所有内容,使其成为一系列 30 分钟的时间块间隔?
【问题讨论】:
我有 3 个信号:用于化学过程的 2 个输入和 1 个输出。 2 个输入每分钟均匀采样,而输出应每 30 分钟精确采样一次,我有时每 40 分钟或 50 分钟采样一次……
我的输出信号只关心 30 分钟的采样输入,而不是超过那个,即每个输入对 0 到 30 分钟的输出都有一个总响应。
如何重新采样 Matlab 中的所有内容,使其成为一系列 30 分钟的时间块间隔?
【问题讨论】:
您想要做的是插值。在一维中做到这一点的基本方法是使用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 的样子:
【讨论】:
这似乎是一个过程控制系统,你应该使用 symulink 认为:
这是一个过程控制的pdf教程:
http://homepages.lboro.ac.uk/~cgzkn/processcontrol/simulink4controlnewsinglepage.pdf
提出您的问题,在您的情况下,您可以在 matlab 中使用resample,(还要注意信号的混叠)
y = resample(x,p,q) 以 p/q 乘以 原始采样率。如果 x 是一个矩阵,则 resample 处理每个 x 列作为独立通道。重采样应用 抗混叠 FIR 低通滤波器到 x 并补偿延迟 由过滤器引入。
所以你有一个信号需要重新采样 30 fs1/fs2 ((1/60) / (1/(60*30)) = 30,在这种情况下你可以这样做:
OutputResampled = resample(outputSignal,30,1)
【讨论】: