语音信号短时域分析之预处理(三)

标签: 预加重加窗分帧矩形窗汉明窗
2014-07-13 21:09 934人阅读 评论(0) 收藏 举报

本文章已收录于:
分类:
语音信号处理(6)

作者同类文章X

版权声明:本文为博主原创文章,未经博主允许不得转载。

目录(?)[+]

  1. 一 预加重处理
  2. 二 加窗处理

语音信号是一种非平稳的时变信号,它携带着各种信息。一般而言语音处理目的有两种,一种是对语音信号进行分析,提取特征参数,用于后续处理;一种是加工语音信号,如在语音增强中对含噪语音进行背景噪声抑制,以获得相对“干净”的语音。

根据分析参数不同,可分为时域分析和变换域(频域、倒谱域)分析,其中时域分析是最简单、最直观的方法,它直接对语音信号的时域波形进行分析提取主要有语音短时能量和平均幅度、短时平均过零率、短时自相关函数和短时平均幅度差函数等。

实际的语音信号是模拟信号,因此在对语音信号进行数字处理之前,首先要将模拟语音信号是s(t)以采样周期T采样,将其离散化为s(n),采样周期的选择应根据模拟语音信号的带宽来确定,以避免信号的频域混叠失真。

语音信号的预处理一般包括预加重处理和加窗处理

一 预加重处理

对输入的数字语音进行预加重,其目的是为了对语音的高频部分进行加重,去除口唇辐射的影响,增加语音的高频分辨率。一般通过传递函数为  的高通数字滤波器来实现预加重,其中a为预加重系数,一般为0.9<a<1。设n时刻语音采样值为x(n),经过预加重处理后的结果为y(n) = x(n) - ax(n-1),这里a=0.98。matlab代码如下,可以参考。

[plain] view plaincopy print?
  1. <span style="font-size:14px;">e=wavread('beijing.wav');
  2. ee=e(200:455);            %选取原始文件e的第200到455点的语音,也可选其他样点
  3. r=fft(ee,1024);             %对信号ee进行1024点傅立叶变换
  4. r1=abs(r);                 %对r取绝对值 r1表示频谱的幅度值
  5. pinlv=(0:1:255)*8000/512;    %点和频率的对应关系
  6. yuanlai=20*log10(r1);       %对幅值取对数
  7. signal(1:256)=yuanlai(1:256);%取256个点,目的是画图的时候,维数一致
  8. [h1,f1]=freqz([1,-0.98],[1],256,4000);%高通滤波器
  9. pha=angle(h1);           %高通滤波器的相位
  10. H1=abs(h1);             %高通滤波器的幅值
  11. r2(1:256)=r(1:256);
  12. u=r2.*h1';              % 将信号频域与高通滤波器频域相乘 相当于在时域的卷积
  13. u2=abs(u) ;             %取幅度绝对值
  14. u3=20*log10(u2);        %对幅值取对数
  15. % un=filter([1,-0.98],[1],ee);  %un为经过高频提升后的时域信号
  16. figure(1);subplot(211);
  17. plot(f1,H1);title('高通滤波器的幅频响应');
  18. xlabel('频率/Hz');
  19. ylabel('幅度');
  20. subplot(212);plot(pha);title('高通滤波器的相位响应');
  21. xlabel('频率/Hz');
  22. ylabel('角度/radians');
  23. figure(2);subplot(211);plot(pinlv,signal);title('原始语音信号频谱');
  24. xlabel('频率/Hz');
  25. ylabel('幅度/dB');
  26. subplot(212);plot(pinlv,u3);title('经高通滤波后的语音信号频谱');
  27. xlabel('频率/Hz');
  28. ylabel('幅度/dB');</span>

<span style="font-size:14px;">e=wavread('beijing.wav');
ee=e(200:455);            %选取原始文件e的第200到455点的语音,也可选其他样点
r=fft(ee,1024);             %对信号ee进行1024点傅立叶变换
r1=abs(r);                 %对r取绝对值 r1表示频谱的幅度值
pinlv=(0:1:255)*8000/512;    %点和频率的对应关系
yuanlai=20*log10(r1);       %对幅值取对数
signal(1:256)=yuanlai(1:256);%取256个点,目的是画图的时候,维数一致
[h1,f1]=freqz([1,-0.98],[1],256,4000);%高通滤波器
pha=angle(h1);           %高通滤波器的相位
H1=abs(h1);             %高通滤波器的幅值
r2(1:256)=r(1:256);
u=r2.*h1';              % 将信号频域与高通滤波器频域相乘 相当于在时域的卷积
u2=abs(u) ;             %取幅度绝对值
u3=20*log10(u2);        %对幅值取对数
% un=filter([1,-0.98],[1],ee);  %un为经过高频提升后的时域信号
figure(1);subplot(211);
plot(f1,H1);title('高通滤波器的幅频响应');
xlabel('频率/Hz');
ylabel('幅度');
subplot(212);plot(pha);title('高通滤波器的相位响应');
xlabel('频率/Hz');
ylabel('角度/radians');
figure(2);subplot(211);plot(pinlv,signal);title('原始语音信号频谱');
xlabel('频率/Hz');
ylabel('幅度/dB');
subplot(212);plot(pinlv,u3);title('经高通滤波后的语音信号频谱');
xlabel('频率/Hz');
ylabel('幅度/dB');</span>

