簡體   English   中英

誰能指導我如何從 wav 文件中計算以 hz 為單位的頻率? 波形文件為 50 秒

[英]Can anyone guide me on how to calculate the frequency in hz from wav file? The wave file is of 50 secs

我正在使用 numpy 庫來計算頻率 = np.fft.rfftfreq(len_data, 1.0 / rate),如果我沒有錯,那么這個頻率是沒有單位的。 我怎樣才能把它轉換成赫茲 我正在使用以下代碼:


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]

The numpy FFT package has a built-in function to calculate the frequency vector to go along with your FFT output. 請注意, scipy輸出采樣,而numpy需要采樣間隔,因此您必須先反轉它。

import numpy as np

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

Since the output of scipy.io.wavfile.read claims to be in samples/sec, the output of np.fft.fftfreq will be in cycles/sec aka Hertz.

暫無
暫無

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

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