gpt4 book ai didi

python - 如何从 wav 文件中获取振幅和频率列表

转载 作者:行者123 更新时间:2023-12-02 22:43:38 24 4
gpt4 key购买 nike

我们正在尝试构建一个程序以从 .wav 文件中获取振幅和频率列表,并在 Python 中进行尝试。

我们尝试了pyaudio,因为我对pyaudio了解不多,所以我需要一些建议。

import scipy
import numpy as np

file = '123.wav'
from scipy.io import wavfile as wav
fs, data = wav.read(file)
length=len(data.shape)
#if length==2:
# data= data.sum(axis=1)/2
n = data.shape[0]
sec = n/float(fs)
ts = 1.00/fs
t = scipy.arange(0,sec,ts)
FFT = abs(scipy.fft(data))
FFT_size = FFT[range(n//2)]
freq = scipy.fftpack.fftfreq(data.size, t[1]-t[0])
max_freq = max(freq)
min_freq = min(freq)
plot_freq(freq, n, t, data)

实际返回的结果是频率列表。我也想要振幅列表不知道怎么弄。

最佳答案

通常,对 fft api 的调用将返回一个虚数数组,其中每个数组元素都包含一个形式为 (Areal, AImaginary) 的复数,其中数组的每个元素代表一个频率(频率的值为由数组索引隐含[根据数组索引找到计算频率的公式])

在复数数组元素 0 表示频率 0,这是您的直流偏移量,然后使用以下方法计算每个后续频率的频率

incr_freq := sample_rate / number_of_samples

因此,为了使其有意义,您必须事先了解源输入时间序列(音频或其他)的采样率,并且样本数只是您输入 fft 的浮点原始音频曲线数组的长度打电话

...当您遍历这个复数数组时,使用公式使用每个频率仓的复数的面积和 AI 虚数计算振幅

curr_mag = 2.0 * math.Sqrt(curr_real*curr_real+curr_imag*curr_imag) / number_of_samples

当您遍历从您的 fft 调用返回的复杂数组时,请注意Nyquist Limit 的概念,这意味着您只消耗该复杂数组元素数量的前半部分(并加倍每个频率的大小 - 见上面的公式)

... 查看完整伪代码 Get frequency with highest amplitude from FFT

...我运行了你的代码,什么也没发生...你的python是什么意思

[range(n//2)]

关于python - 如何从 wav 文件中获取振幅和频率列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55991589/

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