其中高通滤波器和经预加重处理后的图如下:

               

二 加窗处理

在进行预加重数字滤波处理后,接下来进行加窗分帧处理,语音信号是一种随时间而变化信号,主要分为浊音和清音两大类,由于发音器官的惯性运动,可以认为在一小段时间里(一般为10ms-30ms),语音信号近似不变,即语音信号具有短时平稳性。这样,可以把语音信号分为一些短段来进行处理,语音信号的分帧是采用可移动的有限长度窗口进行加权的办法来实现的,一般每秒的帧数为33-100帧,分帧虽然可以采用连续分段的方法,但一般要采用如图所示交叠分段的方法,为了使帧与帧之间平滑过渡,保持连续性,前一帧与后一帧的交叠部分为帧移,帧移和帧长的比值一般为0-1/2。

一般窗有两种,一种是矩形窗,一种是汉明窗,窗函数如下:

                            

(1) 矩形窗                                                                                                 (2) 汉明窗

矩形窗的时域和频域波形,窗长N=61,matlab代码如下:

[plain] view plaincopy print?
  1. <span style="font-size:14px;">% 程序3.2:juxing.m
  2. x=linspace(0,100,10001);               %在0~100的横坐标间取10001个值
  3. h=zeros(10001,1);                     %为矩阵h赋0值
  4. h(1:2001)=0;                         %前2000个值取为0值
  5. h(2002:8003)=1;                      %窗长 ,窗内值取为1
  6. h(8004:10001)=0;                     %后2000个值取为0值
  7. figure(1);                            %定义图号
  8. subplot(1,2,1)                        %画第一个子图
  9. plot(x,h,'k');                          %画波形,横坐标为x,纵坐标为h,k表示黑色
  10. title('矩形窗时域波形');                %图标题
  11. xlabel('样点数');                      %横坐标名称
  12. ylabel('幅度');                        %纵坐标名称
  13. axis([0,100,-0.5,1.5])                  %限定横、纵坐标范围
  14. line([0,100],[0,0])                    %画出x轴
  15. w1=linspace(0,61,61);                %取窗长内的61个点
  16. w1(1:61)=1;                        %赋值1,相当于矩形窗
  17. w2=fft(w1,1024);                    %对时域信号进行1024点的傅立叶变换
  18. w3=w2/w2(1)                       %幅度归一化
  19. w4=20*log10(abs(w3));               %对归一化幅度取对数
  20. w=2*[0:1023]/1024;                  %频率归一化
  21. subplot(1,2,2);                       %画第二个子图
  22. plot(w,w4,'k')                        %画幅度特性图
  23. axis([0,1,-100,0])                     %限定横、纵坐标范围
  24. title('矩形窗幅度特性');               %图标题
  25. xlabel('归一化频率 f/fs');           %横坐标名称
  26. ylabel('幅度/dB');                 %纵坐标名称
  27. </span>

<span style="font-size:14px;">% 程序3.2:juxing.m
x=linspace(0,100,10001);               %在0~100的横坐标间取10001个值
h=zeros(10001,1);                     %为矩阵h赋0值
h(1:2001)=0;                         %前2000个值取为0值
h(2002:8003)=1;                      %窗长 ,窗内值取为1
h(8004:10001)=0;                     %后2000个值取为0值
figure(1);                            %定义图号
subplot(1,2,1)                        %画第一个子图
plot(x,h,'k');                          %画波形,横坐标为x,纵坐标为h,k表示黑色
title('矩形窗时域波形');                %图标题
xlabel('样点数');                      %横坐标名称
ylabel('幅度');                        %纵坐标名称
axis([0,100,-0.5,1.5])                  %限定横、纵坐标范围
line([0,100],[0,0])                    %画出x轴w1=linspace(0,61,61);                %取窗长内的61个点
w1(1:61)=1;                        %赋值1,相当于矩形窗
w2=fft(w1,1024);                    %对时域信号进行1024点的傅立叶变换
w3=w2/w2(1)                       %幅度归一化
w4=20*log10(abs(w3));               %对归一化幅度取对数
w=2*[0:1023]/1024;                  %频率归一化
subplot(1,2,2);                       %画第二个子图
plot(w,w4,'k')                        %画幅度特性图
axis([0,1,-100,0])                     %限定横、纵坐标范围
title('矩形窗幅度特性');               %图标题
xlabel('归一化频率 f/fs');           %横坐标名称
ylabel('幅度/dB');                 %纵坐标名称
</span>

