谁能指导我如何从wav文件中计算频率(以hz为单位)?波形文件为50秒

2024-04-20 10:40:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用numpy库计算freq=np.fft.rfftfreq(len_数据,1.0/速率),如果我没有错,那么这个频率没有单位如何将其转换为赫兹。我正在使用以下代码:


import numpy as np
import scipy.io.wavfile
from scipy import signal

def read_wav_file(file_name):
    sample_rate, Data_audio  = scipy.io.wavfile.read(file_name)
    return sample_rate, Data_audio 

def getFFT(Data_audio, sample_rate):
    len_data = len(Data_audio)
    Data_audio = Data_audio * np.hamming(len_data)
    fft = np.fft.rfft(Data_audio)
    fft = np.abs(fft)
    ret_len_FFT = len(fft)
    freq = np.fft.rfftfreq(len_data, 1.0 / sample_rate)
    return ( freq[:int(len(freq))], fft[:int(ret_len_FFT)], ret_len_FFT )

sample_rate_rec, Data_audio_rec = read_wav_file('2020rec.wav')

frequency_rec, fft_rec, ret_lenFFT_rec = getFFT(Data_audio_rec, sample_rate_rec)

print("frequency_rec: " + str(frequency_rec) )

**Output**
frequency_rec: [0.00000000e+00 8.33481508e-03 1.66696302e-02 ... 2.39999833e+04
 2.39999917e+04 2.40000000e+04]


# To convert frequencies into float format
np.set_printoptions(formatter={'float':'{:f}'.format})
print("frequency_rec: " + str(frequency_rec) )

**Output**
frequency_rec: [0.000000 0.008307 0.016614 ... 23999.983386 23999.991693 24000.000000]

Tags: sampleimportfftreaddatalenratenp
1条回答
网友
1楼 · 发布于 2024-04-20 10:40:32

numpy FFT软件包有一个内置函数,用于计算与FFT输出一起使用的频率向量。请注意,scipy输出采样速率wilenumpy想要采样间隔,因此必须先将其反转

import numpy as np

def getFrequencies(Data_audio, sample_rate_rec):
    return np.fft.fftfreq(n=len(Data_audio), d=1/sample_rate)

由于scipy.io.wavfile.read的输出声称以采样数/秒为单位,因此np.fft.fftfreq的输出将以循环数/秒(也称为赫兹)为单位

相关问题 更多 >