介绍
这篇文章给大家分享的是有关使用python如何实现DFT的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
<强> DFT 强>
DFT(离散傅里叶变换),离散傅里叶变化,可以将离散信号变换到频域,它的公式非常简单:
好的,通过上面的表示,我们很容易将DFT理解成为一种矩阵相乘的操作,这对于我们编码是很容易的。
<强>说说很简单,给我代码强>
根据上面的理解,我们只需要构建出年代党卫军矩阵,然后做矩阵相乘,就等得到DFT的结果
在这之前,我们先介绍如何生成正弦信号,以及如何用scipy中的fft模块进行DFT操作,以验证我们的结果是否正确
正弦信号
答:幅度
f:信号频率
n:时间下标
T:采样间隔,等于1/fs, fs为采样频率
?\φ?:相位
下面介绍如何生成正弦信号
import numpy as np import matplotlib.pyplot  as plt % matplotlib 内联
def generate_sinusoid (N,, A,, f0, fs,,φ): ,& # 39;& # 39;& # 39; ,N (int): number of 样本 ,一个(浮动):振幅 ,f0(浮动):frequency 赫兹拷贝 ,fs(浮动):sample 率 ,φ(浮动):initial 阶段 , ,return ,x (numpy 数组):,sinusoid signal which lenght is M ,& # 39;& # 39;& # 39; , ,T =1/fs=,,n  np.arange (N), #, [0,1,…,, N - 1)=,,x  A *, np.cos (, 2 * f0 * np.pi * n * T +, phi ) , return x N =511 A 0.8=, f0 =440 fs =44100 phi =0 x =, generate_sinusoid (N,, A,, f0, fs,,φ) plt.plot (x) plt.show ()
#,另一种生成正弦信号的方法,生成时长为t的序列 def generate_sinusoid_2 (t,, A,, f0, fs,,φ): ,& # 39;& # 39;& # 39; ,t (浮动),:,生成序列的时长 ,A (浮动),:振幅 ,f0 (浮动),:频率 ,fs (浮动),:sample 率 ,φ(浮动):initial 阶段 , ,返回 ,x (numpy 数组):sinusoid signal 序列 ,& # 39;& # 39;& # 39; , ,T =1.0/fs=,,N  t /T , ,return generate_sinusoid (N,, A,, f0, fs,,φ) A 1.0=, f0 =440 fs =44100 phi =0 t 0.02=, x =, generate_sinusoid_2 (t,, A,, f0, fs,,φ) 时间=n np.arange (0.02 0,,,, 1/fs) plt.plot (n, x)
<强> Scipy FFT 强>
介绍如何Scipy的FFT模块计算DFT
注意,理论上输入信号的长度必须是使用python如何实现DFT