weixin_56506825 2022-11-10 14:46 采纳率: 62.5%
浏览 155
已结题

运行后出来的是直线,跟作者的不一样,请问是错哪儿了了?


'''加窗'''
import numpy as np
import librosa.display  # 导入音频及绘图显示包
import matplotlib.pyplot as plt  # 导入绘图工作的函数集合

# 读取音频文件
# 读取语音文件并绘制波形图
times = librosa.get_duration(filename='D:\\信号与音频\\录音文件\\run.wav.wav')  # 获取音频时长
# 返回音频采样数组及采样率
y, sr = librosa.load('D:\\信号与音频\\录音文件\\run.wav.wav', sr=8000, offset=0.0, duration=None)
# x = np.arange(0, times, 1/sr)  # 时间刻度

# 分帧
def frame(x, lframe, mframe):  # 定义分帧函数
    signal_length = len(x)  # 获取语音信号的长度
    fn = (signal_length-lframe)/mframe  # 分成fn帧
    fn1 = np.ceil(fn)  # 将帧数向上取整,如果是浮点型则加一
    fn1 = int(fn1)  # 将帧数化为整数
    # 求出添加的0的个数
    numfillzero = (fn1*mframe+lframe)-signal_length
    # 生成填充序列
    fillzeros = np.zeros(numfillzero)
    # 填充以后的信号记作fillsignal
    fillsignal = np.concatenate((x,fillzeros))  # concatenate连接两个维度相同的矩阵
    # 对所有帧的时间点进行抽取,得到fn1*lframe长度的矩阵d
    d = np.tile(np.arange(0, lframe), (fn1, 1)) + np.tile(np.arange(0, fn1*mframe, mframe), (lframe, 1)).T
    # 将d转换为矩阵形式(数据类型为int类型)
    d = np.array(d, dtype=np.int32)
    signal = fillsignal[d]
    return(signal, fn1, numfillzero)
lframe = int(sr*0.025)  # 帧长(持续0.025秒)
mframe = int(sr*0.001)  # 帧移
# 函数调用,把采样数组、帧长、帧移等参数传递进函数frame,并返回存储于endframe、fn1、numfillzero中
endframe, fn1, numfillzero = frame(y, lframe, mframe)

# 对第一帧进行加窗
hanwindow = np.hanning(lframe)  # 调用汉明窗,把参数帧长传递进去
signalwindow = endframe[0]*hanwindow  # 第一帧乘以汉明窗
x1 = np.arange(0, lframe, 1)  # 第一帧采样点刻度
x2 = np.arange(0, lframe/sr, 1/sr)  # 第一帧时间刻度
# 显示波形图
plt.figure()
plt.plot(x1, signalwindow)
plt.xlabel('point')  # x轴
plt.ylabel('wave')  # y轴
plt.title('firstflame hanningwindow wave', fontsize=12, color='black')
plt.show()
plt.figure()
plt.plot(x2, signalwindow)
plt.xlabel('times')  # x轴
plt.ylabel('wave')  # y轴
plt.title('firstflame hanningwindow wave', fontsize=12, color='black')
plt.show()

img


这个是我做的

img


这个是作者的

  • 写回答

10条回答 默认 最新

  • 一切因为有你 2022-11-11 14:42
    关注
    获得0.15元问题酬金

    代码里画了两张图,你做的展示的是第一张图,作者做的展示的是第二张图。 你看下你的第二张图是什么样的

    评论

报告相同问题?

问题事件

  • 系统已结题 11月18日
  • 创建了问题 11月10日

悬赏问题

  • ¥15 pragma pack没起作用
  • ¥20 如何实现关闭某一个应用程序后,自动运行一个批处理文件。
  • ¥15 关于 S7-PLCSIM Advanced 5.0本地TCP连接无法读写数据
  • ¥15 关于温度改变石墨烯介电性能(关键词-介电常数)
  • ¥150 HDMI分路器LT86102 的输出在890MHz频点处EMC超标8DB
  • ¥15 druid(相关搜索:数据库|防火墙)
  • ¥15 大一python作业
  • ¥15 preLaunchTask"C/C++: aarch64- apple-darwin22-g++-14 生成活动 文件”已终止,退出代码为-1。
  • ¥60 如何鉴定微信小程序数据被篡改过
  • ¥18 关于#贝叶斯概率#的问题:这篇文章中利用em算法求出了对数似然值作为概率表参数,然后进行概率表计算,这个概率表是怎样计算的呀