pythons实现信号分帧

功能:信号分帧
输入x为纯信号,是一个numpy的1D张量
输入LenFrame为帧长,是一个整数
输入PatFrame为帧移,是一个整数
输出Frames为分帧后的信号,是一个numpy的1D张量
输出NumFrames为帧数,是一个整数
输出NumFillZero为原信号填充0的个数,是一个整数
调用格式{Frames,NumFrames,NumFillZero=Framed(x,LenFrame,PatFrame)}
调用:

def Framed(x,LenFrame,PatFrame):PointNumbers=len(x)Discover=int(LenFrame-PatFrame)#每帧之间的非重叠部分NumFrames=(PointNumbers-LenFrame)/PatFrame#分成整数帧if (NumFrames-int(NumFrames))==0. :NumFrames=int(NumFrames)else:NumFrames=int(NumFrames)+1#帧号数# 整数且偶数帧#if (NumFrames%2)==0:#    NumFrames=int(NumFrames)#else:#   NumFrames=int(NumFrames)+1NumFillZero=(NumFrames*PatFrame+LenFrame)-PointNumbers#填充0的数目NumFrames=int(NumFrames)+1#在此表示帧数FillZeros=np.zeros(NumFillZero)#生成填充序列PreEmphasis1=np.concatenate((x,FillZeros)) #填补后的信号记为PreEmphasis1,np.concatenate()连接两个维度相同的矩阵# 开始分帧indices=np.tile(np.arange(0,LenFrame),(NumFrames,1))+np.tile(np.arange(0,NumFrames*PatFrame,PatFrame),(LenFrame,1)).T  #相当于对所有帧的时间点进行抽取,得到NumFrames*LenFrame长度的矩阵indices=np.array(indices,dtype=np.int32) #将indices转化为张量Frames=PreEmphasis1[indices] #得到帧信号return(Frames,NumFrames,NumFillZero)

运行:

import numpy as np
# 导入音频及绘图显示包
import librosa.display
# 导入绘图工作的函数集合
import matplotlib.pyplot as plt
times = librosa.get_duration(filename='./bluesky31.wav')  # 获取音频时长单位为秒
y0, sr = librosa.load('bluesky31.wav', sr=8000, offset=0.0, duration=None)  # 返回音频采样数组及采样率
PointNumbers = int(times * sr) + 1
x1 = np.arange(0, PointNumbers, 1)  # 采样点刻度
x2 = np.arange(0, times, 1 / sr)  # 时间刻度
plt.figure()
plt.xlabel("times")
plt.ylabel("amplitude")
plt.title('bluesky31.wav', fontsize=12, color='black')
plt.plot(x2, y0)
plt.show()
LenFrame=int(sr*0.025)#每帧长(持续0.025秒)
PatFrame=int(sr*0.001)
def Framed(x,LenFrame,PatFrame):PointNumbers=len(x)Discover=int(LenFrame-PatFrame)#每帧之间的非重叠部分NumFrames=(PointNumbers-LenFrame)/PatFrame#分成整数帧if (NumFrames-int(NumFrames))==0. :NumFrames=int(NumFrames)else:NumFrames=int(NumFrames)+1#帧号数# 整数且偶数帧#if (NumFrames%2)==0:#    NumFrames=int(NumFrames)#else:#   NumFrames=int(NumFrames)+1NumFillZero=(NumFrames*PatFrame+LenFrame)-PointNumbers#填充0的数目NumFrames=int(NumFrames)+1#在此表示帧数FillZeros=np.zeros(NumFillZero)#生成填充序列PreEmphasis1=np.concatenate((x,FillZeros)) #填补后的信号记为PreEmphasis1,np.concatenate()连接两个维度相同的矩阵# 开始分帧indices=np.tile(np.arange(0,LenFrame),(NumFrames,1))+np.tile(np.arange(0,NumFrames*PatFrame,PatFrame),(LenFrame,1)).T  #相当于对所有帧的时间点进行抽取,得到NumFrames*LenFrame长度的矩阵indices=np.array(indices,dtype=np.int32) #将indices转化为张量Frames=PreEmphasis1[indices] #得到帧信号return(Frames,NumFrames,NumFillZero)
PointNumbers =len(y0)
Frames,NumFrames,NumFillZero = Framed(y0,LenFrame,PatFrame)
x5= np.arange(PointNumbers+NumFillZero-LenFrame,PointNumbers+NumFillZero,1)#最后一帧采样点刻度
x6= np.arange((PointNumbers+NumFillZero-LenFrame)/sr,(PointNumbers+NumFillZero)/sr,1/sr)#最后一帧时间刻度
plt.figure()
#显示最后一帧波形图
plt.figure()
plt.xlabel("point")
plt.ylabel("wave")
plt.title('bluesky31 LastFrames  wave', fontsize=12, color='black')
plt.plot(x5,Frames[NumFrames-1])
plt.show()
plt.figure()
plt.xlabel("times")
plt.ylabel("wave")
plt.title('bluesky31 LastFrames  wave', fontsize=12, color='black')
plt.plot(x6,Frames[NumFrames-1])
plt.show()
x7= np.arange(0,LenFrame,1)#第一帧采样点刻度
x8= np.arange(0,(LenFrame)/sr,1/sr)#第一帧时间刻度
#显示第一帧波形图
plt.figure()
plt.xlabel("point")
plt.ylabel("wave")
plt.title('bluesky31 FirstFrames  wave', fontsize=12, color='black')
plt.plot(x7,Frames[0])
plt.show()
plt.figure()
plt.xlabel("times")
plt.ylabel("wave")
plt.title('bluesky31 FirstFrames  wave', fontsize=12, color='black')
plt.plot(x8,Frames[0])
plt.show()

