python傅里叶变换 信号处理 序列_数字信号处理 | 你想知道的都在这儿

1f33dd9d7f5cf2769fb488dad19e6072.png

◆ ◆  I just wondered how things were put together  ◆ ◆

▼▼▼

信号与系统、数字信号处理和随机信号处理是电子信息类专业的专业基础课,作为信号处理系列课程,它们均从数学的角度来分析信号,但又有各自的侧重点。其中,信号与系统主讲连续信号分析,数字信号处理侧重离散分析,而随机信号处理则是分析不确定信号,如噪声和抖动。虽然侧重点各异,但它们最最重要的一点就是引入了从频域分析信号的概念,打破了大家原有的认知。此外,这一系列课程乍看都是讲电路的,但在实际学习过程中发现,几乎没有任何实际的电路,可谓是非常抽象的,但却是我们不得不掌握的分析工具。相比于信号系统,数字信号处理与实践结合更为紧密,因为算机系统只能处理离散信号。接下来我们一起看看数字信号处理中那些对IC设计者非常实用的理论内容。

模拟角频率与数字角频率

通过对现实世界的模拟信号进行抽样、量化得到数字信号,数字角频率Ω和模拟角频率ω有如下关系:360c8325aae231ef4a288f64d9a2d70f.png其中,Tsam代表抽样周期。模拟信号采样后的频谱是以采样频率fsam为周期进行周期延拓。该频率对应的数字角频率为:ef46c2af040a5ef1e0ab82b42e5c2e98.png这是一个非常有意思的结论,因为2π正是一个圆周。也就是说,离散信号的频谱从模拟角频率的角度来看时,是以fsam为周期,从数字角频率来看时,是以2π为周期的。

在文献中,有些是用模拟角频率来描述离散信号的频谱,有些是用数字角频率来描述,它们本质上并没有区别。采用模拟角频率更符合人们直观的认识,数字角频率则是数学运算的产物。比如,一个信号的最高频率为1MHz,可以用2MHz的时钟去采样,得到的离散信号的基带信号频率范为-1~1MHz(看DC附近的一个周期),如果换算成数字角频率,该基带信号的频率范围是-π~π,很显然,大家对用-1~1MHz来描述信号频率更能接受。

DFT(离散傅里叶变化)

针对不同的信号有不同的傅里叶分析方法,如下图所示,分别为连续时间信号傅里叶变换、连续时间傅里叶级数、离散时间傅里叶变换、离散时间傅里叶级数。这些包含了所有信号的分析方法,那为什么还要引入DFT呢?

a0a8f46b68f6d9915d2a4a9c4bbd8bfc.png

仔细观察可以发现,前三种信号的时域和频域至少有一个是连续的,对于计算机来讲,只能处理离散的信号,包括它的输入和输出。因此,只有离散周期信号适合于计算机处理。那么对于一个非周期离散信号的频谱可以用计算机计算得到吗?

我们可将一个有限长信号进行周期化,然后计算其频谱,可以发现,周期化之后的信号频谱可以看作是该信号周期化之前频谱的采样,因此,近似得到了非周期信号的频谱。

617b6506186ac955dbff01b102385abe.png

这就是DFT的求解思路,它可以用来计算一般离散信号的频谱。

时域周期化对应频域离散化(频域抽样定理)时域离散化对应频域周期化(时域抽样定理)

DFT计算模拟信号的频谱

现实生活中的大部分信号都是非周期的模拟信号,我们如何用计算机来得到它们的频谱呢?
可以采用如下图所示的步骤,首先对模拟信号离散化,然后对得到的离散信号进行周期化,进而通过DFT计算频谱。

c847725cb9822491a3e735e51240a75b.png

在做DFT后,得到离散的频谱。做N点的DFT就意味着在连续谱里采样N个点,一般N取2的幂次,以方便DFT的快速算法FFT进行计算。

d6a295ee391d3385832feb5cac5ef9d6.png

