请选择 进入手机版 | 继续访问电脑版

Hello Mat

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 390|回复: 2

5-EMD端点效应优化(三角形波沿拓)(MATLAB视频)

[复制链接]

690

主题

812

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
29468
发表于 2018-8-12 23:09:34 | 显示全部楼层 |阅读模式
5-EMD端点效应优化(三角形波沿拓)(MATLAB视频)
百度网盘链接:https://pan.baidu.com/s/14oxeJg7io_QYPMAWbi5oWA
具体链接在halcom.cn论坛,联系人QQ:3283892722
该论坛是一个学习交流平台,我会逐一的和大家分享学习。
欢迎大家录制视频,你可在论坛进行打赏分享。
视频专用播放器:http://halcom.cn/forum.php?mod=viewthread&tid=258&extra=page%3D1\
主程序如下:
  1. clc,clear,close all % 清理命令区、清理工作区、关闭显示图形
  2. warning off         % 消除警告
  3. format short        % 数据类型
  4. tic                 % 运算计时
  5. %% 初始化信号
  6. [t, signal] = gen_signal(5e3, 1e3);
  7. figure(1), plot(t,signal,'linewidth',1)
  8. xlabel('t');  ylabel('实际信号');  grid on;
  9. %% 相似三角波沿拓
  10. %% 极值点和过零点位置提取
  11. [indmin, indmax, indzer] = extr(signal, t); % 极值点和过零点位置提取
  12. figure(2), plot(t,signal,'linewidth',1);
  13. hold on
  14. plot(t(indmin), signal(indmin), 'm.-')
  15. plot(t(indmax), signal(indmax), 'r.-')
  16. plot(t(indzer), signal(indzer), 'g.-')
  17. xlabel('t');  ylabel('实际信号');  grid on;
  18. legend('原始信号','极小值','极大值','过零点')
  19. axis tight;
  20. hold off;
  21. %% 相似三角波沿拓
  22. % 左端点沿拓
  23. [ S_index, index ] = find_Si( signal, indmin, indmax, 0 );
  24. newdata = signal( indmax(index-2):S_index );
  25. welddata_left = weld( signal, newdata, 0 );
  26. % 右端点沿拓
  27. [ S_index, index ] = find_Si( signal, indmin, indmax, 1 );
  28. newdata = signal( S_index: indmin(index+2) );
  29. welddata_right = weld( signal, newdata, 1 );

  30. welddata = [welddata_left, signal, welddata_right];

  31. figure(3),hold on
  32. plot(1:length(welddata_left), welddata_left,'r.-');
  33. plot(length(welddata_left): length(welddata_left)+length(signal)-1 ,signal,'b-');
  34. plot(length(welddata)-length(welddata_right)-1:length(welddata)-2,welddata_right,'r.-');
  35. xlabel('t');  ylabel('实际信号');  grid on;
  36. axis tight;
  37. hold off;
复制代码
匹配函数:
  1. function [ S_index, indmin_index ] = find_Si( signal, indmin, indmax, flag )
  2. % 相似三角波沿拓
  3. if(flag==0)   % 左端点沿拓
  4.    % 左端点
  5.    x1 = 1;          y1 = signal(x1);  % S
  6.    x2 = indmax(1);  y2 = signal(x2);  % U
  7.    x3 = indmin(1);  y3 = signal(x3);  % V
  8.    S1U1 = abs( (x2-x1)^2+(y2-y1)^2 );
  9.    S1V1 = abs( (x3-x1)^2+(y3-y1)^2 );
  10.    U1V1 = abs( (x3-x2)^2+(y3-y2)^2 );
  11.    % 匹配相似波
  12. %    t = min( [indmin(1), indmax(1)] );
  13.    percentage = [];
  14.    k = 1;
  15.    for i=2:min( [length(indmin), length(indmax)] )
  16.        x2 = indmax(i);  y2 = signal(x2);  % U
  17.        x3 = indmin(i);  y3 = signal(x3);  % V
  18.        for j=indmax(i-1):indmax(i)
  19.            x1 = j;       y1 = signal(x1);  % S
  20.            SiUi = abs( (x2-x1)^2+(y2-y1)^2 );
  21.            SiVi = abs( (x3-x1)^2+(y3-y1)^2 );
  22.            UiVi = abs( (x3-x2)^2+(y3-y2)^2 );
  23.            percentage(k, 1) = S1U1*UiVi - SiUi*U1V1;
  24.            percentage(k, 2) = i;
  25.            percentage(k, 3) = j;
  26.            k=k+1;
  27.        end
  28.    end
  29.    [minP, index] = min( abs( percentage(:,1) ) );
  30.    indmin_index = percentage(index, 2);
  31.    S_index = percentage(index, 3);
  32. elseif(flag==1)   % 右端点沿拓
  33.    % 右端点
  34.    x1 = length(signal);   y1 = signal(x1);  % S
  35.    x2 = indmax(end);      y2 = signal(x2);  % U
  36.    x3 = indmin(end);      y3 = signal(x3);  % V
  37.    S1U1 = abs( (x2-x1)^2+(y2-y1)^2 );
  38.    S1V1 = abs( (x3-x1)^2+(y3-y1)^2 );
  39.    U1V1 = abs( (x3-x2)^2+(y3-y2)^2 );
  40.    k1 = (y2-y1)./(x2-x1+eps);
  41.    k2 = (y3-y1)./(x3-x1+eps);
  42.    % 匹配相似波
  43.    percentage = [];
  44.    k = 1;
  45.    for i=min( [length(indmin), length(indmax)] )-1 : -1 : 1
  46.        x2 = indmax(i);  y2 = signal(x2);  % U
  47.        x3 = indmin(i);  y3 = signal(x3);  % V   
  48.        for j=indmax(i):indmin(i+1)
  49.            x1 = j;     y1 = signal(x1);   % S
  50.            SiUi = abs( (x2-x1)^2+(y2-y1)^2 );
  51.            SiVi = abs( (x3-x1)^2+(y3-y1)^2 );
  52.            UiVi = abs( (x3-x2)^2+(y3-y2)^2 );
  53.            k11 = (y2-y1)./(x2-x1+eps);
  54.            k22 = (y3-y1)./(x3-x1+eps);
  55. %            percentage(k, 1) = S1U1*UiVi - SiUi*U1V1;
  56.            percentage(k, 1) = abs( (k1-k11)^2+(k2-k22)^2 );
  57.            percentage(k, 2) = i;
  58.            percentage(k, 3) = j;
  59.        end
  60.    end
  61.    [minP, index] = min( abs( percentage(:,1) ) );
  62.    indmin_index = percentage(index, 2);
  63.    S_index = percentage(index, 3);
  64. end
复制代码






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
程序:算法QQ  3283892722
群智能算法视频:X元,链接http://halcom.cn/forum.php?mod=forumdisplay&fid=73
回复

使用道具 举报

0

主题

1

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2019-5-10 16:34:46 | 显示全部楼层
请教,weld函数无法定义怎么办?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


Python|Opencv|MATLAB|Halcom.cn  

GMT+8, 2019-5-19 22:20 , Processed in 0.129947 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表