汉明窗matlab代码如下:

[plain] view plaincopy print?
  1. <span style="font-size:14px;">x=linspace(20,80,61);         %在20~80的横坐标间取61个值作为横坐标点
  2. h=hamming(61);             %取61个点的哈明窗值为纵坐标值
  3. figure(1);                   %画图
  4. subplot(1,2,1);               %第一个子图
  5. plot(x,h,'k');                 %横坐标为x,纵坐标为h,k表示黑色
  6. title('Hamming窗时域波形');   %图标题
  7. xlabel('样点数');              %横坐标名称
  8. ylabel('幅度');             %纵坐标名称
  9. w1=linspace(0,61,61);         %取窗长内的61个点
  10. w1(1:61)=hamming(61);         %加哈明窗
  11. w2=fft(w1,1024);               %对时域信号进行1024点傅立叶变换
  12. w3=w2/w2(1);                 %幅度归一化
  13. w4=20*log10(abs(w3))           %对归一化幅度取对数
  14. w=2*[0:1023]/1024;            %频率归一化
  15. subplot(1,2,2)                  %画第二个子图
  16. plot(w,w4,'k')                  %画幅度特性图
  17. axis([0,1,-100,0])                %限定横、纵坐标范围
  18. title('Hamming窗幅度特性');      %图标题
  19. xlabel('归一化频率 f/fs');      %横坐标名称
  20. ylabel('幅度/dB');             %纵坐标名称</span>

<span style="font-size:14px;">x=linspace(20,80,61);         %在20~80的横坐标间取61个值作为横坐标点
h=hamming(61);             %取61个点的哈明窗值为纵坐标值
figure(1);                   %画图
subplot(1,2,1);               %第一个子图
plot(x,h,'k');                 %横坐标为x,纵坐标为h,k表示黑色
title('Hamming窗时域波形');   %图标题
xlabel('样点数');              %横坐标名称
ylabel('幅度');             %纵坐标名称
w1=linspace(0,61,61);         %取窗长内的61个点
w1(1:61)=hamming(61);         %加哈明窗
w2=fft(w1,1024);               %对时域信号进行1024点傅立叶变换
w3=w2/w2(1);                 %幅度归一化
w4=20*log10(abs(w3))           %对归一化幅度取对数
w=2*[0:1023]/1024;            %频率归一化
subplot(1,2,2)                  %画第二个子图
plot(w,w4,'k')                  %画幅度特性图
axis([0,1,-100,0])                %限定横、纵坐标范围
title('Hamming窗幅度特性');      %图标题
xlabel('归一化频率 f/fs');      %横坐标名称
ylabel('幅度/dB');             %纵坐标名称</span>

             
                                           (1) 矩形窗                                                                                                  (2) 汉明窗

通过图可以看出汉明窗具有更平滑的低通特性,能够在较高的程度上反映短时信号的频率特性。

下图说明了加窗方法,其中窗序列沿着语音样点值逐帧从左到右移动,窗w(n)长度为N。在确定窗函数后,对语音信号的分帧处理实际上就是对各帧进行某种变换或运算,设这种变换用T[]表示,x(n)为输入语音信号,w(n)为窗序列,h(n)是与w(n)有关的滤波器,则各帧经处理后输出可表示为



0
0
  • 上一篇shell 统计一个文件夹下不同类型文件的个数
  • 下一篇语音信号短时域分析之短时平均能量(四)

我的同类文章

语音信号处理(6)
http://blog.csdn.net

  • 语音信号处理之DTW2014-08-23阅读275
  • matlab三维数据绘图2014-07-15阅读824
  • 语音信号之特性分析图(二)2014-07-04阅读1048
  • 加窗分帧中各种窗函数2014-08-03阅读619
  • 语音信号短时域分析之短时平均能量(四)2014-07-13阅读1310
  • 语音信号之基础知识(一)2014-06-29阅读551