对模拟信号做DFT的步骤:

  • 将模拟信号离散化。首先要对非带限信号进行抗混叠滤波,可以采用模拟低通滤波器。采样离散化,对应频谱周期化。-- 模拟LPF的主要类型有:巴特沃斯型,切比雪夫Ⅰ型,切比雪夫Ⅱ型,椭 圆型,它们的主要区别在于通带波动、阻带波动和过渡带的下降速率不同,其中椭圆形的过渡带下降最快,但它的极点靠近虚轴,容易不稳定。-- 抗混叠滤波会丢失一部分信息,称为截断误差,但这个要比混叠误差小。

  • 将离散的时域信号进行周期化。-- 这里要保证时域信号为有限长序列,否则在时域周期化的过程中会出现时域混叠。-- 如果信号为无限长序列,则需要在时域进行加窗截断,使其成为有限长序列。-- 常见的窗函数类型有矩形窗、汉宁窗、海明窗、凯塞窗、布莱克曼窗等,它们的区别在于主瓣宽度和旁瓣衰减不同,时域加窗会导致频谱泄露,后面会详细介绍。

  • 接下来就可以对该有限长序列进行DFT了,DFT主要需要考虑DFT的点数,为防止时域混叠,频域抽样定理给出:N≥L。其中,N为DFT点数,L为序列长度。

频谱泄露

从DFT分析连续非周期信号的过程中我们可以看到,我们希望处理的信号是时域有限,频域有限的信号,这样就省去了抗混叠滤波和时域加窗的步骤,但这样的信号存在吗?

时域有限的信号,频谱无限时域无限的信号,频谱有限

答案是不存在。现实存在的信号要不是时域有限、频带无限,要不是时域无限、频带有限。

对于时间有限信号,在做DFT之前需要加窗截断。时域加窗之后的信号频谱和原信号频谱会一模一样吗?

直觉告诉我们,会不一样的,毕竟加窗之后信号会丢失一部分信息。从下图可以看出,当给信号加一个矩形窗之后,信号的频谱变“胖“了一些,这个也是可以预料到的,因为信号成为时域有限信号之后,会产生高频分量。

7909a3f53ef3865349ccc547138f1689.png

给信号时域加窗相当于原信号和窗函数在时域乘积,对应于频域卷积。矩形窗函数的频谱为sinc函数,如下图所示,它包含了高频分量。

942e58556a63732522788d6c820e1475.png

从下图可以清楚地看出,任何一个频谱和sinc函数做卷积,都会发生一定程度的展宽,因为只有和无限冲击δ函数做卷积才是它本身,不发生任何的展宽。

bfdaa555de57b6dfdedd186682a03970.png

接下来再看一个无限长余弦信号的频谱,它和sinc函数卷积之后得到的频谱如下,可以发现原本的一个δ函数被展宽,展宽后的主瓣宽度和矩形窗函数带宽一样,此外还有一些高频旁瓣,这称为频谱泄露现象。

因为任何信号都可以表示为δ函数的加权求和,所以该信号的频谱泄露现象具有代表性,可以用来定义频谱分辨率。同时,N越大,频谱泄露现象减弱,N增加,意味着观察时间增长。所以改善频谱泄露的一个方法就是加大窗函数长度N。

04509778630b0a5cfdc1be68013b3312.png
无限长余弦信号的频谱
7e39172b1f53a4e5c72a5076ad86b9bb.png
矩形窗函数的频谱         有限长余弦信号的频谱

如果大家用过频谱仪测试,或者用Simulink做过频谱分析的话,就可以观察到这一现象。任何的一个单音信号,在频谱图上并不是显示为一条直线,而是有一定的宽度,频谱泄露可以解释这一现象。

频谱分辨率

频谱泄露现象产生了频谱分辨率的概念,如果没有频谱泄露,分辨率为无限大。为解释这一现象,先举个栗子。如下图所示,对于两个余弦信号,加矩形窗截断导致频谱泄露,单边扩展的宽度为2π/N,为区分两个信号,需要满足:79acdeb5a6fa7b69212fcd0c8de8cec4.png fd2244f7b5bbb229700b8806d97c7e42.png ec84f6b58439c61497abd652105bb6aa.png N同时也决定了观察时间长度:a4d97d1b022d969d9f1af76e17694a4a.png

6d52983cc123e964eb304c033fee70cb.png

如果仿真一个1Hz的信号,那应该至少观察一个周期才能看到它的全貌,也就是1s,直观解释了上述结论。

窗函数

