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

2024-06-28 11:37:44 发布

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

我正在尝试将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

这是色度图的代码:

^{pr2}$

当我计算fft时,我得到了一个具有复值的数组,所以在计算色度之前,我必须将结果转换成float。我做错什么了吗?在

另外,如何绘制结果?在


Tags: 文件fft密码defscipyfsframe彩色图像
1条回答
网友
1楼 · 发布于 2024-06-28 11:37:44

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

如果您不想将Bregman Audio-Visual Information Toolbox用于色度特性,并且想为自己实现它们,那么可以将Matlab Chroma Toolbox移植。我想他们用滤波器组而不是FFT。在这一页,你可以找到详细解释色度特性的参考资料。在

不管怎样,如果你有色度特征,你可以像任何二维数组一样用^{}来绘制它们。在

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

random imshow example

相关问题 更多 >