gpt4 book ai didi

python - 将stft转换为色度并绘制结果

转载 作者:行者123 更新时间:2023-12-02 22:34:17 26 4
gpt4 key购买 nike

我正在尝试将wav文件的stft转换为色谱图。

这是我的代码:-

def stft(x,fs,framesize,hopsize):
frame = int(framesize*fs)
hop = int(hopsize*fs)
w = scipy.hamming(frame)
X = scipy.array([scipy.fft(w*x[i:i+frame])])
for i in range(0,len(x)-frame,hop)
return X

这是色谱图的代码:
def chromagram(x,fs,framesize,hopsize):
X = stft(x,fs,framesize,hopsize)
chroma = np.fmod(np.round(np.log2(X / 440) * 12), 12)
return chroma

当我计算fft时,我得到了一个具有复杂值的数组,因此我必须在计算色度之前将结果强制转换为float。我在这里做错什么吗?

另外,如何绘制结果?

最佳答案

我认为,这样做是可行的。在X中,您具有复数值的STFT。您可以使用np.abs(X)获得其幅度值。您是否要申请this formula?这是将频率转换为音符,但是在X中没有频率。您可以使用np.fft.fftfreq(framesize, 1.0/fs)获得相应的频率。

如果您不想将Bregman Audio-Visual Information Toolbox用于Chroma功能,并想自己实现它们,则可以移植Matlab Chroma Toolbox。我认为他们使用滤波器组而不是FFT。在此页面的下方,您可以找到有关色度功能的详细说明。

无论如何,如果您具有色度特征,则可以使用 imshow 将它们像任何二维数组一样绘制。

from matplotlib import pyplot as plt
import numpy as np
X = np.random.random((30, 30))
plt.imshow(X)
plt.show()

关于python - 将stft转换为色度并绘制结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20802016/

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