0

对于这种类型的数据,我想做一个插值,比如从一个最大值拟合到一个最小值等等,所以我可以寻找叠加的高频:

我有一个值矩阵,例如:

a=[ 3 7 10 3 1 5 10 5  3 2 4 8 10 7 4 3 4 2 1 4 5 7 10 8 7 6 6 4 3 2];

现在我想选择相对值和最大值和最小值,这样

a=[ 3 0 10 0 1 0 10 0  0 2 0 0 10 0 0 0 0 0 1 0 0 0 10 0 0 0 0 0 0 2];

我基本上想拟合一条直线,然后从a(1)to等等,然后从数据中减去拟合。a(3)a(3)a(5)

我知道有一个函数“detrend”使用它表示为“bp”的断点方法,这是我发现的最接近我的目标的东西。

如果您知道 MATLAB 可以做到这一点的方法,我将不胜感激,否则我似乎必须编写一个 m 文件才能做到这一点。

4

1 回答 1

1

我认为您的问题要问的是时间序列的局部最小值局部最大值之间的插值(您称之为“相对最小值和最大值”。)

查看这个类似的问题并添加一些在局部最小值和最大值之间进行线性插值的代码。

interp1()会很方便地做到这一点。输入点或输出点无需均匀分布。

>> x = sort(rand(1,10));
>> y = rand(1,10);
>> plot (x,y,'r.');
>> xx = 0:0.01:1;
>> yy = interp1(x,y,xx);
>> hold on;
>> plot (xx,yy,'b-')

在此处输入图像描述


我认为您真正想要做的是根据本地时间尺度将信号分解为分量。(即频率随时间变化的地方)。使用经验模式分解。小波方法可能是一种替代方法,但 EMD 的输出很容易在视觉上解释。

图片


顺便说一句,如果应用于随时间变化的信号的整个长度,普通 FFT 将不起作用 - FFT 假设一个固定(非变化)信号。

您需要应用短时傅里叶变换,这是在数据的滑动窗口上应用的 FFT,以获得随时间变化的频率图像。见spectrogram()功能。

>> plot (x,y)
>> x=0:0.001:1;
>> y = chirp(x);
>> plot (x,y);
>> figure;
>> spectrogram(y);

在此处输入图像描述

当您的采样率低于数据频率时,短时傅里叶变换的时间与频率分辨率存在问题,限制了其应用。对于您发布图片的示例数据,它不太可能很好地工作。

于 2012-04-25T19:58:14.290 回答