大河向东流! 2022-04-20 23:26 采纳率: 50%
浏览 57
已结题

做语音信号预处理分帧加窗时,出来的图不对,不知道问题出在哪里,有知道的朋友看一下


import matplotlib.pyplot as plt
wlen = 512
inc = 128
f = wave.open(r"E:/voice/12.wav", "rb")
params = f.getparams()
print(params)
nchannels, sampwidth, framerate, nframes = params[:4]
str_data = f.readframes(nframes)
wave_data = np.fromstring(str_data, dtype=np.short)
wave_data = wave_data*1.0/(max(abs(wave_data)))
print(wave_data[:10])
time = np.arange(0, wlen) * (1.0 / framerate)
signal_length = len(wave_data)  # 信号总长度
if signal_length <= wlen:  # 若信号长度小于一个帧的长度,则帧数定义为1
        nf = 1
else:  # 否则,计算帧的总长度
        nf = int(np.ceil((1.0*signal_length-wlen+inc)/inc))
pad_length = int((nf-1)*inc+wlen)  # 所有帧加起来总的铺平后的长度
zeros = np.zeros((pad_length-signal_length,))  # 不够的长度使用0填补,类似于FFT中的扩充数组操作
pad_signal = np.concatenate((wave_data, zeros))  # 填补后的信号记为pad_signal
indices = np.tile(np.arange(0, wlen), (nf, 1))+np.tile(np.arange(0, nf*inc, inc), (wlen, 1)).T  # 相当于对所有帧的时间点进行抽取,得到nf*nw长度的矩阵
print(indices[:2])
indices = np.array(indices, dtype=np.int32)  # 将indices转化为矩阵
frames = pad_signal[indices]  # 得到帧信号
a = frames[30:31]
print(a[0])
plt.figure(figsize=(10, 4))
plt.plot(time, a[0], c="g")
plt.grid()
plt.show()
问题遇到的现象和发生背景

img

问题相关代码,请勿粘贴截图
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果
  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 4月28日
    • 创建了问题 4月20日

    悬赏问题

    • ¥15 pcl运行在qt msvc2019环境运行效率低于visual studio 2019
    • ¥15 MAUI,Zxing扫码,华为手机没反应。可提高悬赏
    • ¥15 python运行报错 ModuleNotFoundError: No module named 'torch'
    • ¥100 华为手机私有App后台保活
    • ¥15 sqlserver中加密的密码字段查询问题
    • ¥20 有谁能看看我coe文件到底哪儿有问题吗?
    • ¥20 我的这个coe文件到底哪儿出问题了
    • ¥15 matlab使用自定义函数时一直报错输入参数过多
    • ¥15 设计一个温度闭环控制系统
    • ¥100 rtmpose姿态评估