AttributeError:“模块”对象没有属性“频谱图”

Posted

技术标签:

【中文标题】AttributeError:“模块”对象没有属性“频谱图”【英文标题】:AttributeError: 'module' object has no attribute 'spectrogram' 【发布时间】:2017-04-09 14:49:57 【问题描述】:

目前,我正在编写一个 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'

这很奇怪,因为在我看来我的代码应该可以正常工作。我已经检查了语法错误,并且还查看了官方 scipy 文档,但我找不到任何线索可能有什么问题。

这是我的代码的一个小sn-p:

import scipy
from scipy import signal
import scipy.io.wavfile as wav
#---------------------------------

# here's the rest of my code    

F,T,S = scipy.signal.spectrogram(s_mono,rate,window,None,nOverlap,nFFT)

附加信息:我正在使用装有 MacOS 10.9.5 的 MacBook

【问题讨论】:

所以我的回答对你有用吗? 基本上是的。我重新安装了我拥有的所有东西。而且我的电脑上似乎有两个版本的 scipy,这也造成了麻烦。现在一切正常。 【参考方案1】:

由于没有signal.py,卸载scipy重新安装,不使用pip。从他们的网站上获取。用 pip 获取它似乎总是有问题。

【讨论】:

有趣的是,我尝试使用 F,T,S = signal.spectrogram(s_mono,rate,window,None,nOverlap,nFFT) 但我得到了同样的错误。 您使用的是哪个 python 版本?它是如何命名你自己的 python 脚本文件的? 好的。现在尝试删除“from scipy import signal”,但保持“F,T,S = scipy.signal.spectrogram(s_mono,rate,window,None,nOverlap,nFFT)”的原样。 @BangTheBank:我使用的是 Python 2.7.5。 @apoorlydrawnape:我之前也试过这个,但是没用:/【参考方案2】:

请看看这是否适合你:

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 等)。

【讨论】:

当我尝试调用signal.spectrogram时,我得到一个属性错误。 您是否尝试过以下方法:from scipy.signal import spectral as spcl; sss = spcl.spectrogram(x, fs) 它适用于周期图、韦尔奇和 lombscargle,但不适用于 csd、相干性和频谱图。频谱图函数驻留在spectral.py 中。有专家建议吗? 谢谢 - 测试工作正常。 Python 3.9 Mac BigSur。【参考方案3】:

我也遇到了这个问题......由于我的变量分配错误。

这就是我读取和处理 wav 文件的方式。请注意,wave 文件需要剥离元数据(我使用 ffmpeg 来执行此操作)

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()

【讨论】:

以上是关于AttributeError:“模块”对象没有属性“频谱图”的主要内容,如果未能解决你的问题,请参考以下文章

AttributeError:“模块”对象没有属性

AttributeError:“模块”对象没有属性“百分位”

AttributeError:“模块”对象没有属性

无法安装模块 - AttributeError: 'NoneType' 对象没有属性 'loader'

AttributeError:“模块”对象没有属性“urlopen”

AttributeError:“模块”对象没有属性“ORB”