gpt4 book ai didi

python - 使用python通过fft进行频谱图

转载 作者:行者123 更新时间:2023-12-03 02:32:39 27 4
gpt4 key购买 nike

我正在尝试理解一段代码,我认为该代码首先尝试应用滤波器,然后计算FFT。
我不知道它是怎么做到的。谁能给我解释一下。
这是代码:

# Parameters to create the spectrogram
N = 160000 # No. of frames in .wav file
K = 512
step = 4
wind = 0.5 * (1 - np.cos(np.array(range(K)) * 2 * np.pi / (K - 1))) # 0.5*2*sin(o/2), creation of filter window
ffts = []
def wav_to_floats(file):
s = wave.open(file, 'r')
str_sig = s.readframes(s.getnframes())
y = np.fromstring(str_sig, np.short)
s.close()
return y

for file_index in range(len(label)):
test_flag = label.iloc[file_index]['fold'] # 0 - training data, 1 - test data
fname = label.iloc[file_index]['filename']

#-------------from here i dont understand mainly------------
spectogram = []
s = wav_to_floats(essential_folder+'src_wavs/'+fname+'.wav')
for j in range(int((step*N/K) - step)):
vec = s[j * K/step : (j+step) * K/step] * wind
spectogram.append(abs(fft(vec, K)[:K / 2]))

ffts.append(np.array(spectogram))

最佳答案

首先,它将文件从wav转换为float(s = wav_to_floats(essential_folder+'src_wavs/'+fname+'.wav')`
,因为要计算fft,您需要一个浮点数。之后,它会在信号和窗口(可能是窗口滤波器)之间进行卷积

for j in range(int((step*N/K) - step)):
vec = s[j * K/step : (j+step) * K/step] * wind

取fft的模数(因为fft为您提供了一个复数,该复数包含有关模数和相位的信息)并将此 vector 添加到ffts

关于python - 使用python通过fft进行频谱图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47434796/

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