c++ 提取傅里叶描述子_信号与系统(一)用DFT(离散傅里叶变换)计算FS(傅里叶级数)...

想想我学习信号与系统的心路历程:

刚开始学:这不就是傅里叶变换和拉普拉斯变换?电路+复变?

学到抽样定理:emmm好像有点东西

学到DTFT/DFS/DFT:天哪噜,这都是什么鬼?

d3285753ff18849b9f04eac890e7c50c.png

因此,基于我对于知(kao)识(shi)的探(ya)索(po),我决定要弄清楚这些乱七八糟的变换之间的关系。

首先,放一张我刚学完DFT时整理的一个总结

2dde67c3ad4c546e0129fd13ca15160d.png
四种傅里叶变换总结

FS不就是连续周期信号的傅里叶变换嘛,FT是连续非周期信号的,DTFT是离散非周期信号的,DFS是离散周期信号的,最后来个DFT是为了在实际工程中计算上述四种运算的。这时我以为我学懂了。(too young to naive)

直到我真的开始用DFT来计算那几种傅里叶变换

a thousand years later....

好吧,我承认我没搞懂,所以这究竟是咋变换的啊???我又开始了一番研(tu)究(tou)大业(终于要开始进入正题了)


基于篇幅问题(好叭是因为我懒),我们先来介绍一下如何利用DFT来计算FS。

首先我们先来康康这两个变换分别是怎么计算的:

c2031dafe84f979eec8aa42b94df2948.png
FS和DFT计算公式

由于用DFT计算FS是有实际应用意义的,所以我们要先搞清楚在实际中,这究竟是个怎么的过程?

6f5831f476e73d63280d92a8d63e4b0f.png
实际中DFT转FS的过程
  1. 获得一个连续周期信号x(t),要分析其频谱。
  2. 对信号在一个周期内进行采样处理,采样点数为N,采样时间间隔为 Ts=T/N,得到离散信号序列x[n]。
  3. 对离散信号x[n]进行DFT变换,得到其离散傅里叶变换X[k]。
  4. 接下来就是我们后面要讲的,怎么从X[k]得到我们需要的傅里叶级数的频谱(ck和ω
    的关系)呢?

先贴个结论出来

傅里叶级数的频谱图绘制的是ck和kω0的关系,而我们用DFT计算得到的是H[k]和k的关系,所以想通过DFT计算FS,需要做的变换是

75f4a628677043f3eab20234cf84c445.png
DFT计算FS

并且,画FS频谱图时,要把横坐标从k变成kω0

所以,其实横坐标为kω0,纵坐标为ck(用上面那个公式计算出来的)的图象就是FS频谱图啦

但可能有人就不同意了,人家傅里叶级数(FS)的k是从-∞到+∞的,咋被你一搞就只有从-N/2到N/2-1了呢

394989768ae1381ee37c275ac9d5175d.png

首先我们要明确的是,用DFT计算得到的傅里叶级数的系数肯定不是精确的,毕竟人家好好一个连续的周期信号被你抽成了离散的,所以时域的抽样以及截断就导致频域无法想之前一样无限了。不过问题不大,因为被忽略的频率范围都是几乎没什么信号的高频区,而且也可以通过调整一个周期内的采样数N,来调整频谱在哪里被截断。N越大,得到的最高频次也就越高。

2860ae295b0eb974d04ef47b4bfb2974.png

那么下来我们就来讲讲为什么这么变换吧

首先我们利用积分是求和的极限这一性质,将ck写成

e4d8f9f181ca2330cd92635ac7c6d78f.png
ck的近似计算

这时,你有没有发现,这个公式好像有点眼熟啊,让我们再来回顾一下DFT和FS的计算

c2031dafe84f979eec8aa42b94df2948.png
FS和DFT计算公式

此时的ck和X[k],除了前面差了个1/T外,十分地相似,只要我们能说明ω0Ts = 2π/N!

显然啦,Ts是抽样间隔,等于T/N,ω0是原信号的频率,等于2π/T,那么

b50d0d7fe921385a9407d572bc902b2c.png

所以,到这里,我们就找到了ck和X[k]之间的关系

f99becaeb70d8376942022ad716ef5df.png
ck和X[k]关系

大功告成啦!然后我翻开书,发现了一个公式

40ac5af917c0eb9287e26c0c55622fb9.png
书上的变换公式

这咋和我算出来的有那么一丢丢不一样呢???为啥k>N/2是就对应的是复频域的傅里叶级数系数呢???

因为我们忽略了一个问题,近似计算之所以为近似计算,不仅是因为它是有误差的,更重要的是它的误差还不能过大!

当使用求和来代替积分时,虽然我们选取的抽样间隔都是一定的Ts,但是我们积分(求和)的对象

ad61ec7b96a6799aca8a8fa7fd22478c.png

由于乘了一个复数的指数形式,其实是改变了它的一个周期(这个周期并不是说就把它变成每个周期一样的周期函数了,这里指的是函数的振荡周期),k越大时,这个积分量的变化越快!那么当k很大时(>N/2),增加一个抽样间隔Ts,复指数的相位增加了比π还要多,这能近似才怪呢。

让我们来康康随着k的增大这个近似到底发生了什么变化~

(PS:这里采用matlab编程,一个周期内抽样点数选的是50)

当k比较小时(k=1)

b1e63da611db0719513680ae66219419.png
k=1时的积分和求和

这时感觉还不错,近似度可以接受

k增大一些(k=10)

acc753dcadf912eeb30febef06f9c050.png
k=10时的积分和求和

这时候感觉,还阔以吧

k再增大一些(k=40,此时已经超过N/2)

ca79f825dfc0389a5d7c17eed28f0144.png
k=40时的积分和求和

emmm,俺就觉得,且不说面积一不一样撒,你这函数特征都没提取出来啊老哥

所以这个时候已经达不到近似了

而此时,让我们康康X[k]和c(k-N)是不是近似的?

k=40时

cca24752ea1294f096df21d18bb89643.png
k=40

这个起码函数图象特征提取出来了,而且对比一下这个图和上一个图,显然k=40时,更接近于c(-10)这个系数呀

k=49时

016272216257f55da0dfe70830943e38.png
k=49

这不就和k=1时一样完美了嘛


所以为啥k>N/2时会更近似c[k-N]呢?

之前我已经提到了:当k很大时(>N/2),增加一个抽样间隔Ts,复指数的相位增加了比π还要多。但是别忘了复指数是以2π为一个周期变换的,那相位增加了比π还要多,岂不是就意味着减少了不到π嘛

所以,就相当于对原信号沿着x轴负方向进行了一个求和!

那么我们也就不难理解书上的公式了

a293397862c05e14e321f6c1dc30a63b.png
书上的变换公式

最后得到的结果是这样滴(这时我们布置的一次实验作业)

03cda57475700e1f09a71e414d2cc175.png
用DFT画出来的FS频谱图和直接用FS画出来的频谱图

我没有画ω<0的FS,但是由于信号一般是实函数,FS频谱图都是偶函数,所以可以看出ω<0(k<0)时,ck=X[k+N]

那么到这里终于弄完啦,如果你喜欢这篇文章,记得点赞哦~

b站:满脑子跑火车的灯泡

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值