Python 属性错误:';模块';对象没有属性';光谱图';

Python 属性错误:';模块';对象没有属性';光谱图';,python,python-2.7,numpy,audio,scipy,Python,Python 2.7,Numpy,Audio,Scipy,目前,我正在编写一个python脚本,它应该执行以下操作: 通过scipy.io.wavfile.read()分别读取音频文件和wav文件 计算给定wav文件的频谱图 将光谱图中的数据写入wav文件 尝试运行脚本时,出现以下错误: Traceback (most recent call last): File "demo2.py", line 61, in <module> F,T,S = scipy.signal.spectrogram(s_mono,rate,wi

目前,我正在编写一个python脚本,它应该执行以下操作:

  • 通过scipy.io.wavfile.read()分别读取音频文件和wav文件
  • 计算给定wav文件的频谱图
  • 将光谱图中的数据写入wav文件
尝试运行脚本时,出现以下错误:

Traceback (most recent call last):
  File "demo2.py", line 61, in <module>
    F,T,S = scipy.signal.spectrogram(s_mono,rate,window,None,nOverlap,nFFT)
AttributeError: 'module' object has no attribute 'spectrogram'

附加信息:我正在使用MacOS 10.9.5开发MacBook,因为没有signal.py,请卸载scipy并重新安装,而不使用pip。从他们的网站上获取。使用pip获取它似乎总是有问题。

请查看这是否适用于您:

from scipy import signal
import numpy as np
import math
import matplotlib.pyplot as plt

t = np.arange(10000)
sig = np.sin(2. * math.pi * 1 / 1000. * t)
f, t, Sxx = signal.spectrogram(sig, 1.)
plt.pcolormesh(t, f, Sxx)
plt.ylabel('Frequency [Hz]')
plt.xlabel('Time [sec]')
plt.show()
它适用于python 2.7和scipy 0.19


如果这对您有效,那么您可能会在脚本中导致一些奇怪的名称空间错误(调用变量
signal
,等等)。

我对此也有问题。。。因为我的变量赋值错误

这是我读取和处理wav文件的方式。请注意,wave文件需要去除元数据(我使用ffmpeg来做到这一点)


有趣的是,我用F,T,S=signal.spectrogram(S_mono,rate,window,None,nOverlap,nFFT)尝试了它,但我得到了相同的错误。您使用的是哪种python版本?如何命名您自己的python脚本文件?好的。现在,请尝试删除“从scipy导入信号”,但保留“F,T,S=scipy.signal.spectrogram(S_mono,rate,window,None,novellap,nFFT)”原样。@BangTheBank:我使用的是Python 2.7.5。@AporlyDrawnape:我以前也尝试过这个,但没有成功:/当我尝试调用signal.spectrogram时,我得到一个属性错误。您是否尝试过以下操作:
从scipy.signal import spectrum as spcl;sss=spcl.光谱图(x,fs)
它适用于周期图、welch和Lombscagle,但不适用于csd、相干和光谱图。Spectrogram函数位于spectrum.py中。有专家建议吗?谢谢-测试正常。Python3.9MacBigsur。那么我的答案对你有用吗?基本上是的。我重新安装了我所有的东西。我的电脑上似乎有两个版本的scipy,这也造成了麻烦。现在一切正常。
from scipy import signal
import numpy as np
import math
import matplotlib.pyplot as plt

t = np.arange(10000)
sig = np.sin(2. * math.pi * 1 / 1000. * t)
f, t, Sxx = signal.spectrogram(sig, 1.)
plt.pcolormesh(t, f, Sxx)
plt.ylabel('Frequency [Hz]')
plt.xlabel('Time [sec]')
plt.show()
from scipy import signal
import numpy as np
import math
import matplotlib.pyplot as plt

import soundfile as sf
from matplotlib import pyplot as plt
datasignal, fs_rate= sf.read('40m_stripped.wav')
print(f"Data shape is {datasignal.shape}")
sig=datasignal[::,0]
print(f"Sig shape is {sig.shape}")
f, t, Sxx = signal.spectrogram(sig, fs_rate)
plt.pcolormesh(t, f, Sxx)
plt.ylabel('Frequency [Hz]')
plt.xlabel('Time [sec]')
plt.show()