离散傅里叶变换

2022-05-29 10:11:20 浏览数 (2)

代码语言:javascript复制
import numpy as np#主要用于信号处理相关操作
import matplotlib.pyplot as plt#主要用于数据可视化操作
def DFT(sig):
#离散傅里叶变换
    t=np.linspace(0,1.0,len(sig))#创建等间隔时间序列
    f=np.arange(len(sig)//2 1,dtype=complex)
    for index in range(len(f)):
#计算公式2.1.2,重复上述步骤④~⑥获得傅里叶变换结果
        f[index]=complex(np.sum(np.cos(2*np.pi*index*t)*sig),
                -np.sum(np.sin(2*np.pi*index*t)*sig))
    return f
if __name__=='__main__':
    sampling_rate=1000 #采样率
    t=np.arange(0, 10.0, 1.0/sampling_rate)#时间轴
    N=30
    x =np.sin(N*np.pi*t)#定义信号,周期为T=2*pi/N*pi=1/15,频率为1/T=15
    x_ft=DFT(x)/len(x)#对信号进行傅里叶变换
    freqs = np.linspace(0, sampling_rate//2, len(x)//2 1)#信号频率
    #输出原正弦波信号
    plt.xlabel("Time")
    plt.ylabel("Amplitude($m$)")
    plt.title("Original Signal")
    plt.xlim(0,1000)
    plt.plot(x)
    #输出DFT后的信号频谱,此处应为频率=15的幅频曲线
    plt.figure(figsize=(16,4))
    plt.plot(freqs,2*np.abs(x_ft),'b-')
    plt.xlabel("Frequency(Hz)")
    plt.ylabel("Amplitude($m$)")
    plt.title("Amplitude-Frequency Curve")
    plt.xlim(0,100)
    plt.show()

算法:离散傅里叶变换(Discrete Fourier Transform,DFT)是将信号从时域变换到频域计算信号的频谱,进而研究信号的频谱结构和变化规律。

0 人点赞