[已解决] 问题描述:关于FFT频谱,对仿真信号和实测信号做FFT变化。仿真信号的频谱正确,但是实测信号的频谱无法绘制。请问有大佬能解答一下这个问题吗?

[复制链接]
崔什么崔 发表于 2021-11-9 22:58:39
1.实测信号和仿真信号:
1.1 仿真信号s1
  1. <blockquote>% 仿真信号s1
复制代码
图1 仿真信号s1
图2 仿真信号s1频谱
1.2 实测信号
  1. fs = 5000;        % 采样率
  2. t = 1/fs:1/fs:2; % 采样时间
复制代码
图3 实测信号
图4 实测信号频谱  图5 实测信号频谱细节
2.我所用到的绘制频谱图的函数hua_fft():
  1. % 绘制频谱图
  2. % imf:待分析时域信号
  3. % fs:采样频率
  4. % varargin:频谱的频率范围0到fs/2
  5. % eg :hua_fft (x,1000,0,500);
  6. %
  7. function hua_fft (imf,fs,varargin)
  8. [a,~] = size(imf);
  9. %绘制FFT频谱
  10. nfft =[]; ff=[]; fftx=[]; ps=[];
  11. for i = 1:a
  12. nfft(i,:)= 2^nextpow2(length(imf(i,:)));%找出大于y的个数的最大的2的指数值
  13. ff(i,:)=fs*(0:nfft(i,:)/2-1)/nfft(i,:);%FFT变换后对应的频率的序列
  14. fftx(i,:)=fft(imf(i,:),nfft(i,:));%求FFT变换
  15. ps(i,:)= fftx(i,:).*conj( fftx(i,:))/nfft(i,:);%conj()函数是求y函数的共轭复数,实数的共轭复数是他本身
  16. end
  17. figure;
  18. for i=1:a
  19. subplot(a,1,i);
  20. ww(i,:) = abs(fftx(i,1:nfft/2))*2/nfft(i,:);
  21. plot(ff(i,:),ww(i,:));
  22. ylabel(['IMF' num2str(i) 'A']);
  23. axis([varargin{1} varargin{2} 0 inf ])
  24. % title(['IMF' num2str(i) 'FFT']);
  25. % set(gca,'FontName','Times New Roman','FontSize',6);
  26. % axis auto;
  27. end
  28. end
复制代码



实测信号频谱细节

实测信号频谱细节
45420211109T223846.png
45420211109T223848.png
45420211109T222712.png
s1_1_20210512T220833.png

最佳答案


coolchen302 发表于 2021-11-10 08:48:36
1,你可以把实测信号的直流偏置给扣除,再做fft
2,从波形上来看,实测信号的周期成分并不如仿真信号那么明显,所以频谱没有仿真信号频谱那么分明也是应该的
3,你得把实测信号给上传上来看看

7 条回复


崔什么崔 发表于 2021-11-9 23:15:01
  1. fs=1000;
  2. t=1/fs:1/fs:2;
  3. x1=sin(2*pi*30*t);    % 正弦信号0.8*sin(30*pi*t)
  4. % x1=0.8*sin(30*pi*t);
  5. x2=cos(2*pi*100*t);    % 正弦信号cos(60*pi*t+pi/6)
  6. % x2=cos(60*pi*t+pi/6);  
  7. x3=(t+1).*sin(2*pi*8*t);% 调幅信号
  8. % x3=sin(8*pi*t);
  9. nt=[zeros(1,400),0.5*(2*rand(1,200)-1),zeros(1,300),0.5*(2*rand(1,200)-1),zeros(1,300),0.5*(2*rand(1,200)-1),zeros(1,400)];
  10. % nt=rand(1,2000);           % 服从均匀分布的白噪声
  11. % s1=x1+x2+x3+nt;
  12. s1=x1+x2+x3+nt;
  13. hua_fft (s1,fs,0,150);
复制代码

coolchen302 发表于 2021-11-10 08:48:36
1,你可以把实测信号的直流偏置给扣除,再做fft
2,从波形上来看,实测信号的周期成分并不如仿真信号那么明显,所以频谱没有仿真信号频谱那么分明也是应该的
3,你得把实测信号给上传上来看看
回复此楼

崔什么崔 发表于 2021-11-10 10:05:46
本帖最后由 崔什么崔 于 2021-11-10 10:06 编辑
coolchen302 发表于 2021-11-10 08:48
1,你可以把实测信号的直流偏置给扣除,再做fft
2,从波形上来看,实测信号的周期成分并不如仿真信号那么明 ...

qiaoji.mat (103.56 KB, 下载次数: 1)

coolchen302 发表于 2021-11-10 11:21:28

你这信号确实是看不出频率成分出来啊。。
你最根本的目的是干什么?


崔什么崔 发表于 2021-11-10 11:34:53
coolchen302 发表于 2021-11-10 11:21
你这信号确实是看不出频率成分出来啊。。
你最根本的目的是干什么?
  1.         aver = (sum(kk{1,i})/10000);
  2.         kk{1,i} = kk{1,i} - aver;
复制代码
我对信号进行滤除直流分量的操作后可以分析出同类信号的频谱已经不同类信号在频谱上的区别了,谢谢老哥的节点,已采纳!! 微信截图_20211110112743.png

崔什么崔 发表于 2021-11-10 11:36:48
崔什么崔 发表于 2021-11-10 11:34
我对信号进行滤除直流分量的操作后可以分析出同类信号的频谱已经不同类信号在频谱上的区别了,谢谢老哥的 ...

有个小问题是0Hz哪里,怎么有个很大峰值呢

coolchen302 发表于 2021-11-10 14:16:52
崔什么崔 发表于 2021-11-10 11:36
有个小问题是0Hz哪里,怎么有个很大峰值呢

0Hz就是直流啊,在fft之前,把直流给去除,fft(s-mean(s))
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表