从下表可以看出,不同窗函数的区别主要在于主瓣宽度和旁瓣衰耗的不同,显然我们希望窗函数的主瓣宽度窄,同时旁瓣衰耗大,但这两者之间同样存在矛盾。那么该怎么选择合适窗函数的类型呢?

465da0af0d29fcad4d89c379207a8f23.png

根据频谱分辨率的需求,选择主瓣宽带最窄的矩形窗有利于提高频谱分辨率,那么旁瓣衰耗又有什么作用呢?
想象一种情况,如果想看到一个系统输出信号对supr的抑制,而supr极有可能淹没于信号泄露的频谱中,因此我们并不能得到准确的supr抑制性能,因此需要旁瓣衰耗更大的窗函数。

其实当我们仿真或者测量一定时间得到的数据,相当于给一个无限长的信号加了一个矩形窗,如果需要旁瓣衰耗大,可以对有限长序列进行进一步的整形,因此产生了其它的窗函数。

栅栏效应

通过DFT得到的频谱为一些离散的点,这些离散的点就位于信号真实频谱的轮廓上,这就像隔着栅栏在看一个信号一样。显然我们希望离散的点越密越好,由于离散的点的数目等于做DFT的点数N,所以可以采取增加N的方式来改善栅栏现象。但是一般来讲,对于一个长度为L的序列,应该是做L点的DFT刚刚好,这就意味着DFT的点数N应该被有限长序列的长度N,或者说是时域窗函数的宽度所限制。那么DFT的点数还能任意增大吗?答案是可以的,我们可以给有限长的序列后面补零,从而将N点的序列加长为L点,进而做L点的DFT。其实给序列后面补零,并没有改变信号本身的频谱,如下图的实线所示,但是补零可以有更多的点位于轮廓上,方便我们观察。

1b68b1fb7c685073937f5c4ba3df5892.png

前面提到,频谱泄露可以通过增加序列长度来改善,那么现在给大家一个思考的问题,序列补零能改善频谱泄露问题吗?欢迎大家在下方评论区留言,期待大家的答案。
Simulink中的频谱仪使用

对于稍微复杂点儿的电路,比如PLL、ADC、CDR等,我们往往需要进行系统行为级建模。Simulink作为一个可视化程度高,工具箱庞大的仿真环境,深受模拟IC工程师的青睐。

采用频谱仪观测信号是对信号分析的一种有效的手段,Simulink的频谱仪设置稍复杂,它的应用几乎运用了前面所提到的所有知识。因此,我们来实践一下。

首先看一下下图图1,设置里面的Type可以选择功率或幅度。RBW代表频谱分辨率,也可以设置窗函数长度来间接确定频谱分辨率,如下图图2。这两者之间是可以互换的,前面也给出过它们两种之间的关系。同时,系统还会自动计算出需要采样的点数,在Sample/update处显示。如下图图1,当窗口长度为1024,自然需要采样1024个点。如下图图2,当采样频率BW为360MHz,频谱分辨率设为360M/512时,采用矩形窗函数时,计算得到N为512,和系统自动计算得到的是完全相同的。

一般我们设置RBW而不是窗函数长度,因为这样很快可以计算得到仿真时长,因为它们之间是简单的倒数关系。这里应该为1.42us,当仿真时间设为小于1.42us时,频谱仪没有输出结果。

4766f4cafe54d3f1ae5f66c2ba33464c.png
图1
d77fb9f941dc67a01a26b6479c433aa8.png
图2

当然我们还可以改变窗函数类型,当窗函数类型设为其它时,实现同样的频谱分辨率需要增加采样点数。

此外,如果信号为一个非基带信号,应该先将其下变频到基带,这样可以极大减小采样频率,因而在实现同等频率分辨率的时候可以减小仿真时间。如下图所示,先将信号进行正交下变频(抑制镜像信号),然后进行抗混叠滤波,接着进行离散化,然后就可以送到频谱仪了。时域加窗则是通过频谱仪来完成的。

6b5c7013d6a93c18bd4edf5e1007442e.png
本期内容就到这里了,我们下期再见 60d51217c104c842a8ab55b1c727fe61.png

-END-

090c3256bd4204752a7dd8d7771d1ce1.png

如果您觉得有用,请帮忙转发给

更多的朋友

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值