结果:




pythons实现信号分帧相关推荐

  1. 基于MATLAB的语音信号的时域特性分析(一)——分帧、窗函数

      语音信号是一个非稳态的.时变的信号.但在"短时间"范围内可以认为语音信号是稳态的.时不变的.这个短时间一般值10~30ms.由于有这个特性,故常把语音信号称为"准稳态 ...

  2. python对语音信号读取、分帧、加窗

    python对语音信号读取.分帧.加窗 一.读入音频信号 语音信号有三个重要的参数:声道数.取样频率和量化位数. 声道数:单声道或者双声道 采样频率:一秒钟对声音采样的次数,例如10000HZ代表一秒 ...

  3. 语音信号的分帧、加窗处理

    分帧 语音信号是一个准稳态的信号,若把它分成较短的帧,每帧中可将其看做稳态信号,可用处理稳态信号的方法来处理.为了使一帧与另一帧之间的参数能够平稳过渡,应在相邻两帧之间互相有部分重叠.一般情况下,帧长 ...

  4. 语音信号处理基础(五)——语音分帧与加窗

    文章目录 原理 1.加窗 2.分帧 一般而言语音处理的目的有两种: 一种是对语音信号进行分析,提取特征参数,用于后续处理: 提取的特征参数主要有语音的短时能量和平均幅度.短时平均过零率.短时自相关函数 ...

  5. matlab语音分帧加窗,语音信号的加窗处理

    平稳的随机过程是研究语音信号的主要手段,但是语音信号本身并不是平衡的. 一,语音信号不平稳 语音信号在产生过程中与环境和发声器官的联系很紧密,与各种运动都是相关的,信号本身是不平移的信号.主要是由于发 ...

  6. 语音信号分析(语音分帧)

    语音分帧 不管是进行什么参数分析以及采用什么分析方法,都需要一些预先的处理,如语音信号的数字化.语音信号的端点检测.预加重.加窗和分帧等,这些也是不可忽视的语音信号分析的关键技术.贯穿于语音分析全过程 ...

  7. 语音信号的分帧加窗的matlab实现

    [x,fs,nbits]=wavread('5_1.wav'); x1=enframe(x,200,100);%分帧 x2=enframe(x,hamming(200),100);%加窗 figure ...

  8. 音频处理四:(音频的分帧)

    程序设计四:音频的分帧 一:需求分析 为了分析读人数据,通常进行分帧处理.在分帧中,往往设置在相邻两帧之间有一部分重叠.其原因是:语音信号是时变的,在短时范围内特征变化较小,所以作为稳态来处理;但超出 ...

  9. 语音处理的分帧,帧移,加窗,滤波,降噪,合成

    一.分帧 语音数据和视频数据不同,本没有帧的概念,但是为了传输与存储,我们采集的音频数据都是一段一段 的.为了程序能够进行批量处理,会根据指定的长度(时间段或者采样数)进行分段,结构化为我们编程 的数 ...

最新文章

  1. 生物信息学 Python 入门之源码安装
  2. golang1.13环境变量保存路径 go env -w
  3. 经典C语言程序100例之二零
  4. VRRP——虚拟路由器冗余协议
  5. 一文理清Cookie、Session、Token
  6. 获取场景中指定类的实例
  7. 为什么自己编写的页面总是在那里抖动_「内存抖动」?别再吓唬面试者们了行吗...
  8. C++ 预处理器和名称空间
  9. matplotlib scale 刻度
  10. Powerdesigner数据库建模--概念模型--ER图
  11. JS日历控件优化(增加时分秒)
  12. 【lee】关于团队之间交流的一些意见和建议
  13. java中,正则表达式的使用 (最普通使用,Group,贪婪模式)
  14. 一个简单ASP调用存储过程查询
  15. 目标追踪论文之狼吞虎咽(2):在线被动攻击学习
  16. FFmpeg编码详细流程
  17. java发送带附件的邮件_Java发送邮件(带附件)
  18. 2022年餐具行业市场分析
  19. 浓缩书应用 Blinkist - 令人惊艳的商业策略
  20. 命令查看计算机出厂时间,Check cosmetics or perfume production date and shelf life by the batch code....

热门文章

  1. vb中调用aspx页面
  2. oracle字段规则,Oracle的基本操作+Oracle字段类型(zz)
  3. arch模型的思路_时间序列--ARCH模型
  4. plsq卸载 删除注册表、_别再用老方法卸载电脑软件了,只会让电脑越来越慢
  5. android studio app显示红叉_发现这个 APP 后,感觉可以放弃桌面时钟了
  6. php怎么获取栏目,thinkphp获取栏目和文章当前位置的方法
  7. 织梦服务器怎么修改,织梦dedecms更换服务器搬家教程
  8. 添加mysql组合主键_mysql怎么添加复合主键?
  9. 验证码识别算法_用Python机器学习搞定验证码
  10. Android方法的概括,Android_Android中startService基本使用方法概述,Android中有两种主要方式使用Ser - phpStudy...