对于单频信号出现频谱泄露的解决办法——整周期采样
什么是整周期采样?
假设正弦信号的频率f0是△f的整数倍,即有f0=a△f,a是整数,满足这一条件采得的数据称为整周期采样。把这一条件再进一步展开,可得
f0/(fs/N)=a
这说明在已知采样频率fs、数据长度N及正弦信号频率f0下,当满足上式时,该数据对f0信号是整周期采样。
在信号处理中,经常会遇到经窗函数截断以后,有的没有发生泄漏,但有的发生了泄漏。
案例、有一个余弦信号,信号频率30Hz,信号为x(t)=cos(2π×30t),采样频率fs=128Hz,样本长度分别取N=128和N=100,在FFT后作谱图并比较谱图中的差别。程序分两部分,程序如下:
clear all; clc; close all;fs=128; % 采样频率
% 第一部分
N=128; % 信号长度
t=(0:N-1)/fs; % 时间序列
y=cos(2*pi*30*t); % 余弦信号
Y=fft(y,N); % FFT
freq=(0:N/2)*fs/N; % 按式(2-2-7)设置频率刻度
n2=1:N/2+1; % 计算正频率的索引号
Y_abs=abs(Y(n2))*2/N; % 给出正频率部分的频谱幅值
% 作图
subplot 211; stem(freq,Y_abs,'k')
xlabel('频率(Hz)'); ylabel('幅值');
title('(a) Fs=128Hz, N=128')
axis([10 50 0 1.2]); % 第二部分
N1=100; % 信号长度
t1=(0:N1-1)/fs; % 时间序列
y1=cos(2*pi*30*t1); % 余弦信号
Y1=fft(y1,N1); % FFT
freq1=(0:N1/2)*fs/N1; % 按式(2-2-7)设置频率刻度
n2=1:N1/2+1; % 计算正频率的索引号
Y_abs1=abs(Y1(n2))*2/N1; % 给出正频率部分的频谱幅值
% 作图
subplot 212; stem(freq1,Y_abs1,'k')
xlabel('频率(Hz)'); ylabel('幅值');
title('(b) Fs=128Hz, N=100')
axis([10 50 0 1.2]); hold on
line([30 30],[0 1],'color',[.6 .6 .6],'linestyle','--');
plot(30,1,'ko','linewidth',5)
set(gcf,'color','w');
运行结果如下:
在程序两部分中用相同的信号,中心频率f0=30,采样频率fs=128,差别仅是FFT的长。在N=128的谱图上只在30Hz处有一条谱线,其他频点的幅值都为0;而在N=100的谱图上有明显的泄漏现象,谱线用黑实线表示。最大两根谱线在30Hz两侧,图中用虚线和黑圈点表示了30Hz的频率点。为什么当N=128时FFT后没有泄漏,而当N=100时FFT后就有泄漏?
分析:可知在加矩形窗之后,单一频率信号的频谱图表达式为
已不是一个单一的δ函数,而是有泄漏的存在。设信号是频率为f0,当取信号为整周期采样时,信号的频率f0=a△f,a=k,f0将与某一条谱线相重合,如同程序第一部分表示的那样,即第k条谱线频率为f0。整周期采样后得到的幅值谱图如图(a)和下图所示。
在整周期采样后得到的XT(w),一样存在着泄漏的可能性,但由于信号频率f0与第k条谱线重合,k±i(i为整数值)的任意谱线正好落在XT(w)的零点上,所以在谱图中就没有显示泄漏现象。
当取信号为非整周期采样时,信号的频率f0不与FFT后某一条谱线重合,而是像案例的程序第二部分表示的那样,f0落在两条谱线的中间,例如落在第k和k+1条谱线之间,其中第条谱线是局部极大值,如图(b)和下图所示。
在非整周期采样时得到的XT(w),一样存在着泄漏的可能性,由于信号频率f0在两条谱线之间,第k条谱线虽是局部的最大值,但不与f0相重合,则k±i(i为整数值)的任意谱线都是XT(w)函数上的非零值,所以在谱图中存在泄漏现象。
为了防止泄漏,对于单频信号可以调整采样频率使之构成整周期采样(例如在电力监测设备中,有的会用锁相技术跟踪信号频率以调整采样频率),但大多数实际信号处理中的信号不是单频(或单频+谐波),而是多频率的,所以泄漏是难免的。在有泄漏的情形中只能想方设法减小泄漏的影响,比如利用窗函数。虽然上述已在截断的讨论中加了矩形窗函数,但矩形窗函数的泄漏是最大的,还有其他窗函数能更好地减少泄漏。
参考文献:MATLAB数字信号处理85个实用案例精讲——入门到进阶;宋知用(编著)
对于单频信号出现频谱泄露的解决办法——整周期采样相关推荐
- 有关FFT频谱泄露与整周期采样问题v1.0(待修)
Title:有关FFT频谱泄露与整周期采样问题的总结整理内容 Date:2022.6.21 //内容部分为从网上摘抄整理,未含有严谨的数学证明,较为易懂. 在实际的数字信号分析中,我们处理的数据都 ...
- 单频信号的相位谱计算与误差修正-附Matlab代码
一.问题描述 我们在实际处理时经常遇到只有一个正弦信号的情况,其频率为 f 0 {{f}_{0}} f0,在谱分析以后,除了在频率为 f 0 {{f}_{0}} f0处有相位数值外,其他频率处都有 ...
- PHP中表单没有问题但是$_FILES为空的解决办法
PHP中表单没有问题但是$_FILES为空的解决办法 参考文章: (1)PHP中表单没有问题但是$_FILES为空的解决办法 (2)https://www.cnblogs.com/sanqiyi/p/ ...
- php502bad gateway,PHP表单提交后出现502 bad gateway解决办法
搜索热词 <PHP表单提交后出现502 bad gateway解决办法>要点: 本文介绍了PHP表单提交后出现502 bad gateway解决办法,希望对您有用.如果有疑问,可以联系我们 ...
- 在MFC框架下使用osg报内存泄露的解决办法
作者:朱金灿 来源:http://blog.csdn.net/clever101/ 最近正在学习osg,从osgchina网站下下载了osg的debug版本库,具体地址为: OpenSceneGrap ...
- linux网卡强制5G频率,用户反馈称Deepin 20对某些WIFI的5G信号无法接收,附解决办法...
有些用户在Deepin 20系统中使用无线连接上网,但是有反馈称:某些WIFI的5G信号无法接收/识别,有些人的则是能够识别到,并显示在无线列表中,如下图所示.以下附上评论及解决办法. 用户评论 1. ...
- 下拉菜单被表单、图片、FLASH挡住的解决办法
设置Flash的参数: <param name="wmode" value="opaque"> <object classid="c ...
- 表单提交 参数为中文时乱码解决办法
表单代码: <form class="well form-search" id="searchInfoForm" target="_blank& ...
- EasyCVR平台安全扫描提示Go pprof调试信息泄露的解决办法
我们在此前的博文中和大家分享过关于GO中pprof调试会提示信息泄露的处理办法,感兴趣的用户可以翻阅我们往期的文章进行了解.近日在多个EasyCVR使用现场中,用户进行安全扫描时,均反映了如下的漏洞情 ...
最新文章
- jsp打印日志完整配置
- CSS中块级格式化上下文(BFC)的特性与应用
- APP自动化测试系列之获取Android的Activity 和 Package
- 一头感动了全中国的“猪”!感动了全世界!泪奔
- html 前端传入后台为object_浅谈Object.defineProperty()
- 启动时不自动打开一个空文档
- oracle job 与存储过程,讲解Oracle中JOB与存储过程的接合用法
- C#把Xml转换为DataSet的两种方法
- VS出现error LNK2005,error C4430,error C2011
- 计算机毕业论文中期论文质量,计算机 毕业论文(设计)中期报告(1页)-原创力文档...
- 《Rework》摘录及感想
- 手机版支付宝html页面,支付宝手机网页支付代码
- Android intent.Action 参数值及对应功能介绍(转)
- sh股票是什么意思?
- Linux下看股票行情的绿色小软件
- tkintertools 模块实战一:任务清单小工具
- 如何获取主机名和当前登录用户名
- 【2023秋招】10月9日字节跳动校招题目
- java2048小游戏源码及解析_200行java代码实现2048小游戏
- Log4j2的MDC详解