三次樣條插值擬合信號包絡線


clear;close all;clc

%% 構造信號
t = 0:0.001:1;
y = 2*sin(2*pi*15*t) + 4*sin(2*pi*10*t).*sin(2*pi*t/10) + sin(2*pi*5*t);


%% findpeaks 求極值點
[~,indmax] = findpeaks(y);  % 極大值點
[~,indmin] = findpeaks(-y); % 極小值點

%% 一階差分法求極值點
% d = diff(y);
% d1 = d(1:end-1); % 左差分
% d2 = d(2:end);   % 右差分
% indmax = find(d1>0 & d2<0) + 1; % 極大值點
% indmin= find(d1<0 & d2>0) + 1;  % 極小值點

%% 二階差分法求極值點
% indmax = find(diff(sign(diff(y)))<0)+1; % 極大值點
% indmin = find(diff(sign(diff(y)))>0)+1; % 極小值點

%% 三次樣條插值擬合(包含端點)
s_max = spline([1,indmax,length(y)], [y(1),y(indmax),y(end)], 1:length(y));
s_min = spline([1,indmin,length(y)], [y(1),y(indmin),y(end)], 1:length(y));

%% 繪圖
figure;
plot(t,y,'k',...                    % 原信號
     t(indmax),y(indmax),'ro',...   % 極大值點
     t(indmin),y(indmin),'bo',...   % 極小值點
     t,s_max,'r--',...              % 上包絡線
     t,s_min,'b--');                % 下包絡線

image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM