(36)高分辨率频谱——通过在时域序列后面补零提高频域分辨率 ...

打印 上一主题 下一主题

主题 895|帖子 895|积分 2689


媒介

在实际工程应用中,我们许多时候所能采集的信号并不正好是整周期的。此时若对信号做傅里叶变化,得到的效果中包罗着多种频谱分量,而实际上我们只需要分析主要的频率分量即可。另一方面,假如采集到的信号样本有限,将导致频谱的分辨率不敷高,这也就意味着所得到的主要的频率分量的误差较大。一种有效的处置处罚方法是在有限的信号样本后面补零,然后再举行傅里叶变化得到信号频谱,此时,就可以得到高分辨率的频谱,使所得到的频率分量更加准确。本文将利用MATLAB仿真的方法,给出具体实现方法。

一、仿真分析较少的采集数据

1.MATLAB代码

生成有限信号长度,并举行频谱分析代码如下:
  1. %% 生成余弦波
  2. % 指定信号的参数,频率5Hz,采样频率为32Hz,信号持续时间跨越8个samples。
  3. f = 5;                            % 余弦波的振荡频率,简称频率
  4. fs = 32;                          % 数字信号的采样频率(sampling frequency ),简称采样率
  5. Ts = 1/fs;                        % 采样周期,也即采样值的时间间隔
  6. L = 8;                            % 一个采样值称为一个sample,L为sample的个数
  7. t = (0:L-1)*Ts;                   % 时间向量
  8. x = cos(2*pi*f*t);                % 生成余弦波x
  9. % 画出生成余弦波的时域波形
  10. figure()
  11. plot(t,x,'LineWidth',1.5)
  12. title(['余弦波的时域波形(f=',num2str(f),'Hz,fs=',num2str(fs),' samples/s)'])
  13. grid on
  14. xlabel('t/s')
  15. ylabel('cos(2*pi*f*t)')
  16. %% 单边幅度谱
  17. N = L;                          % N=8
  18. Y = fft(x,N);                   % 信号的傅里叶变换
  19. % 计算信号的双边幅度频谱
  20. P2 = abs(Y/L);
  21. % 计算信号的单边幅度频谱
  22. P1 = P2(1:N/2+1);              % 取出直流到fs/2的频谱分量
  23. P1(2:end-1) = 2*P1(2:end-1);
  24. figure()
  25. stem(0:(fs/N):(fs/2),P1(1:N/2+1),'LineWidth',1.5)    % 画到fs/2对应的点
  26. grid on
  27. title(['余弦波的单边幅度谱(f=',num2str(f),'Hz,fs=',num2str(fs),' samples/s,','N=',num2str(N),')'])
  28. xlabel('频率(Hz)  (单边谱的频率范围0Hz到fs/2)')    % 频率范围0Hz到fs/2
  29. ylabel('频谱幅度|Y|')
复制代码
2.仿真效果

信号波形如下图所示:

直接利用有限的时域信号样本得到的频谱如下图所示:

代码中设置的信号频率是5Hz,由于采集的信号较少,只有8个样本,所以盘算得到的频谱分量并不正确,给出的主要频率分量是4Hz,与真是情况毛病较大。
下面给出提高频率分辨率的方法。
二、高分辨率频谱

1.有限信号样本高分辨率频谱的盘算方法

通过在时域有限信号样本后面补0,在举行FFT变换,可以得到高分辨率频谱。代码如下:
  1. %% 通过在序列后面补0增加时域的数据量,进而提高频谱分辨率
  2. N = 64;                        
  3. Y = fft(x,N);                   % 信号的傅里叶变换。在x后面补0,使新序列长度=N
  4. % 计算信号的双边幅度频谱
  5. P2 = abs(Y/L);
  6. % 计算信号的单边幅度频谱
  7. P1 = P2(1:N/2+1);              % 取出直流到fs/2的频谱分量
  8. P1(2:end-1) = 2*P1(2:end-1);
  9. figure()
  10. stem(0:(fs/N):(fs/2),P1(1:N/2+1),'LineWidth',1.5)    % 画到fs/2对应的点
  11. grid on
  12. title(['余弦波的单边幅度谱(f=',num2str(f),'Hz,fs=',num2str(fs),' samples/s,','N=',num2str(N),')'])
  13. xlabel('频率(Hz)  (单边谱的频率范围0Hz到fs/2)')    % 频率范围0Hz到fs/2
  14. ylabel('频谱幅度|Y|')
复制代码
2.仿真效果

得到的高分辨率频谱如下:

此时,频谱中的主要频率分量是5Hz,和真实的频率一致。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

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

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

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

本版积分规则

刘俊凯

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表