簡體   English   中英

如何繪制頻譜的離散傅立葉圖

[英]How to plot discrete fourier graph of frequency spectrum

我正在嘗試繪制wav文件數據的頻率頻譜。 我得到了一個復數列表,通過測試較小的數字,我知道這些值是正確的。 但是,我不知道如何繪制。 我只知道我應該得到一些像對稱的小條形圖。 但是我的圖不是。 以下是我的代碼和當前圖。

from scipy.io.wavfile import read
import numpy as np
import matplotlib.pyplot as plt
import math

df = read('matches-4.wav')
data = np.array(df[1], dtype=float)[:, 1][2000:2512]  # using right channel


def discrete_fourier_transformation():
    c = []
    for k in data:
        summation = 0
        for j in data:
            summation += j * math.e ** (-1j * (2 * math.pi / len(data)) * j * k)
        c.append(abs(1 / len(data) * summation))
    return c


values = discrete_fourier_transformation()
plt.plot(values)
plt.show()

在此處輸入圖片說明

由於實現離散傅立葉變換時遇到問題,因此無法從圖形中獲得預期的對稱性。

更具體地說,在您的離散傅立葉變換實現中,復指數應包括乘以整數因子,我想這就是您嘗試對jk 但是,您配置循環的方式jk值為實際數據值。 要解決此問題,您應該使用以下命令更新循環以使其超出range(0,len(data)范圍:

def discrete_fourier_transformation():
    c = []
    for k in range(0,len(data)):
        summation = 0
        for j in range(0,len(data)):
            summation += data[j] * math.e ** (-1j * (2 * math.pi / len(data)) * j * k)
        c.append(abs(1 / len(data) * summation))
    return c

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM