想想我学习信号与系统的心路历程:
刚开始学:这不就是傅里叶变换和拉普拉斯变换?电路+复变?
学到抽样定理:emmm好像有点东西
学到DTFT/DFS/DFT:天哪噜,这都是什么鬼?
因此,基于我对于知(kao)识(shi)的探(ya)索(po),我决定要弄清楚这些乱七八糟的变换之间的关系。
首先,放一张我刚学完DFT时整理的一个总结
FS不就是连续周期信号的傅里叶变换嘛,FT是连续非周期信号的,DTFT是离散非周期信号的,DFS是离散周期信号的,最后来个DFT是为了在实际工程中计算上述四种运算的。这时我以为我学懂了。(too young to naive)
直到我真的开始用DFT来计算那几种傅里叶变换
a thousand years later....
好吧,我承认我没搞懂,所以这究竟是咋变换的啊???我又开始了一番研(tu)究(tou)大业(终于要开始进入正题了)
基于篇幅问题(好叭是因为我懒),我们先来介绍一下如何利用DFT来计算FS。
首先我们先来康康这两个变换分别是怎么计算的:
由于用DFT计算FS是有实际应用意义的,所以我们要先搞清楚在实际中,这究竟是个怎么的过程?
- 获得一个连续周期信号x(t),要分析其频谱。
- 对信号在一个周期内进行采样处理,采样点数为N,采样时间间隔为 Ts=T/N,得到离散信号序列x[n]。
- 对离散信号x[n]进行DFT变换,得到其离散傅里叶变换X[k]。
- 接下来就是我们后面要讲的,怎么从X[k]得到我们需要的傅里叶级数的频谱(ck和ω
的关系)呢?
先贴个结论出来
傅里叶级数的频谱图绘制的是ck和kω0的关系,而我们用DFT计算得到的是H[k]和k的关系,所以想通过DFT计算FS,需要做的变换是
并且,画FS频谱图时,要把横坐标从k变成kω0
所以,其实横坐标为kω0,纵坐标为ck(用上面那个公式计算出来的)的图象就是FS频谱图啦
但可能有人就不同意了,人家傅里叶级数(FS)的k是从-∞到+∞的,咋被你一搞就只有从-N/2到N/2-1了呢
首先我们要明确的是,用DFT计算得到的傅里叶级数的系数肯定不是精确的,毕竟人家好好一个连续的周期信号被你抽成了离散的,所以时域的抽样以及截断就导致频域无法想之前一样无限了。不过问题不大,因为被忽略的频率范围都是几乎没什么信号的高频区,而且也可以通过调整一个周期内的采样数N,来调整频谱在哪里被截断。N越大,得到的最高频次也就越高。
那么下来我们就来讲讲为什么这么变换吧
首先我们利用积分是求和的极限这一性质,将ck写成
这时,你有没有发现,这个公式好像有点眼熟啊,让我们再来回顾一下DFT和FS的计算
此时的ck和X[k],除了前面差了个1/T外,十分地相似,只要我们能说明ω0Ts = 2π/N!
显然啦,Ts是抽样间隔,等于T/N,ω0是原信号的频率,等于2π/T,那么
所以,到这里,我们就找到了ck和X[k]之间的关系
大功告成啦!然后我翻开书,发现了一个公式
这咋和我算出来的有那么一丢丢不一样呢???为啥k>N/2是就对应的是复频域的傅里叶级数系数呢???
因为我们忽略了一个问题,近似计算之所以为近似计算,不仅是因为它是有误差的,更重要的是它的误差还不能过大!
当使用求和来代替积分时,虽然我们选取的抽样间隔都是一定的Ts,但是我们积分(求和)的对象
由于乘了一个复数的指数形式,其实是改变了它的一个周期(这个周期并不是说就把它变成每个周期一样的周期函数了,这里指的是函数的振荡周期),k越大时,这个积分量的变化越快!那么当k很大时(>N/2),增加一个抽样间隔Ts,复指数的相位增加了比π还要多,这能近似才怪呢。
让我们来康康随着k的增大这个近似到底发生了什么变化~
(PS:这里采用matlab编程,一个周期内抽样点数选的是50)
当k比较小时(k=1)
这时感觉还不错,近似度可以接受
k增大一些(k=10)
这时候感觉,还阔以吧
k再增大一些(k=40,此时已经超过N/2)
emmm,俺就觉得,且不说面积一不一样撒,你这函数特征都没提取出来啊老哥
所以这个时候已经达不到近似了
而此时,让我们康康X[k]和c(k-N)是不是近似的?
k=40时
这个起码函数图象特征提取出来了,而且对比一下这个图和上一个图,显然k=40时,更接近于c(-10)这个系数呀
k=49时
这不就和k=1时一样完美了嘛
所以为啥k>N/2时会更近似c[k-N]呢?
之前我已经提到了:当k很大时(>N/2),增加一个抽样间隔Ts,复指数的相位增加了比π还要多。但是别忘了复指数是以2π为一个周期变换的,那相位增加了比π还要多,岂不是就意味着减少了不到π嘛
所以,就相当于对原信号沿着x轴负方向进行了一个求和!
那么我们也就不难理解书上的公式了
最后得到的结果是这样滴(这时我们布置的一次实验作业)
我没有画ω<0的FS,但是由于信号一般是实函数,FS频谱图都是偶函数,所以可以看出ω<0(k<0)时,ck=X[k+N]
那么到这里终于弄完啦,如果你喜欢这篇文章,记得点赞哦~
b站:满脑子跑火车的灯泡