声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3683|回复: 7

[HHT] 信号EMD分解后得到各个IMF分量的频谱图怎么不对的,请高手帮忙哦

[复制链接]
发表于 2011-5-5 16:18 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 小刺猬和小老鼠 于 2011-5-5 16:21 编辑

对信号X进行EMD分解后得到各个IMF分量,然后求解各个IMF分量的频谱,代码:
  1. function hua_fft(y,fs,style,varargin)
  2. %当style=1,画幅值谱;当style=2,画功率谱;当style=其他的,那么花幅值谱和功率谱
  3. %当style=1时,还可以多输入2个可选参数
  4. %可选输入参数是用来控制需要查看的频率段的
  5. %第一个是需要查看的频率段起点
  6. %第二个是需要查看的频率段的终点
  7. %其他style不具备可选输入参数,如果输入发生位置错误
  8. nfft= 2^nextpow2(length(y));%找出大于y的个数的最大的2的指数值(自动进算最佳FFT步长nfft)
  9. %nfft=1024;%人为设置FFT的步长nfft
  10.   y=y-mean(y);%去除直流分量
  11. y_ft=fft(y,nfft);%对y信号进行DFT,得到频率的幅值分布
  12. y_p=y_ft.*conj(y_ft)/nfft;%conj()函数是求y函数的共轭复数,实数的共轭复数是他本身。
  13. y_f=fs*(0:nfft/2-1)/nfft;%DFT变换后对应的频率的序列
  14. % y_p=y_ft.*conj(y_ft)/nfft;%conj()函数是求y函数的共轭复数,实数的共轭复数是他本身。
  15. if style==1
  16.     if nargin==3
  17.         plot(y_f,2*abs(y_ft(1:nfft/2))/length(y));%matlab的帮助里画FFT的方法
  18.         %ylabel('幅值');xlabel('频率');title('信号幅值谱');
  19.         %plot(y_f,abs(y_ft(1:nfft/2)));%论坛上画FFT的方法
  20.     else
  21.         f1=varargin{1};
  22.         fn=varargin{2};
  23.         ni=round(f1 * nfft/fs+1);
  24.         na=round(fn * nfft/fs+1);
  25.         plot(y_f(ni:na),abs(y_ft(ni:na)*2/nfft));
  26.     end

  27. elseif style==2
  28.             plot(y_f,y_p(1:nfft/2));
  29.             %ylabel('功率谱密度');xlabel('频率');title('信号功率谱');
  30.     else
  31.         subplot(211);plot(y_f,2*abs(y_ft(1:nfft/2))/length(y));
  32.         ylabel('幅值');xlabel('频率');title('信号幅值谱');
  33.         subplot(212);plot(y_f,y_p(1:nfft/2));
  34.         ylabel('功率谱密度');xlabel('频率');title('信号功率谱');
  35. end
  36. end
复制代码
这个是到论坛上找到的一个程序,可出来效果怎么不对呢。
信号为:X = sin(100.*pi.*t) +sin(140.*pi.*t)+0.4.*sin(180.*pi.*t) + 0.9.*sin(200.*pi.*t) + sin(240.*pi.*t) + sin(280.*pi.*t);
求解出来的IMF频谱图怎么不对呢?求高手指点。谢谢!

1.jpg

本帖被以下淘专辑推荐:

回复
分享到:

使用道具 举报

 楼主| 发表于 2011-5-5 16:19 | 显示全部楼层
额 ~~~~新手,图片怎么上传上来都不清楚
发表于 2011-5-14 19:26 | 显示全部楼层
回复 1 # 小刺猬和小老鼠 的帖子

对每个IMF运用傅里叶变换就能出来频谱图的,你试着写一下,不难的。
 楼主| 发表于 2011-5-15 20:57 | 显示全部楼层
回复 3 # chenlu1986 的帖子

我上面的频谱图就是傅里叶变换的出来的哦,可下哦哪个图形看怎么不对呢?IMF1频谱图应该只在120HZ处出现谱峰,其他地方没得谱峰才对哦,或者说其他地方谱峰很小才对。我这个IMF1里面在100、120、140都出现了不相上下的谱峰。这个有什么办法解决呢?
发表于 2011-5-16 09:39 | 显示全部楼层
回复 4 # 小刺猬和小老鼠 的帖子

可能是你的组合信号的几个频率离的太近啦~
你做实验可以先尝试着用几个频率较不接近的去用EMD分开看结果。
 楼主| 发表于 2011-5-17 09:00 | 显示全部楼层
回复 5 # chenlu1986 的帖子

哦,这个原因哦,我尝试哈吧。
发表于 2011-9-2 19:53 | 显示全部楼层
回复 1 # 小刺猬和小老鼠 的帖子

你好,可以把你画出上面频谱图的Matlab程序贴出来吗,谢谢
 楼主| 发表于 2011-9-21 15:35 | 显示全部楼层
回复 7 # 南宫轩宇 的帖子

上面贴出来的就是代码哈
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-25 19:20 , Processed in 0.064028 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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