matlab时间序列插值,matlab离散数据三次样条插值

需求:离散数据图像的极值点集得到后,想得到图像"极值点的包络线"。直接用直线连很难看!我们一般会用三次样条插值线来连,很平滑!因为每2点间用3次函数连接。

实现如下:

t为原始采样时间序列,x为对应的振幅序列;

已得到:极大(小)值点所在的时间序列t1(t2),对应的振幅序列x1(x2);

说明:极值点(少)就是插值必过的那些点~

实现:spline(t1,x1,t)

注意:spline第3个参数t是辅助点,理解为在极值点集每两点间又辅助增加一些点,让连的线变成光滑曲线。

以一维离散的地震数据为例:

clear ; clc;

x = xlsread('shuju.xlsx');

x = x(1001:1001+1023)'; % 有效数据长必须是2^n,所以我取1024,最后10几个点是0

N = length(x);

fs = 100; % 采样频率 = 1/采样间隔

t = (0:N-1)/fs; % 时间刻度

[top,local1] = findpeaks(x); % 取极大值

[low,local2] = findpeaks(-x); % 取极小值

t1 = t(local1); % (必过的)极大值主插值点--时间x

x1 = x(local1); % 振幅

t2 = t(local2); % 时间

x2 = x(local2); % (必过的)极小值主插值点--振幅y

xtop = spline(t1, x1, t);

xlow = spline(t2, x2, t); % 三次样条插值结果

figure(1);

h1 = plot(t,x); hold on;

h2 = plot(t, xtop, 'r'); hold on;

h3 = plot(t, xlow, 'g'); hold off;

axis([min(t) max(t) -inf inf]);

legend([h1(1),h2(1),h3(1)],'原始数据', '极大值包络', '极小值包络');

title('原始数据的极大值、极小值包络(三次样条插值)');

xlabel('采样点时间');

ylabel('振幅');

效果:

cb3287daaa11

图1:极值包络线的三次样条插值

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值