【问题标题】:Can anyone guide me on how to calculate the frequency in hz from wav file? The wave file is of 50 secs谁能指导我如何从 wav 文件中计算以 hz 为单位的频率?波形文件为 50 秒
【发布时间】:2021-03-16 13:11:32
【问题描述】:

我正在使用 numpy 库来计算 freq = 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]

【问题讨论】:

  • 您的代码没有运行。请先修复代码。
  • 运行良好,让我在这里分享更多代码并进行编辑。
  • @orlp 请再次检查。谢谢。
  • 你仍然没有在任何地方定义rate
  • @orlp 抱歉,已进行更改。

标签: python numpy scipy fft frequency


【解决方案1】:

numpy FFT 包有一个内置函数来计算频率向量以配合您的 FFT 输出。请注意,scipy 输出样本 rate,而 numpy 想要样本 spacing,因此您必须先反转它。

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 的输出将以周期/秒即赫兹为单位。

【讨论】:

  • 我正在生成高于 18 khz 的频率,这些频率存储在 wav 文件中。当我应用上面的代码时,文件是 50 secs 还是 3 secs 。我获得了从 0 到 24000 的频率,在 3 秒内 2 个连续频率之间的间隔间隙较大,在 50 秒内获得低间隔间隙。
  • 当我生成高于 18 khz 的频率时,我怎么会从 0 开始。
  • @Andrew 你的采样率是多少?您可以在 FFT 中看到的最高频率是采样频率的 1/2。您可以看到的最低频率由数据中的样本数量决定(您应该始终通过 FFT 中的 0 点)。
猜你喜欢
  • 2011-09-11
  • 2018-10-02
  • 1970-01-01
  • 1970-01-01
  • 2021-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多