声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3014|回复: 7

[FFT] 为什么进行FFT变换后得到的幅值序列恰好与频率序列对应?

[复制链接]
发表于 2019-2-22 09:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
对于下面这个例子,为什么进行fft变换后得到的y值序列恰好是频率序列对应的啊?matlab中FFT变换式子附在后面了。我始终不太懂在数学推导上这两个序列是如何对应起来的,求各位解答,拜托了!

例1:x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t)。采样频率fs=100Hz,分别绘制N=128、1024点幅频图。

clf;
fs=100;N=128;   %采样频率和数据点数
n=0:N-1;t=n/fs;   %时间序列
x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); %信号
y=fft(x,N);    %对信号进行快速Fourier变换
mag=abs(y);     %求得Fourier变换后的振幅
f=n*fs/N;    %频率序列
subplot(2,2,1),plot(f,mag);   %绘出随频率变化的振幅

FFT Discrete Fourier transform.
%   FFT(X) is the discrete Fourier transform (DFT) of vector X.  For
%   matrices, the FFT operation is applied to each column. For N-D
%   arrays, the FFT operation operates on the first non-singleton
%   dimension.
%
%   FFT(X,N) is the N-point FFT, padded with zeros if X has less
%   than N points and truncated if it has more.
%
%   FFT(X,[],DIM) or FFT(X,N,DIM) applies the FFT operation across the
%   dimension DIM.
%   
%   For length N input vector x, the DFT is a length N vector X,
%   with elements
%                    N
%      X(k) =       sum  x(n)*exp(-j*2*pi*(k-1)*(n-1)/N), 1 <= k <= N.
%                   n=1
%   The inverse DFT (computed by IFFT) is given by
%                    N
%      x(n) = (1/N) sum  X(k)*exp( j*2*pi*(k-1)*(n-1)/N), 1 <= n <= N.
%                   k=1
回复
分享到:

使用道具 举报

发表于 2019-2-22 15:46 | 显示全部楼层
序列对应的原因是这两行的结果:
n=0:N-1;t=n/fs;   %时间序列
f=n*fs/N;    %频率序列

连接的关键变量是采样率fs,由采样定理时域序列中两个相邻数据点之间的时间差δt=1/fs;
 楼主| 发表于 2019-2-22 17:38 | 显示全部楼层
迷你猫 发表于 2019-2-22 15:46
序列对应的原因是这两行的结果:
n=0:N-1;t=n/fs;   %时间序列
f=n*fs/N;    %频率序列

我还是不太明白。比如把信号看成弹奏的一首曲子,我们想知道在某个音调(频率)对应的响度(幅值)是多大。现在,我们按照一定时间间隔,测出了一定时间点对应的总的响度。然后又利用FFT变换(变化公式在最开始加粗部分),然后就得出了一系列y(幅值)。但是这怎么和频率扯上关系了啊。在数学上,我根据FFT变换公式推导不出来啊。撇开推导,理解上我也不太理解啊。
是有哪一点我忽略了没转过弯来吗?

以前学微积分,只是要进行傅里叶变化,对原函数做个积分变换就行,没有想过解决这种实际问题。

点评

你这个问题其实跟信号处理没啥关系,你想知道的是:“凭啥子就从时域变到频域去了呢?”这个问题其实大部分数字信号处理的书上都不会讲,讲这个的应该是线性代数。 论坛并不适合介绍这个,我只能大概的说说,编辑帖  详情 回复 发表于 2019-2-23 14:49
发表于 2019-2-23 14:49 | 显示全部楼层
麦特累柏 发表于 2019-2-22 17:38
我还是不太明白。比如把信号看成弹奏的一首曲子,我们想知道在某个音调(频率)对应的响度(幅值)是多大 ...

你这个问题其实跟信号处理没啥关系,你想知道的是:“凭啥子就从时域变到频域去了呢?”这个问题其实大部分数字信号处理的书上都不会讲,讲这个的应该是线性代数。
论坛并不适合介绍这个,我只能大概的说说,编辑帖子太麻烦了。

傅里叶变换的本质原理是:向量的基分解,以及同一向量在不同的基下坐标之间如何通过矩阵互相转换.而这也是理解傅里叶变换的一个最简单的方式。

一个大前提:波形就是向量
这点相当的反常识,向量的意思应该就是:"一个有方向的量或者右箭头的线段”,而波形跟向量之间八竿子打不着的样子。但是只要你对向量空间有一定的了解,你就知道波形也是一种向量。甚至任意一串数字,不管这串数字背后的含义,它都可以是一个向量。

下一个前提:平面几何向量可以用两个不共线的向量来分解,这是几何向量的固有特性。这点同样适用于波形,任意一个波形可以用不同频率的正弦和余弦波形来组合得到。
几何向量分解中用于描述原有向量的两个不共线的向量,在这个分解中被我们成为“基”。
比如说一个向量从原点O出发到点A(3,2);而两个基向量分别是x轴和y轴上由O点出发指向正方向长度为1 的向量,也就是a1=(1,0)和a2=(0,1)   论坛的这个编辑功能真是操蛋,不好写表达式
那么我们可以说向量OA  需要3个基a1和2个基a2来描述(建议你在纸上画一下)。所以我们说向量OA在这个基a1和a2下的坐标为[3,2]。那换一个其他的基呢?当然也可以这样分解,假设有另一个基b1=【-1,1】和b2=【-1,-1】(自己随便定的),那我们也可以得到这个向量OA在基b1和b2下的坐标假设为【-0.5,-2.5】。一个基对应一个坐标,这个对应有且唯一。


