使用python如何实现DFT

  介绍

这篇文章给大家分享的是有关使用python如何实现DFT的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

<强> DFT

DFT(离散傅里叶变换),离散傅里叶变化,可以将离散信号变换到频域,它的公式非常简单:

使用python如何实现DFT

使用python如何实现DFT”>离散频率下标为k时的频率大小</p> <p> <img src=

好的,通过上面的表示,我们很容易将DFT理解成为一种矩阵相乘的操作,这对于我们编码是很容易的。

<强>说说很简单,给我代码

根据上面的理解,我们只需要构建出年代党卫军矩阵,然后做矩阵相乘,就等得到DFT的结果

在这之前,我们先介绍如何生成正弦信号,以及如何用scipy中的fft模块进行DFT操作,以验证我们的结果是否正确

正弦信号

使用python如何实现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 ()

使用python如何实现DFT

#,另一种生成正弦信号的方法,生成时长为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)

使用python如何实现DFT

<强> Scipy FFT

介绍如何Scipy的FFT模块计算DFT

注意,理论上输入信号的长度必须是使用python如何实现DFT”>才能做FFT,而Scipy中FFT却没有这样的限制</p> <p>这是因为当长度不等于<img src=使用python如何实现DFT