分享免费的编程资源和教程

网站首页 > 技术教程 正文

在离散时间域对于傅里叶变换的深度理解

goqiw 2024-11-26 02:55:33 技术教程 31 ℃ 0 评论

如下图,表示若干次谐波合成了一个畸变的波形。

如果f(t)是周期信号,则其可以用傅里叶级数表示为:

N=1000 单位时间采样点数

for f=0:N-1

for k=0:N-1

a(f)=a(f)+x(k)*cos(2*pi*f*k/N)*dt; k/N表示时间

b(f)=b(f)+x(k)*sin(2*pi*f*k/N)*dt;

end

c(f)=sqrt(a(f)^2+b(f)^2);

上面的c(f)代表某次谐波的振幅。

这个程序的编程思路就是,先假设某个离散点序列,包含了所有频率的谐波(从f=1开始增加),然后再逐个计算每个谐波的振幅,这也是傅里叶变换的工程实现方法。

由上述程序可以看出,当频率f固定(假设f=1)、k变化时,表示所有不同的点x(k)都对这个同样频率的谐波cos(2*pi*1*k/N)的振幅做出了自己的贡献;同样,当k固定、f变化时,表示同一个点对于不同频率的谐波振幅都做出了自己的贡献。

当频率f固定时,比如f=1,乘积x(k)*cos(2*pi*f*k/N)代表x(k)这个点对于频率为1的这个谐波的振幅所作的贡献,而所作贡献的大小,既与x(k)这个点本身的大小有关,也与cos(2*pi*f*k/N)这个谐波在k时刻的取值有关。以图1为例,假设第二根竖线代表的是时刻k,可以看到,不同的谐波在同一时刻其取值是不一样的,也就是说,同一个点x(k)对于不同的谐波振幅其贡献大小是不同的,也正是因为这个原因,傅里叶变换才能分解出哪些是信号中包含的主要谐波成分,哪些是次要的。

同样,可以理解,不同时刻的离散点x(k),即使其取值相同x(k)=x(k+1),其对于同一谐波的贡献也是不同的,因为cos(2*pi*f*k/N)不等于cos(2*pi*f*(k+1)/N)。对于某个固定频率的谐波,当它处于峰值的时候,如果点x(k)的取值也比较大;当这个谐波处于零点附近的时候(因为计算谐波振幅的时候用的是绝对值),点x(k)的取值也小,那么这种情况下,图2中的离散序列分解出的这个频率的谐波其振幅是最大的,反之则小。

如图4,这样的离散点的分布,明显可以看出其分解出的谐波频率。那么,假如从图4中第一个波峰点(+1)以后的点的数值都变大了,会不会导致分解出来的图4中这个频率的谐波振幅变得更大呢?有可能,但问题是,那样变化以后,会导致分解出的别的频率的谐波振幅更大,而傅里叶分解是依据振幅的相对大小来分辨主要还是次要谐波的。因此,一个离散点序列,分解出哪些主要谐波哪些次要谐波,是和这个序列的形状高度相关的。

简单总结如下:

当在离散时间域计算傅里叶变换时:

1:所有的点都对同一个频率的谐波振幅做出了自己的贡献;

2: 每一个点对于某个频率的谐波所作的贡献大小,不仅与这个点本身的值有关,也与这个谐 波在这个时刻的取值有关。

3:同一个点x(k)对于不同的谐波振幅其贡献大小是不同的。

因此,在连续时间域我们只能知道一个畸变的波形理论上可以分解为不同的谐波,只有在离散时间域我们才能知道工程上怎么去分解。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表