语音信号短时域分析之预处理(三)相关推荐

  1. 语音信号短时域分析之短时平均能量(四)

    由于语音信号的能量随时间而变化,清音和浊音之间的能量差别相当显著,因此对短时能量和短时平均幅度进行分析,可以描述语音的这种特征变换情况.定义n时刻某语音信号的短时平均能量E为: 式中,N为窗长,可见短 ...

  2. 语音信号短时时域分析

    语音信号短时时域分析 类型 短时能量 对数 平方和 绝对值 短时平均过零率 短时自相关分析 说明 语音信号的分帧处理,实际上就是对各帧进行某种变换或运算. T[ ]:表示这种变换或运算 x(n):输入 ...

  3. 【语音处理】基于matlab GUI低通滤波器语音信号加噪与去噪【含Matlab源码 1708期】

    ⛄一.语音处理简介(附课程作业报告) 1 语音信号的特点 通过对大量语音信号的观察和分析发现,语音信号主要有下面两个特点: ①在频域内,语音信号的频谱分量主要集中在300-3400Hz的范围内.利用这 ...

  4. 语音信号中的特征提取

    一.语音的产生简介 1.1   发音器官 人体的语音是由人体的发音器官在大脑的控制下做生理运动产生的.人体发音器官由三部分组成:肺和气管.喉.声道. 肺是语音产生的能源所在.气管连接着肺和喉,是肺与声 ...

  5. 【speach】语音信号基础

    语音信号处理 语音编码 语音合成 语音识别 说话人识别 语音增强 语音的时域-频域-相位 SNR (信噪比) 用分贝(dB)作为度量单位,即:信噪比(dB)= 10 * log10(S/N) (dB) ...

  6. 【滤波器】基于低通滤波器语音信号加噪与去噪含Matlab源码

    1 简介 1.1 课题的背景与意义 通过语音传递信息是人类最重要.最有效.最常用和最方便的交换信息的形式.让计算机能听懂人类的语言,是人类自计算机诞生以来梦寐以求的想法,用现代手段研究语音信号,使人们 ...

  7. 基于Matlab App Designer的语音信号分析与处理(二):IIR和FIR滤波器的设计,语音信号的滤波

    接上文:https://blog.csdn.net/weixin_53877178/article/details/122470759 目录 一.课题的任务 二.内容.步骤和要求 (1)语音信号的采集 ...

  8. 数字语音信号处理学习笔记——语音信号的短时时域分析(1)

    版权声明:本文为博主原创文章,未经博主允许不得转载.    https://blog.csdn.net/u013538664/article/details/25392889 3.1 概述 语音信号是 ...

  9. 【数字语音处理】Part3 语音信号的短时时域分析:短时平均、短时自相关、语音端点检测、基音周期估值

    Part3 语音信号的短时时域分析 一.帧和加窗的概念 二.短时平均能量 三.短时平均幅度函数 四.短时平均过零率 五.短时自相关分析 六.基于能量和过零率的语音端点检测 七.基音周期估值 八.总结 ...

最新文章

  1. ffmpeg php 快速播放,怎么在PHP中利用FFmpeg函数对视频播放的时长进行获取
  2. 一些达成共识的JavaScript编码风格约定
  3. 终于当了回up主,来白嫖我历时半年总结的Java思维导图吧!!!
  4. 云信小课堂|5分钟快速实现iOS端PK连麦场景
  5. 添加 Bash 自定义命令
  6. UOJ207 共价大爷游长沙
  7. mui初级入门教程(六)— 模板页面实现原理及多端适配指南
  8. Intro.js轻松搞定页面引导流程
  9. C# 尝试读取或写入受保护的内存。这通常指示其他内存已损坏
  10. ubuntu下点击安装VMware tools,没有压缩包文件
  11. macvlan 详解
  12. mysql数据库优化 分析工具 性能瓶颈
  13. 西门子1200伺服步进FB块程序 含触摸屏程序,SCL写的FB块,中文注释详细
  14. 盘点那些适合写api接口的工具
  15. 开源究竟差哪了--- 关于开源软件和自由软件的区别
  16. idea can‘t update no tracked branch choose upstream branch git
  17. Open Distro for Elasticsearch
  18. 解读swarm最新资讯,主网8.2号开始产BZZ
  19. android 实现点击水波纹,Android 水波纹点击效果(Ripple Effect)
  20. 小米误删userdata分区,userdata分区无法还原,安卓误删分区,且能进twrp,刷机卡米的情况,重新分区教程

热门文章

  1. Unix/Linux环境C编程入门教程(41) C语言库函数的文件操作详解
  2. Proteus原理图元器件库详细说明
  3. linux 下的 多线程http 下载器
  4. NET 应用架构指导 V2 学习笔记(十九) 表现层组件设计指导
  5. HTTPS通信的C++实现
  6. openstack之虚拟机管理命令
  7. 【英语天天读】The Two Roads
  8. 0x08 大数据分析,七层基本功
  9. hdoj_1047_大數加法 java 模擬
  10. linux(gentoo)安装配置conky