人丑就要多读书吖 2023-04-20 17:13 采纳率: 15.4%
浏览 25

python实现STFT时频分析,出现错误ValueError: too many values to unpack (expected 2)怎么解决?

python实现STFT时频分析,出现错误ValueError: too many values to unpack (expected 2)怎么解决?


window = 'hann'
# STFT
f, t, Z = stft(x, fs=fs, window=window, nperseg=N)
# 求幅值
Z = np.abs(Z)
# 如下图所示
plt.pcolormesh(t, f, Z, shading='auto', cmap='jet_r')
plt.xlabel('时间 t/s', fontsize=16)
plt.ylabel('频率 f/Hz', fontsize=16)
plt.title('STFT', fontsize=20)
plt.show()
  • 写回答

1条回答 默认 最新

  • 卿游 2023-04-20 19:43
    关注

    错误 ValueError: too many values to unpack (expected 2) 通常是由于在赋值时,左右两边数量不一致导致的。根据你提供的代码,出现此错误的原因可能是在使用 stft 函数时,返回的参数数量与你期望的不一致。

    一种可能的解决方案是检查 stft 函数的返回值是否正确。该函数通常会返回三个参数,分别对应 STFT 的频率、时间和结果。请确保你从 stft 函数中得到了这三个参数。你可以通过打印输出来检查它们的数量。

    如果你已经检查过 stft 函数的返回值,并且确认它们没有问题,那么你还可以尝试使用 * 运算符来收集多余的返回值,以避免出现此错误。

    以下是可能适用于你的代码的修改建议:

    f, t, *Z = stft(x, fs=fs, window=window, nperseg=N)

    求幅值

    Z = np.abs(Z[0])

    如下图所示

    plt.pcolormesh(t, f, Z, shading='auto', cmap='jet_r')
    plt.xlabel('时间 t/s', fontsize=16)
    plt.ylabel('频率 f/Hz', fontsize=16)
    plt.title('STFT', fontsize=20)
    plt.show()
    这里使用 *Z 来收集多余的返回变量,确保 Z 变量只包含一个数组,然后在对 Z 变量进行处理时,使用 Z[0] 来获取该数组。

    评论

报告相同问题?

问题事件

  • 创建了问题 4月20日

悬赏问题

  • ¥15 更换了一个新的win10系统,再下载VS时碰到的问题,是C++组件的?
  • ¥15 关于罗技鼠标宏lua文件的问题
  • ¥15 halcon ocr mlp 识别问题
  • ¥15 已知曲线满足正余弦函数,根据其峰值,还原出整条曲线
  • ¥20 无法创建新的堆栈防护界面
  • ¥15 sessionStorage在vue中的用法
  • ¥15 wordpress更换域名后用户图片头像不显示
  • ¥15 如何在ubunto上安装CEF (Chromium Embedded Framework),并且基于qt实现打开一个web
  • ¥30 AD9854 为什么输出波形幅度受限,AI机器人勿扰
  • ¥15 如何在ubunto上安装CEF (Chromium Embedded Framework