声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1978|回复: 0

[HHT] Hilbert变换及谱分析

[复制链接]
发表于 2016-5-5 13:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
Hilbert变换是一个很有用的变换,用它来做包络分析更是一种有效的数据处理方法。现用代码测试其变换效果
第一个程序效果如下
1.png
2.png
  1. % Hilbert变换测试
  2. clc
  3. clear all
  4. close all
  5. ts = 0.001;
  6. fs = 1/ts;
  7. N = 200;
  8. f = 50;
  9. k = 0:N-1;
  10. t = k*ts;
  11. % 信号变换
  12. % 结论:sin信号Hilbert变换后为cos信号
  13. y = sin(2*pi*f*t);
  14. yh = hilbert(y);    % matlab函数得到信号是合成的复信号
  15. yi = imag(yh);      % 虚部为书上定义的Hilbert变换
  16. figure
  17. subplot(211)
  18. plot(t, y)
  19. title('原始sin信号')
  20. subplot(212)
  21. plot(t, yi)
  22. title('Hilbert变换信号')
  23. % 检验两次Hilbert变换的结果(理论上为原信号的负值)
  24. % 结论:两次Hilbert变换的结果为原信号的负值
  25. yih = hilbert(yi);
  26. yii = imag(yih);
  27. max(y + yii)
  28. % 信号与其Hilbert变换的正交性
  29. % 结论:Hilbert变换后的信号与原信号正交
  30. sum(y.*yi)
  31. % 谱分析
  32. % 结论:Hilbert变换后合成的复信号的谱没有大于奈氏频率的频谱,即其谱为单边的
  33. NFFT = 2^nextpow2(N);
  34. f = fs*linspace(0,1,NFFT);
  35. Y = fft(y, NFFT)/N;
  36. YH = fft(yh, NFFT)/N;
  37. figure
  38. subplot(211)
  39. plot(f,abs(Y))
  40. title('原信号的双边谱')
  41. xlabel('频率f (Hz)')
  42. ylabel('|Y(f)|')
  43. subplot(212)
  44. plot(f,abs(YH))
  45. title('信号Hilbert变换后组成的复信号的双边谱')
  46. xlabel('频率f (Hz)')
  47. ylabel('|YH(f)|')
复制代码
第二个效果如下
第一个包络测试
3.png
可以看到,此包络分析得到的包络信号频率为20Hz,包络信号的波形为余弦信号的绝对值信号,这是因为计算包络时是取绝对值得到的,从而使信号频率加倍。解决方法是把包络提升,远离0,如下第二个包络。
第二个包络测试
4.png
可以看到Hilbert包络分析可以有效提取包络和调制信号频率,和检波有一样的效果,而且更实用。
第三个包络测试
5.png
这是尝试一个任意形状的包络,可以看到除在边缘处有误差外,整体效果很好。
  1. % 包络分析(高中心频率的窄带信号分析)
  2. % 基于:两个信号乘积的Hilbert变换取决于高频信号的Hilbert变换
  3. clc
  4. clear all
  5. close all
  6. ts = 0.001;
  7. fs = 1/ts;
  8. N = 200;
  9. k = 0:N-1;
  10. t = k*ts;
  11. % 原始信号
  12. f1 = 10;
  13. f2 = 70;
  14. % a = cos(2*pi*f1*t);       % 包络1
  15. a = 2 + cos(2*pi*f1*t);     % 包络2
  16. % a = 1./(1+t.^2*50);       % 包络3
  17. m = sin(2*pi*f2*t);         % 调制信号
  18. y = a.*m;  % 信号调制
  19. figure
  20. subplot(241)
  21. plot(t, a)
  22. title('包络')
  23. subplot(242)
  24. plot(t, m)
  25. title('调制信号')
  26. subplot(243)
  27. plot(t, y)
  28. title('调制结果')
  29. % 包络分析
  30. % 结论:Hilbert变换可以有效提取包络、高频调制信号的频率等
  31. yh = hilbert(y);
  32. aabs = abs(yh);                 % 包络的绝对值
  33. aangle = unwrap(angle(yh));     % 包络的相位
  34. af = diff(aangle)/2/pi;         % 包络的瞬时频率,差分代替微分计算
  35. % NFFT = 2^nextpow2(N);
  36. NFFT = 2^nextpow2(1024*4);      % 改善栅栏效应
  37. f = fs*linspace(0,1,NFFT);
  38. YH = fft(yh, NFFT)/N;           % Hilbert变换复信号的频谱
  39. A = fft(aabs, NFFT)/N;          % 包络的频谱
  40. subplot(245)
  41. plot(t, aabs, t, a, '.')
  42. title('包络的绝对值')
  43. legend('包络分析结果', '真实包络')
  44. subplot(246)
  45. plot(t, aangle)
  46. title('调制信号的相位')
  47. subplot(247)
  48. plot(t(1:end-1), af*fs)
  49. title('调制信号的瞬时频率')
  50. subplot(244)
  51. plot(f,abs(YH))
  52. title('原始信号的Hilbert谱')
  53. xlabel('频率f (Hz)')
  54. ylabel('|YH(f)|')
  55. subplot(248)
  56. plot(f,abs(A))
  57. title('包络的频谱')
  58. xlabel('频率f (Hz)')
  59. ylabel('|A(f)|')
复制代码

回复
分享到:

使用道具 举报

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-1 09:11 , Processed in 0.067102 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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