繁体   English   中英

Python:.wav文件的光谱质心?

[英]Python: Spectral Centroid for a .wav file?

我需要定义一个“频谱质心”函数,该函数将分析音频文件,但无法将数学公式转换为代码。 如果有人可以帮助我,那就太好了,我没主意了。

有问题的公式是:

http://en.wikipedia.org/wiki/Spectral_centroid

我已经能够通过以下方式计算信号的频谱平坦度

def spectral_flatness(x): 
    X_f = fft(x) 
    N = len(X_f) 
    magnitude = abs(X_f[:N/2]) 
    sf = geom_mean(magnitude) / aritm_mean(magnitude) 
    return sf

这是我如何将数学公式转换为代码的示例。 我对此很陌生,因此一小步举动仍然很有挑战性。 我找到了关于几何质心的信息,但是没有关于光谱质心的信息。

我以前从未实现过此方法,但据我了解Wikipedia公式,应该是这样的:

import numpy as np

def spectral_centroid(x, samplerate=44100):
    magnitudes = np.abs(np.fft.rfft(x)) # magnitudes of positive frequencies
    length = len(x)
    freqs = np.abs(np.fft.fftfreq(length, 1.0/samplerate)[:length//2+1]) # positive frequencies
    return np.sum(magnitudes*freqs) / np.sum(magnitudes) # return weighted mean

另一种可能性是使用librosa的spectrum_centroid方法。 音频特征提取有很多有用的方法: 频谱质心

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM