numpy数组的光谱质心

鸽子

我有一个.wav文件(在本例中为“ piano2.wav”)。

我想在python中找到频谱的质心。

使用另一篇文章中的代码,我有这个功能:

import numpy as np
from scipy.io.wavfile import read

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

我使用scipy.io.wavfile.read将wav文件读入numpy数组,然后尝试将其输入上述函数

a=read("piano2.wav")
print("Spectral centroid is " + spectral_centroid(a[1]))

这是我得到的错误

  File "test.py", line 20, in <module>
    print("Spectral centroid is " + spectral_centroid(a[1]))
  File "test.py", line 8, in spectral_centroid
    return np.sum(magnitudes*freqs) / np.sum(magnitudes) 
ValueError: operands could not be broadcast together with shapes (302712,2) (151357,)
伊利亚

您正在尝试将不同形状的数组(magnitudesfreqs相乘

a = np.arange(10)
b = np.arange(5)
print(a*b)

ValueError:操作数不能与形状(10,)(5,)一起广播

这可以帮助:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章