频谱为什么会泄漏?
moboyou 2025-05-13 21:58 36 浏览
#知识青年# 更多通信类文章,在点击班长:主页→“文章”
频谱会泄漏?
频率的定义:物质在1s内完成周期性变化的次数叫做频率,常用f表示。
在通信与信号处理中的频谱,主要通过傅里叶级数和傅里叶变换得到。
其中满足狄里赫利条件的周期信号可以分解为若干不同频率的正弦波。这些正弦波中,频率最低的称为信号的基波,其余称为信号的谐波。以谐波的频率为横坐标,幅值(大小)为纵坐标,绘制的系列图,称为频谱。频谱能够准确反映信号的内部构造。见图1。
你见与不见,频谱就在那里
有一种情况,我们需要考虑。
那就是当我们用计算机处理信号之时,总会截取一段信号。
这很容易理解,因为你不能分析无限长的周期信号。即使是非周期信号,也只能截取一小段。
这还与传感器灵敏度和存储器容量有关。
那么问题就来了,我们用截取的信号去做频谱分析,那么得到的频谱是截取信号的。并不是原始信号的。
这两者频谱之前的差别,可以看做是泄漏。
官方的解释是这样的:
信号为无限长序列,运算需要截取其中一部分(截断),于是需要加窗函数。加了窗函数相当于时域相乘,也相当于频域卷积,于是频谱中除了本来该有的主瓣之外,还会出现本不该有的旁瓣,这就是频谱泄露!为了减弱频谱泄漏,可以采用加权的窗函数,加权的窗函数包括平顶窗、汉宁窗、高斯窗等等。而未加权的矩形窗泄漏最为严重。
这个解释,涉及到时域、频域、窗函数、卷积、主瓣、旁瓣等抽象概念。
但是意思和我的解释一样。
直观的表示
在现实中,信号是测量工具测量得到的,必然具有时间限制,超出测量间隔的信号不能被知道。
例如,如果测量一个无限长的正弦波连续序列,在某个时候,我们需要终止我们的观测来做进一步的分析。
除了其他因素外,测量系统本身的限制(例如:缓冲区大小)也对时间造成了限制。
图4为一个无限长的周期信号,现在我们选取一段信号,图4中为黑色虚线中间的信号,作为分析信号。
频谱分析通常使用快速傅里叶FFT函数,具体可以参考我之前的文章,见文章最后。
FFT实际上是假设信号在测量的间隔之周期重复,因此FFT假设信号是连续的(在概念上或者在存储器内,重复地并列测量信号)。
这导致假定信号中的缺陷(见图4中箭头部分),就是尖锐部分,会在时间域内不断的重复。
而这些尖锐的不连续性将在频域中扩散,导致频谱与原始的信号的频谱不一致.
这种不一致,直观的看,就像泄漏一样。
现在再举一次正弦波的例子,见图5。
图5为Matlab软件绘制。
左上方为正弦序列,频率为3Hz,周期为1/3秒,序列总时长为1秒钟。
在1秒钟内,正好完整的3个周期。
这个序列为单一频率3Hz,没有其他谐波频率。
对其进行FFT分析,必然在频率轴3Hz处有幅度值谱线。在0 1 2 4 5 6Hz频率处幅度值为0。
现在略微调整,序列总时长还是1秒钟,频率改为2.5Hz,周期为1/2.5=0.4秒,那么正好有2.5个周期。
这个序列为单一频率2.5Hz,是不是它的频谱线在2,5Hz处呢?
看右下图,很明显不是。
频率还是分布在0 1 2 3 4 5 6Hz这些整数倍的频率处,却都有一定的幅度值了。
如果把2.5Hz的正弦序列展开,可以看到更清楚,如图6所示。
图6中已经不是一个连续的正弦序列了,而是在1s、2s、…等整数秒处都会有不连续。
这些不连续隐藏着其他频率,就会带入到频域中去。
和抽样点N数有关?
考虑频率f_x=10Hz的纯正弦信号,并在计算机内存中表示,该信号被观察1秒,采样频率f_s=100Hz。
现在,缓冲器中将有100个样本,缓冲器包含波形周期的整数倍,在这种情况下是10个周期。
用n点DFT对信号样本进行了分析。
这里考虑了两种情况进行研究:
- FFT大小n与信号样本的长度相同,即n=100;
- FFT大小设置为2的下一次幂,该次幂符合信号样本,即n=128;
结果绘制如下:
为什么频谱在n=100时和n=128时,在10Hz附近会有一个明显的尖峰。
这是由于不同的频率分辨率——分辨不同、相邻频率能力的度量。
对于情况1,频率分辨率为△f=f_s/n =100/10=1Hz。这意味着频率间隔1赫兹,所以比较在整数10Hz处有峰值。
对于情况2,频率分辨率为△f=f_s/128=100/128=0.7813Hz。在这种频率分辨率下,频率图7的x轴不能具有10Hz的精确值。
相反,最近的相邻频率间隔分别为9.375Hz和10.1563Hz。
因此,频谱不能表示10Hz处的值,信号的能量被泄漏到相邻的频率点处,导致频谱泄漏。
理论分析
要想理解DFT或者FFT,图8是我每次必放的图形。
这幅图就是离散傅里叶级数、离散傅里叶变换的形象展示。
时域、频域都是离散的,
时域的周期为T1,对应频域的△f为图中的f1,△f = f1=1/T1;
时域的采样周期为Ts,对应频域的周期为fs=1/Ts;
且采样频率fs/f1=fs/△f=N,N为主值区间的点数,就是常说的多少多少点FFT。
fs、△f、N这三者的取值,会影响频谱的形状与是否泄漏。
图9 为频谱泄漏的示意图。
参考文献
[1]为了便于计算机处理,离散傅里叶变换DFT就是这样被定义出来
[2]傅里叶变换FT-FS-DTFT-DFS复杂?理解了离散周期的概念,就懂了!
[4]https://www.gaussianwaves.com/2011/01/fft-and-spectral-leakage-2/
[5]https://community.sw.siemens.com/s/article/windows-and-spectral-leakage
更多精彩内容,欢迎关注微信公众号或者头条号:通信M班长。
看到这里,帮忙点个赞吧。
欢迎在评论区留言讨论。
相关推荐
- 软件下载超级合集(软件大集合)
-
注:AutoCAD软件解压密码均为:www.cadzxw.com(网址就是解压密码)AutoCAD2004:链接:http://pan.baidu.com/s/1i5yL4UT密码:wpxcAutoC...
- Discuz! Database Error(discuzdatabaseerror怎么解决)
-
(1017)Can'tfindfile:'./xyw/common_syscache.frm'(errno:13)SELECT*FROMcommon_syscacheWHERE`...
- 想在天上赏月?最全攻略来了(形容在天上赏月)
-
“但愿人长久,千里共婵娟。”赏月,是中秋夜的传统习俗之一。在地上赏月,或许人们已经习以为常,但在天上赏月又是怎样一番景象?记者梳理发现,为了满足广大旅客“上九天摘星揽月”的需求,春秋航空、南方航空等多...
- APP检测:安卓系统四大组件介绍(安卓的四大组件是什么?分别有什么作用?)
-
1、Activity组件漏洞Activity是Android组件中*基本也是*为常见用的四大组件之一,是一个负责与用户交互的组件。Activity组件中存在以下常见的漏洞。(1)activity绑定b...
- Markdown + 文档管理 + 静态网页生成,集大成的 Markdown 应用:MWeb
-
上周给大家推荐了Typora,作为一款纯粹的Markdown应用来说,它的各种功能和细节可以说已经相当极致,然而,Ulysses用户表示:我们想要的不仅仅是Markdown。是的,Markdo...
- Istio多集群实践(多集群架构)
-
为了实现应用高并发和高可用,企业通常会选择将应用部署在多个地域的多个集群,甚至多云、混合云环境中。在这种情况下,如何在多个集群中部署和管理应用,成为了一个挑战,当然多集群方案也逐步成为了企业应用部署的...
- 源码建站的流程是什么(有源码怎么建站)
-
1.选择适合自己需求的源码:在进行源码建站前,需要根据自己的需求选定一款适合自己的源码,一般建议选择流行度较高、稳定性较好的开源程序,如WordPress、Discuz等。2.下载源码:根据选择的...
- 论坛站长福利!积分墙Discuz插件火爆上线!
-
一款新型的Discuz插件正在火爆袭来,克服种种插件的弊端,全新打造,让你成为最成功最轻松的赚钱能手,这就是积分墙Discuz插件。积分墙Discuz插件(http://www.jifenqiang....
- 2020年了,公司还有必要做企业网站吗?网站开发是否过时呢
-
作为一个以网站开发起步的程序员,回想起来,曾经为不少客户做了网站。而我自己的网站已经六七年没有更新了,本想重新设计升级,但一直忙于做客户的系统开发,自己的网站就一直不管了,反正也没什么用,做得好还经常...
- 放大招,这才是低代码真正的形态PHP工作流引擎
-
放大招,这才是低代码真正的形态。来点干货,今天上点重头戏。表单设计中其实相对还是比较复杂的,比如常见的脚本,比如要控制一个默认的数值,大家可以看平台能够做到页面可以想输,输出什么?添加的时候进行操作。...
- OA源码解析:深入研究企业办公自动化系统的核心代码
-
随着信息技术的迅速发展,企业办公自动化(OfficeAutomation,简称OA)系统已成为现代企业管理中不可或缺的一部分。这些系统通过集成各种办公功能,如文档管理、流程管理、协作与通信等,极大地...
- 用PHP写了个数据分析框架示例代码
-
下面是一个简单的PHP数据分析框架的示例:```php<?php//1.数据收集functioncollectData(){//从数据库或API获取数据//...}//2.数据清...
- 「2022/02/02」thinkphp源码详细阅读(一)
-
thinkphp源码详细阅读(一)请求流程1.从入口index.php开始2.实例化App,我们看一下实例化所做的工作3.设置thinkPath、rootPath、appPath、...
- 【源码】效果最好的网格Shader(迄今为止)
-
我一直都在写Shader,其中有一个特定的Shader我一直想写好,但我总是因为一些我无法完全理解的原因而失败。然后过了几年,我用新学到的知识再次尝试,越来越接近,然后又失败。是什么Shader?模拟...
- 干货来了,一夜加粉百万的柏拉图源码仍给你
-
相信大家这几天都看到过一些关于“柏拉图app”公众号被封号的文章,主要内容是由于“柏拉图APP”推送的一条图文,叫做《生成你的性格标签,为自己带盐》,然后再短短的数日,柏拉图APP公众号便涨粉百万,阅...
- 一周热门
- 最近发表
- 标签列表
-
- 外键约束 oracle (36)
- oracle的row number (32)
- 唯一索引 oracle (34)
- oracle in 表变量 (28)
- oracle导出dmp导出 (28)
- oracle两个表 (20)
- oracle 数据库 字符集 (20)
- oracle安装补丁 (19)
- matlab化简多项式 (20)
- 多线程的创建方式 (29)
- 多线程 python (30)
- java多线程并发处理 (32)
- 宏程序代码一览表 (35)
- c++需要学多久 (25)
- css class选择器用法 (25)
- css样式引入 (30)
- html5和css3新特性 (19)
- css教程文字移动 (33)
- php简单源码 (36)
- php个人中心源码 (25)
- 网站管理平台php源码 (19)
- php小说爬取源码 (23)
- github好玩的php项目 (18)
- 云电脑app源码 (22)
- js创建txt文件 (18)