我们关心的是我知道两个基了,我知道其中一个基下的坐标。但是我不知道原来的向量是怎么样的,如何求另一个基下的坐标。答案是中间变换矩阵,方法是先获取两个基之间的表达关系,然后组合成一个变换矩阵。然后变换矩阵和一个基下坐标相乘就得到另一个坐标了。


本质上时域和频域都是描述的信号,只不过是从不同的角度来观察。这里的“不同的角度”指的是不同的“基”。
时域信号和频域信号是使用了不同基来描述同一个向量。这里不方便展开说,只能大概的说下:
一个4点的离散时域信号,假设为【1,2,3,4】,采样周期T=1秒,采样频率FS=4,这代表着如下:
时域的基很清楚,如下是一个4×4的矩阵的每一列。
1,0,0,0
0,1,0,0
0,0,1,0
0,0,0,1
且时域信号【1,2,3,4】为原始信号在时域基下的坐标

问题是频域的基如何确定,需要一个关键的参数采样频率而且牵扯到太多的东西。
最基础一个问题是频域的最基本成分是什么? 答案不是不同频率的简谐运动,而是不同频率的正弦和余弦运动,因为某一频率的简谐运动可以拆分成同一频率的正弦运动加同一频率的余弦运动之和的形式。
同事,有这么一个基本事实:你想画1Hz的正弦或者余弦运动,你只能用1Hz的正弦或者余弦运动去画,否则,你想用其他的无论多少个频率都画不出来的,不同频率的正弦/余弦函数相乘在一个周期内积分的话其结果为0.

另一个问题是频域里的频率成分有哪些?对于本例里的离散信号,频率成分是0Hz,1Hz,2Hz这三个,这是采样定律推导出来的。

有上面构建频率的基,这又有复数和实数两种形式。

我自己在写一个关于傅里叶变换原理的文章,从向量空间的角度去写的。等写好了,我传上来给楼主看看。论坛实在是不合适完整的说明这些东西。









 楼主| 发表于 2019-2-23 19:18 | 显示全部楼层
迷你猫 发表于 2019-2-23 14:49
你这个问题其实跟信号处理没啥关系,你想知道的是:“凭啥子就从时域变到频域去了呢?”这个问题其实大部 ...

谢谢解答了。真的麻烦你了。我昨天去网上收了一下,看到了离散傅里叶变化和连续傅里叶变化之间公式的证明。已经推导出来了。供大家参考。证明过程来自这个连接。https://www.jianshu.com/p/c91b89234ff6
发表于 2019-2-23 22:03 | 显示全部楼层
数学上建立了一定的理论,比如傅立叶变换,怎样用到实际问题,还需要搞物理的与搞数学的合作做些工作,才能将数学公式用于实际之中。
就说傅立叶变换吧,X(t)变换成Y(w),我们常将X看成是位移,实数,是(时间)t 的函数,Y变成w的函数,复数,解释为频率。这个大家都清楚,也最常用。
深入一步,如果X(t)是一个复函数,经过傅立叶变换以后变成也是复函数的Y(w),而且它们的逆变换也能从复函数的Y(w)还原成复函数的X(t),它们的物理意义就不是用一句话能说清楚的了。
数学公式有了,能不能用于解决物理问题?就需要搞物理的和搞数学的联合工作了。
结论是有的,本人不必在此班门弄斧了,只不过想扩大初学者一些思路吧!
发表于 2019-2-28 16:04 | 显示全部楼层
本帖最后由 qiaohai 于 2019-2-28 21:24 编辑

使用FFT时应注意点:
FFT是离散傅里叶变换,它和傅里叶变换是有区别的。
“傅里叶变换得到频谱图”,这句话是不对的,因为(无穷域)傅里叶变换对被变换函数是有严格要求的,非常遗憾,一般我们概念中的振动信号都不具备傅里叶变换的条件!故而在随机信号理论中不得已用了谱密度的概念而转弯抹角用自相关的傅里叶变换来定义,一点也直接看不出它和频谱有什么关联。
再说FFT或DFT,是离散傅里叶变换,一组离散数据FFT得到另一组离散数据,这是数学表示,它基本不需要什么条件都能得到结果。
但是FFT的结果是不是“等于”振动振幅,却是对信号是有条件的,满足这样的条件就“等于”,不满足条件就“不等于”,或者只能说“近似等于”。
什么条件?也就是这些数据必须是一个周期函数的整数个周期的样本,如果不是,则它自动认为是以这一组样本无限重复组成的周期函数变换的结果。
如果是整数周期样本,在这些个频率点上数据可以精确的表示振动的振幅和相位,而在这些点之间的频率上都等于零。
如果非整数周期采样,则好比在无穷样本上加窗,由于有所谓的功率泄漏,在这些点上只能“近似”表示振幅和相位。两个相邻频率点之间的频率上得到信号,这才通常用简单插值方法“估计”出其振幅。
所以在本文作者麦特累柏给出的样本是一段15,40Hz整数频率采样,并不满足整数采样的原则,无论它计算整数频率分辨率点上或通常使用的整数频率上都只能得到振幅的“估计值”。其实你将采样频率从100改成128,256等数就可以了。
 楼主| 发表于 2019-3-6 09:12 | 显示全部楼层
qiaohai 发表于 2019-2-28 16:04
使用FFT时应注意点:
FFT是离散傅里叶变换,它和傅里叶变换是有区别的。
“傅里叶变换得到频谱图”,这句 ...

学习了,谢谢啦
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-25 16:45 , Processed in 0.092226 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表