gpt4 book ai didi

Python - 傅里叶变换错误频率

转载 作者:行者123 更新时间:2023-12-01 08:08:05 28 4
gpt4 key购买 nike

我试图使用快速傅里叶变换和 numpy 查找从 wav 文件中获取的数字数组的频率,但是我收到了错误频率的输出。

这是我的代码:

from pydub import AudioSegment
import numpy as np

np.set_printoptions(threshold=np.inf)

sound = AudioSegment.from_mp3("500Hz.wav")

raw_data = sound.raw_data
raw_data = np.fromstring(raw_data, dtype=np.int16)

print(raw_data[:2000:21])

wave = raw_data
fft = np.fft.rfft(wave)
fft = np.abs(fft)

print(max(list(fft)))
print(list(fft).index(max(list(fft))))

fft = np.array([int(i) for i in fft])

500Hz.wav 文件是使用 Audacity 创建的 3 秒的 500Hz 音频波。

代码返回以下内容:

[     0  26138   3906 -25559  -7727  24402  11370 -22702 -14767  20496
17830 -17830 -20498 14763 22701 -11374 -24400 7728 25557 -3907
-26140 0 26141 3905 -25555 -7728 24404 11373 -22704 -14767
20496 17831 -17829 -20493 14765 22698 -11375 -24404 7725 25553
-3906 -26138 -1 26141 3907 -25559 -7726 24402 11375 -22702
-14765 20497 17830 -17831 -20498 14762 22700 -11374 -24401 7726
25557 -3906 -26141 2 26139 3912 -25556 -7728 24401 11376
-22702 -14767 20499 17830 -17830 -20496 14766 22704 -11372 -24405
7725 25559 -3906 -26141 -1 26139 3906 -25556 -7725 24404
11373 -22702 -14769 20495 17831 -17832]
2046217405.9084692
1770

这表明峰值位于 1770Hz,而不是 500Hz,我不确定是什么原因造成的。如果我缺少任何信息,请告诉我,以便我将其添加到问题中!

编辑:该文件位于 https://ufile.io/nk7j9

最佳答案

对应于索引 1770 的频率取决于帧的持续时间。例如,如果帧持续 3秒,索引频率ii/3赫兹。零频率对应于信号的平均值或直流分量:它目前为零。如果索引 1770 对应于 500Hz,则帧的持续时间可能约为 3.22 秒。 由于使用 pydub 读取文件,可以使用 len(sound) 以毫秒为单位检索此持续时间

即使信号是正弦波,离散傅立叶变换 (DFT) 的峰值也可能跨越多个频率。只要帧的长度不是正弦波周期的倍数,就会发生这种情况,称为 spectral leakage 。它可以通过应用 window 来调和。在 DFT 之前。

最后,用作输入的正弦波的周期可能与 DFT 的离散频率不同。因此,使用最高振幅的指数来估计正弦波的频率可能会稍微错误。为了纠正这个问题,DFT 幅度峰值的实际频率可以估计为其相对于功率密度的平均频率,请参见 Why are frequency values rounded in signal using FFT?

关于Python - 傅里叶变换错误频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55434171/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com