Hello Mat

 找回密码
 立即注册
查看: 10373|回复: 4

8-EMD端点效应优化(最大相关波形延拓法)(MATLAB视频)

[复制链接]

1323

主题

1551

帖子

0

金钱

管理员

Rank: 9Rank: 9Rank: 9

积分
22647
发表于 2018-9-1 22:21:09 | 显示全部楼层 |阅读模式
8-EMD端点效应优化(最大相关波形延拓法)(MATLAB视频)
百度网盘链接:https://pan.baidu.com/s/1bYIuE0r10SEVqMSWDSTZhg
具体链接在halcom.cn论坛,联系人QQ:3283892722
该论坛是一个学习交流平台,我会逐一的和大家分享学习。
欢迎大家录制视频,你可在论坛进行打赏分享。
视频专用播放器:http://halcom.cn/forum.php?mod=viewthread&tid=258&extra=page%3D1\

  1. % 最大相关波形延拓法
  2. clc,clear,close all % 清理命令区、清理工作区、关闭显示图形
  3. warning off         % 消除警告
  4. format short        % 数据类型
  5. tic                 % 运算计时
  6. %% 初始化信号
  7. [t, signal] = gen_signal(5e3, 1e3);
  8. figure(1), plot(t,signal,'linewidth',1)
  9. xlabel('t');  ylabel('实际信号');  grid on;
  10. %% 最大相关波形延拓法
  11. %% 极值点和过零点位置提取
  12. [indmin, indmax, indzer] = extr(signal, t); % 极值点和过零点位置提取
  13. figure(2), plot(t,signal,'linewidth',1);
  14. hold on
  15. plot(t(indmin), signal(indmin), 'm.-')
  16. plot(t(indmax), signal(indmax), 'r.-')
  17. plot(t(indzer), signal(indzer), 'g.-')
  18. xlabel('t');  ylabel('实际信号');  grid on;
  19. legend('原始信号','极小值','极大值','过零点')
  20. axis tight;
  21. hold off;
  22. %% 最大相关波形延拓法
  23. flag=0;  % =0就是左端点沿拓;=1就是右端点沿拓
  24. signal_corr = maxCorr_find_Si(signal, t, 0);
  25. newdata = signal_corr;
  26. welddata_left = weld( signal, newdata, indmax, 0 );

  27. flag=1;  % =0就是左端点沿拓;=1就是右端点沿拓
  28. signal_corr = maxCorr_find_Si(signal, t, 1);
  29. newdata = signal_corr(end:-1:1);
  30. welddata_right = weld( signal, newdata, indmax, 1 );
  31. welddata = [welddata_left, signal(indmax(1):indmax(end)), welddata_right];

  32. figure(3),hold on
  33. plot(1:length(welddata_left), welddata_left,'r.-');
  34. plot(length(welddata_left)+1: length(welddata_left)+length(signal(indmax(1):indmax(end))),signal(indmax(1):indmax(end)),'b-');
  35. plot(length(welddata)-length(welddata_right)+1:length(welddata),welddata_right,'r.-');
  36. xlabel('t');  ylabel('实际信号');  grid on;
  37. axis tight;
  38. hold off;
复制代码
关键性函数如下:
  1. function signal_corr = maxCorr_find_Si(signal, t, flag)
  2. % 最大相关波形延拓法
  3. if(flag==0)
  4.     k=1;
  5.     [indmin, indmax, indzer] = extr(signal, t); % 极值点和过零点位置提取
  6.     for j=1:length(indmax)
  7.         if(indmax(j)>indzer(1))
  8.             break;
  9.         end
  10.     end
  11.     w0 = signal( indzer(1):indmax(j+1) );
  12.     h0 = signal(indmax(j)) - signal(1);
  13.     for i=2:length(indmax)
  14.         signal = signal + h0-signal(indmax(i));
  15.         [indmini, indmaxi, indzeri] = extr(signal, t); % 极值点和过零点位置提取
  16.         if(isempty(indzeri))
  17.             break;
  18.         else
  19.             for j=1:length(indmaxi)
  20.                 if(indmaxi(j)>indzeri(1))
  21.                     break;
  22.                 end
  23.             end
  24.             w = signal( indzeri(1):indmaxi(j+1) );
  25.             w = imresize(w, size(w0));
  26.             xx = corrcoef( w0, w );
  27.             Corr1(k,1) = xx(1,2);
  28.             w1 = signal( indmaxi(i-1):indmaxi(i) );
  29.             w1 = imresize(w1, size(w0));
  30.             Corr2(k,:) = w1;
  31.             k=k+1;
  32.         end
  33.     end
  34.     [maxP, index] = max(Corr1);
  35.     signal_corr = Corr2(index,:);
  36. elseif(flag==1)
  37.     k=1;
  38.     signal = signal(end:-1:1);
  39.     [indmin, indmax, indzer] = extr(signal, t); % 极值点和过零点位置提取
  40.     for j=1:length(indmax)
  41.         if(indmax(j)>indzer(1))
  42.             break;
  43.         end
  44.     end
  45.     w0 = signal( indzer(1):indmax(j+1) );
  46.     h0 = signal(indmax(j)) - signal(1);
  47.     for i=2:length(indmax)
  48.         signal = signal + h0-signal(indmax(i));
  49.         [indmini, indmaxi, indzeri] = extr(signal, t); % 极值点和过零点位置提取
  50.         if(isempty(indzeri))
  51.             break;
  52.         else
  53.             for j=1:length(indmaxi)
  54.                 if(indmaxi(j)>indzeri(1))
  55.                     break;
  56.                 end
  57.             end
  58.             w = signal( indzeri(1):indmaxi(j+1) );
  59.             w = imresize(w, size(w0));
  60.             xx = corrcoef( w0, w );
  61.             Corr1(k,1) = xx(1,2);
  62.             w1 = signal( indmaxi(i-1):indmaxi(i) );
  63.             w1 = imresize(w1, size(w0));
  64.             Corr2(k,:) = w1;
  65.             k=k+1;
  66.         end
  67.     end
  68.     [maxP, index] = max(Corr1);
  69.     signal_corr = Corr2(index,:);
  70. end
复制代码





本帖子中包含更多资源

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

x
算法QQ  3283892722
群智能算法链接http://halcom.cn/forum.php?mod=forumdisplay&fid=73
回复

使用道具 举报

0

主题

3

帖子

1

金钱

新手上路

Rank: 1

积分
1
QQ
发表于 2020-4-18 16:42:32 | 显示全部楼层
请问这个左右端点的延拓是要分开进行吗?还是就按照您的整个程序就可以成功呢?
回复 支持 反对

使用道具 举报

1323

主题

1551

帖子

0

金钱

管理员

Rank: 9Rank: 9Rank: 9

积分
22647
 楼主| 发表于 2020-4-25 17:13:36 | 显示全部楼层
算法小白3 发表于 2020-4-23 10:16
function  = extr(x,t);
%  = EXTR(x,t) finds extrema and zero-crossings
%

检查变量的维度是否一致,单独调试一下就知道了。
算法QQ  3283892722
群智能算法链接http://halcom.cn/forum.php?mod=forumdisplay&fid=73
回复 支持 反对

使用道具 举报

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

本版积分规则

Python|Opencv|MATLAB|Halcom.cn ( 蜀ICP备16027072号 )

GMT+8, 2024-11-22 16:43 , Processed in 0.268749 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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