matlab 离散傅里叶变换_傅里叶变换

傅里叶变换是一种线性积分变换,用于信号在时域(或空域)和频域之间的变换,在物理学和工程学中有许多应用。

1.傅里叶级数

先从傅里叶级数讲起,任何周期函数都可以展开为正弦和余弦函数的和。

周期为2

的 f(x), 能展开成,

e545cd5f2ffaf79ff14f6ff567dee443.png

或者写成

其中Fn为复振幅。

2. 连续傅里叶变换

继续延申傅里叶级数的思想,计算连续傅里叶变换,即把用积分代替求和。

连续傅里叶变换将可积函数 f(t) 成 复指数函数的积分或级数形式。

61ce95eb9f211e48d87392a6c55ebfbf.png

傅里叶变换逆变换为

3e5bd482f1b3c5c0cad94a852a7b47ad.png

代表角频率。

3. 离散傅里叶变换

类似的,离散时间信号x(n) 的离散傅里叶变换DTFT (Dicrete time Fourier transform)可以写为

1c65a7b3ff477f84d8400c45b124969c.png

逆变换为

105e5978a034c0ff6f85974a0061d702.png

表示频谱,一般为复数。注意DTFT中,时域是离散的,而频域依然是连续的。对DTFT频域离散采样之后的操作,称为离散傅里叶变换(DFT)。

如果还不懂的话,可以看这个: 一幅图弄清DFT与DTFT,DFS的关系。

一幅图弄清DFT与DTFT,DFS的关系 - BitArt - 博客园​www.cnblogs.com
f85074316a8cadb43fa0e0e7f0d42a0e.png

4. 快速傅里叶变换

在离散傅里叶变换(DFT)上,当N很大时,直接计算的方法,耗时太久。因此,有研究者提出了很多快速傅里叶变换(FFT)的算法。

matlab实现快速傅里叶变换

----

clear;clc

Fs = 1000; % 采样频率

T = 1/Fs; % 采样周期

L = 1000; % 信号长度 由此知,频率分辨率为 1hz

t = (0:L-1)*T; % 时间相量

S = 0.7*sin(2*pi*50*t+pi/4) + sin(2*pi*150*t-pi/2); % 原始函数

Y = fft(S);

P2 = abs(Y/L); % 每个量除以数列长度 L

P1 = P2(1:L/2+1); % 取交流部分

P1(2:end-1) = 2*P1(2:end-1); % 交流部分模值乘以2

f = Fs*(0:(L/2))/L; %横坐标频率

plot(f,P1)

title('Single-Sided Amplitude Spectrum of S(t)')

xlabel('f (Hz)')

ylabel('|P1(f)|')

----

(引用自

葛底斯堡:matlab之快速傅里叶变换(fft)​zhuanlan.zhihu.com

得到结果如下:

377d04a678fde8b8b645cd19e79a7bc0.png

特别要注意的有两点

1). fft之后的实数值部分,并不是真的amplitude,还需要 abs(z1)/L*2;

2). 横坐标,频率的计算;

5. 功率谱 (Power Spectral density, PSD)

根据Weiner-Khintchine 定理,信号的功率谱和其自相关函数服从一对傅里叶变换公式,

6ae3caf00eb903489249e41116f7a421.png

但是实际计算中,会遇到两个问题 (a)不可能获得无限长度的信号 (b)有噪音。

谱估计方法分为经典和现在方法。

参考文献

  1. https://en.wikipedia.org/wiki/Fourier_transform
  2. 数字信号处理 姚天任
  3. https://blog.csdn.net/czyt1988/article/details/84995295
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值