当前位置:首页 >> 理学 >> 《数字语音处理》实验指导书2015

《数字语音处理》实验指导书2015


《数字语音处理》 实验指导书
主编 王都生

大连民族大学信息与通信工程学院 2015 年 10 月

1

目 录
实验一 汉明窗加窗的时域波形以及频谱的显示...........................................3 实验二 WAV 格式文件的录制及其短时能量、短时平均幅度分析.............5 实验三 语音端点检测......................................................................................7 实验四 语音信号的倒谱的编程实现.............................................................11 实验五 基于短时自相关函数的基音周期估计.............................................15 实验六 基于短时自相关函数的基音周期估计续.........................................19 实验七 声道冲激响应及激励信号的分离实现.............................................23

2

实验一 汉明窗加窗的时域波形以及频谱的显示
一、实验环境 1.Windows XP,Windows 98,Windows2000 都行。 2.Matlab 二、实验目的 1. 掌握加窗时域波形显示程序的编写。 2.了解清音和浊音的时域波形特征。 3.了解清音和浊音的频谱特征。 三、实验原理 1.窗函数 a 汉明窗函数

n ? ), ?0.54 ? 0.46 * cos(2? w(n) ? ? N ?1 ? ?0
b 矩形窗函数

0?n? N 其它

?1, w(n) ? ? ?0,
2. 给输入语音信号加窗

0 ? n ? N ?1 其它
x(m) ? s(m)w(n ? m)

3. MATLAB 程序设计 分为两步, 对于浊音的时域波形显示及其频谱, 对于清音的时域波形及其频谱的计算和显 示。 其中,语音信号必须放在该程序所在的文件夹下。 %汉明窗的短时傅里叶变换 [y,Fs,bits]=wavread('1.wav'); y=y(:,1); y=y(4000:4400); y=y.*hamming(length(y)); figure; subplot(2,1,1); plot(y); sigLength=length(y); Y=zeros(Fs,1); Y = 20*log10(abs(fft(y,sigLength))) subplot(2,1,2) plot(Y); xlabel('Frequency(Hz)'); ylabel('20lg|Xn(ejw)|'); 四、 实验步骤 1.汉明窗加窗的时域波形及其短时频谱显示的源代码。 ①录音 wavrecord (N,Fs,CH) ②读语音 wavread(“sound.wav”)
3

%读出信号,采样率和采样位数。 %这里假设声音是双声道,只取单声道作分析。 %分别这里选择浊音信号和清音信号分别进行讨论。

% 一点对应 1HZ

③截取清浊音 ④加窗 y=y1.*hamming(length(y1)) 2.利用编写的源代码分别显示浊音和清音的时域波形及频谱。 求频谱 20lg|xn(e jw )| 五、实验报告要求 总结语音信号的频谱特征,并指出加矩形窗和汉明窗的浊音信号、清音信号的频谱特征。

4

实验二 WAV 格式文件的录制及其短时能量、短时平均幅度分析
一、实验环境 1、Windows XP,Windows 98,Windows 2000 都行。 2、Matlab 二、实验目的 1、掌握利用 MATLAB 录制 WAV 格式的语音文件编程。 2、掌握清音和浊音的短时能量和短时平均幅度计算的编程。 3、了解清音和浊音在不同的窗函数下的短时能量和短时平均幅度的特点。 4、了解在不同窗长的情况下,语音信号的短时能量及平均幅度的变化的规律。 三、实验原理 1、短时能量定义为:

En ?
若令: h(n) ? w2 (n) , 则 En ?

m???

? ( x(m)w(n ? m))2 ?

?

m?n? N ?1

? ( x(m)w(n ? m))

n

2

其中,N 为窗长。可见,短时能量为一帧样点值的加权平方和。

m???

?x

?

2

(m)h(n ? m) ?

m?n? N ?1

?x

n

2

(m)h(n ? m)

短时能量可以理解为: 语音信号各个样点值平方, 然后样点通过一个冲激响应为 h(n) 的滤波器,输出为由短时能量构成的时间序列。因此,冲激响应 h(n)的选择或者说窗函 数的选择直接影响着短时能量的计算。 短时平均幅度函数 Mn 用来衡量语音幅度的变化,定义为:

Mn ?
2、MATLAB 程序设计

m???

?

?

x(m) w(n ? m) ?

m?n? N ?1

? x(m) w(n ? m)

n

a) 利用 MATLAB 进行录音。 WAVRECORD 利用 WINDOWS 的音频输入设备进行录音。 格式:WAVRECORD(N,FS,CH) 其中 N 为产生语音序列的长度,FS 为选择的采样频 率, CH 为输入声道数。 标准的采样频率为 8000, 11025, 22050, and 44100 Hz. CH 是 1 或者 2(单声道或双声道). 采样序列的长度为 N × CH. 如没特殊说明, FS=11025 Hz, and CH=1. b)短时能量及短时平均幅度的参考程序: 短时能量的参考程序: a=wavread('10.wav'); subplot(6,1,1); plot(a); N=32; for i=2:6 h=linspace(1,1, (i-1)*N); %形成一个矩形窗,长度为 N En=conv(h,a.*a); %求卷积得其短时能量函数 En subplot(6,1,i); plot(En); if(i==2) legend('N=32');
5

elseif(i==3) legend('N=64'); elseif(i==4) legend('N=128'); elseif(i==5) legend('N=256'); elseif(i==6) legend('N=512'); end end % 加 hamming 窗的短时能量函数: % 把 h=linspace(1,1, (i-1)*N); % 改为 h1=hamming((i-1)*N); 短时平均幅度的参考程序: % 加矩形窗的短时平均幅度: a=wavread('10.wav'); subplot(6,1,1), plot(a); N=32; for i=2:6 h=linspace(1,1,(i-1)*N);%形成一个矩形窗,长度为 N En=conv(h,abs(a)); %求卷积得其短时能量函数 En subplot(6,1,i),plot(En); if(i==2) legend('N=32'); elseif(i==3) legend('N=64'); elseif(i==4) legend('N=128'); elseif(i==5) legend('N=256'); elseif(i==6) legend('N=512'); end end 四、实验步骤 1、分别在矩形窗和汉明窗加窗时的时域波形的程序。 2、编写计算短时能量及短时平均幅度的程序。 五、实验报告要求 修改程序, 不用滤波器卷积的方法实现而用一帧样点值加权平方和实现。

6

实验三 语音端点检测
一、实验环境 1、Windows XP,Windows 98,Windows 2000 都行。 2、Matlab 二、实验目的 1、掌握短时能量计算的编程及了解清、浊音波形特点。 2、掌握短时平均过零率计算的编程及了解清、浊音波形特点。 3、掌握语音端点检测的 判断方法。 三、实验原理 1、短时能量定义为:

En ?
若令: h(n) ? w2 (n) , 则 En ?

m???

? ( x(m)w(n ? m))2 ?

?

m?n? N ?1

? ( x(m)w(n ? m))

n

2

其中,N 为窗长。可见,短时能量为一帧样点值的加权平方和。

m???

? x 2 (m)h(n ? m) ?

?

m?n? N ?1

?x

n

2

(m)h(n ? m)

短时能量可以理解为: 语音信号各个样点值平方, 然后样点通过一个冲激响应为 h(n) 的滤波器,输出为由短时能量构成的时间序列。因此,冲激响应 h(n)的选择或者说窗函 数的选择直接影响着短时能量的计算。 2、短时平均过零率 在矩形窗条件下,短时平均过零率定义为:

Zn ?

1 2N

m?n? N ?1

? sgn(x(m)) ? sgn(x(m ? 1))

n

短时平均过零率可以粗略估计语音的频谱特性。 由于高频率对应着高的过零率,低频率 对应着低过零率, 那么过零率与语音的清浊音特征就存在着 对应关系。 一般经验结论是, 清音和浊音的过零率分布大致为高斯分布,清音每 10ms 的短时平均过零次数的均值为 49 次, 浊音每 10ms 的短时平均过零次数的均值为 14 次。 3、语音端点的判断 在语音端点检测中, 可以采用多种特征参数综合判决的方法, 如使用短时平均能量和短时 平均过零率来进行检测。 由于语音一般都存在能量较高浊音段,因此考察语音的短时能量 的轮廓可以设定一个较高的门限 T1,使语音的起点和终点落在 T1 所确定的时间间隔 AB 之外。然后根据背景噪声的平 均能量确定—个门限较低的 T2,并从 A 点往起点方 向、从 B 点往终点方向搜索,分别找到与门限 T2 相交的两个点 C、D。这样我们就用 双门限完成了第—级粗判。第二级判决要利用短时平均过零率。同样根据背景噪声的 Zn 可以设定一个较低的门限 T3,从 C 点和 D 点分别向起点和终点方向搜索。可以找到 Zn 与门限 T3 相交的两个点 E、F。这样就确定出了语音的端点 E、F。 4、MATLAB 程序设计 参考程序: % 短时过零率: a=wavread('6.wav'); n=length(a); N=320; subplot(3,1,1); plot(a);
7

h=linspace(1,1,N); En=conv(h, a.*a); subplot(3,1,2); plot(En); for i=1:n-1 if a(i)>=0 b(i)= 1; else b(i) =-1; end if a(i+1)>=0 b(i+1)=1; else b(i+1)=-1; end w(i)=abs(b(i+1)-b(i)); end

%形成一个矩形窗,长度为 N %求卷积得其短时能量函数 En

%求出每相邻两点符号的差值的绝对值 k=1; j=0;

while (k+N1)<n Zm(k)=0; for i=0:N1 Zm(k)=Zm(k)+w(k+i); end j=j+1; k=k+160; end for w=1:j Q(w)=Zm(160*(w-1)+1)/640; end subplot(3,1,3), plot(Q);

%每次移动半个窗

%短时平均过零率

四、实验步骤 1、短时能量计算的编程。 2、短时平均过零率计算的编程。 3、判断语音的端点(起始点及终点)。 五、实验报告要求 1 利用短时平均幅度代替 En 计算; 2 修改程序是的 Zn 与 En 的样点值一一对应; 3 将 Zn 与 En 的横轴用时间表示; 4 实验报告上画出语音端点的判断过程。

8

实验五 基于短时自相关函数的基音周期估计
一、实验环境: 1.Windows XP,Windows 98,Windows2000 都行。 2. matlab. 3、耳机,话筒。 二、实验目的 1.编写计算短时自相关函数的程序。 2.从一段语音信号中求出该段语音信号的基音周期。 三、实验原理 1、基于短时自相关函数的基音周期估计原理 短时自相关函数在基音周期的整数倍位置存在较大的峰值。如果找出第 一个最大峰值的 位置就可以估计出基音周期。但由于共振峰的影响,通常会 产生“倍频”或者“半频” 的错误。一般可由两种方法解决: A.带通滤波的方法 将输入信号通过一个频率范围为[60,900]Hz 的带通滤波器后,再进行 基音估计。因为最 高基音频率为 450Hz,所以上截频设为 900Hz 可以保留语 音的一二次谐波。下截频为 60Hz 是为了抑制 50Hz 电源干扰。 B.中心削波法 它采用下面的中心削波函数进行预处理:

? x ( n) ? T , ? y ( n ) ? c ( n ) ? ? x ( n) ? T , ?0, ?

x ( n) ? T x(n) ? ?T x ( n) ? T

一般削波电平 T 取本帧语音最大幅度的 60%~70%。 将削波后的序列 y(n)用短时自相 关函数估计基音周期, 在基音周期位置的峰值更加尖锐, 可 以有效减少倍频或半频错误。 2、软件实现 参考程序如下: function jiyinzhouqi(filename,shift) %短时自相关分析 %filename 语音文件*.wav %zhouqi 基音周期 shift=10; [signal,fs]=wavread('FemaleVoice.wav') shift=round(fs*shift); %帧移 n1=fix(fs*0.97)+1; %分析起点 970ms,帧长 30ms n2=fix(fs*1)+1; ii=1; for ii=1:(length(signal)?n1)/shift %分析次数 if n2<length(signal) %防止溢出 data=signal(n1:n2); N=n2-n1+1; R=zeros(1,N); %基音周期(n)多次分析数组 for k=1:N1 %求自相关序列 for jj=1:Nk
9

R(k)=R(k)+data(jj)*data(jj+k); end end value(ii)=find_maxn(R); %调用基音周期(n)分析函数 n1=n1+shift; %移动帧 n2=n2+shift; end end %figure(3) %plot(R); %axis([0,1000 300 300]) figure(1) stem(value); axis([0 length(value) 0 1000]) len =length(value); %基音周期(n)多次分析数组长度 aver=mean(value); index=find(abs((valueaver))>aver/5); value(index)=0; %去除大野点的影响 len=len-length(index); for jj=1:3:len/3 %中值平滑,滑动窗口宽度 3,精度为中值 1/4(剔除野点) average=(value(jj)+value(jj+1)+value(jj+2))/3; for kk=1:3 if abs((value(jj1+kk))average)>average/4 value(jj-1+kk)=0; %将野点置零,同时数组长度减一 len=len-1; end end end figure(2) stem(value); axis([0 length(value) 0 max(value)]) Tp=sum(value)/len/fs %求基音周期(Tp)

function nmax=find_maxn(r) %寻找峰值最大的 n 值及基音周期 %r,自相关序列 %maxn,为峰值最大的 n zer=find(r==0); %找第一个零点如果存在 jiaocha=0; %找第一近零点 ii=1; while (jiaocha<=0) if(r(ii)>0 && r(ii+1)<0 && (ii+1)<length(r)) jiaocha=ii; end ii=ii+1; if ii==length(r) %没有找到符合要求的点
10

jiaocha=1; end end if length(zer)>0 %检查是否存在零点 if zer(1)<jiaocha %存在,则和 jiaocha 比较大小,用于祛除前点的对基音周 期的查找 带来的影响 jiaocha=zer(1); end end r(1:jiaocha)=0; %祛除影响 maxn=max(r); %找最大值 temp=find(r==maxn); %返回第一个最大值 nmax=temp(1); 四、实验步骤 1.应用 MATLAB 函数进行录音。 2.用 matlab 编写实现代码。 3. 计算出所录语音的基音周期 五、实验报告要求 利用 matlab 实验 AMDF 基音检测法的实现。

11

实验六 基于短时自相关函数的基音周期估计续
一、实验环境: 1.Windows XP,Windows 98,Windows2000 都行。 2. matlab. 3、耳机,话筒。 二、实验目的 1.编写计算短时自相关函数的程序。 2. 掌握中心削波法的短时自相关函数的基音周期估计程序编写。 3.从一段语音信号中求出该段语音信号的基音周期。 三、实验原理 1、基于短时自相关函数的基音周期估计原理 短时自相关函数在基音周期的整数倍位置存在较大的峰值。如果找出第 一个最大峰值 的位置就可以估计出基音周期。但由于共振峰的影响,通常会 产生“倍频”或者“半频” 的错误。一般可由两种方法解决: A.带通滤波的方法 将输入信号通过一个频率范围为[60,900]Hz 的带通滤波器后,再进行 基音估计。因为 最高基音频率为 450Hz,所以上截频设为 900Hz 可以保留语 音的一二次谐波。下截频为 60Hz 是为了抑制 50Hz 电源干扰。 B.中心削波法 它采用下面的中心削波函数进行预处理:

? x ( n) ? T , ? y ( n ) ? c ( n ) ? ? x ( n) ? T , ?0, ?

x ( n) ? T x(n) ? ?T x ( n) ? T

一般削波电平 T 取本帧语音最大幅度的 60%~70%。 将削波后的序列 y(n) 用短时自 相关函数估计基音周期,在基音周期位置的峰值更加尖锐,可以有效减少倍频或半频错误。 2、软件实现 参考程序如下: function jiyinzhouqi2(filename,shift) %短时自相关分析 %filename 语音文件*.wav %zhouqi 基音周期 %wld2 shift=10; [signal,fs]=wavread('MaleVoice.wav'); kk=0; while kk<length(signal) kk=kk+1; if signal(kk)>0.2 signal(kk)=signal(kk)-0.2;
12

else if signal(kk)<0.2 signal(kk)=signal(kk)+0.2; elseif signal(kk)>0.2&signal(kk)<0.2 signal(kk)=0; end end end shift=round(fs*shift); %帧移 n1=fix(fs*0.97)+1; %分析起点 970ms,帧长 30ms n2=fix(fs*1)+1; ii=1; for ii=1:(length(signal)?n1)/shift %分析次数 if n2<length(signal) %防止溢出 data=signal(n1:n2); N=n2-n1+1; R=zeros(1,N); %基音周期(n)多次分析数组 for k=1:N1 %求自相关序列 for jj=1:Nk R(k)=R(k)+data(jj)*data(jj+k); end end value(ii)=find_maxn(R); %调用基音周期(n)分析函数 n1=n1+shift; %移动帧 n2=n2+shift; end end figure(3) plot(R); %axis([0,1000 300 300]) figure(1) stem(value); axis([0 length(value) 0 1000]) len =length(value); %基音周期(n)多次分析数组长度 aver=mean(value); index=find(abs((value-aver))>aver/5); value(index)=0; %去除大野点的影响 len=len-length(index); for jj=1:3:len/3 %中值平滑, 滑动窗口宽度 3, 精度为 中值 1/4 (剔除野点) average=(value(jj)+value(jj+1)+value(jj+2))/3; for kk=1:3 if abs((value(jj1+kk))average)>average/4 value(jj-1+kk)=0; %将野点置零,同时数组长度减一 len=len-1; end
13

end end %figure(4) %plot(average) figure(2) stem(value); axis([0 length(value) 0 max(value)]) Tp=sum(value)/len/fs %求基音周期(Tp)

function nmax=find_maxn(r) %寻找峰值最大的 n 值及基音周期 %r,自相关序列 %maxn,为峰值最大的 n zer=find(r==0); %找第一个零点如果存在 jiaocha=0; %找第一近零点 ii=1; while (jiaocha<=0) if(r(ii)>0 && r(ii+1)<0 && (ii+1)<length(r)) jiaocha=ii; end ii=ii+1; if ii==length(r) %没有找到符合要求的点 jiaocha=1; end end if length(zer)>0 %检查是否存在零点 if zer(1)<jiaocha %存在,则和 jiaocha 比较大小,用于祛除前点的对基音周期的 查找带来的影响 jiaocha=zer(1); end end r(1:jiaocha)=0; %祛除影响 maxn=max(r); %找最大值 temp=find(r==maxn); %返回第一个最大值 nmax=temp(1); 四、实验步骤 1.应用 MATLAB 函数进行录音。 2.用 matlab 编写实现代码。 3. 计算出所录语音的基音周期。 五、实验报告要求 编程实现三电平削波法的基音周期检测
14

附录2

MATLAB 基本使用方法

一、 MATLAB 基本知识
1、 MATLAB 命令窗口
运行 MATLAB 软件后首先看到的就是命令窗口,在命令窗口中,在 MATLAB 提示符下可 键入 MATLAB 命令。例如输入一个 3×3 的矩阵: a=[1 2 3; 4 5 6; 7 8 9] 按回车键后显示: a= 123 456 789 但如果你忘不了 C 语言,输入的是: a=[1 2 3; 4 5 6; 7 8 9]; 则按回车键后什么都不会显示。因为分号在 MATLAB 命令窗口中是作为抑制显示符号, 尽管变量 a 已经存在并被赋值, 但你看不见它。 抑制显示符号的一个重要作用是批处理运算: 你可以先在文本文档中编写好由多条语句组成的一段程序, 除最后一条外, 所有其它语句都 加上抑制显示符号,然后粘贴到命令窗口并回车,那么中间运算结果就不会显示,只看到最 终结果。 也许你对命令窗口的诸多内容感到眼花缭乱,那就试一下“ Edit | Clear Command window”吧,它会像橡皮一样擦干净整张白纸,但是工作空间中已经存在的变量是 MATLAB 环境全局变量, 它并不会消失, 只是看不到而已, 当你敲入变量名并回车后它又会显示出来。 MATLAB 命令窗口的以上特性使其被称为演算纸(我们俗称草稿纸,而且是一张可以反 复利用并且记性很好的草稿纸) 。 命令窗口除了作为演算纸外, 它还是其它 MATLAB 功能的出发点。 例如: 可以通过 “File” 菜单新建或打开 M 文件、 图形文件和图形用户界面 (用于设计交互式程序的特殊图形文件) ; 可以通过“Help”菜单获取 MATLAB 帮助知识和演示程序。

2、

M 文件

由 MATLAB 语言编写的程序文件称为 M 文件,扩展名为.m。M 文件可以在命令窗口提 示符下键入文件名来直接调用(不需要编辑、调试时) ,也可以通过命令窗口的文件菜单打 开 M 文件编辑器(需要编辑、调试时) ,使用 M 文件的最大好处是它可以调试。从功能上 看,M 文件可分为两类:底稿文件和函数文件。 (1)底稿文件 底稿文件中的语句可使用工作空间中的全部数据(包括命令窗口产生的数据) ,例如: 有一包含以下 MATLAB 命令的底稿文件 fibon.m: % an M file to calculate Fibonacci numbers(斐波纳契数列) f=[1 1]; I=1;
15

While f(I)+f(I+1)<1000 f(I+2)=f(I)+f(I+1); I=I+1; End f 其中“%”右边的语句为说明语句,它们只起到注释或帮助的作用。在 MATLAB 提示符 下,如键入 fibon,则 MATLAB 会自动执行这一文件中的每条命令,并产生执行结果: 输入: fibon 结果: f= 1 1 34 55

2 89

3 5 8 13 144 233 377 610

21 987

注意,在底稿文件中的变量 I 和 f 都将保存在工作区中作为全局变量而存在,这一点与 函数文件是不同的。 (2)函数文件 函数文件的第一行必须包含关键字“function” 。函数文件与底稿文件的区别在于:函数 文件可以传递参数, 底稿文件不具备参数传递功能; 在函数文件中定义及使用的变量都是局 部变量,只在本函数的内有效,一旦退出该函数,则为无效变量,而底稿文件中定义或使用 的变量都是全局变量,在退出文件后仍为有效变量。 例如,函数文件 mean.m 包含以下语句: function y=mean(x) % MEAN average or mean value % For vectors, MEAN(x) return the mean value % For matrices, MEAN(x) is a row vector % containing the mean value of each column [m n]=size(x); if m==1 m=n; end y=sum(x)/m; 这个 M 文件定义了一个新函数 mean,它的引用与其它 MATLAB 函数一样,其功能是计算向 量或矩阵的平均值,例如: 输入: z=1:99; m=mean(z)

16

结果: m= 50

附录3
用途
读取微软 WAVE 波形声音文件(.wav) 。

wavread 函数

句法
y = wavread('filename') [y,Fs,bits] = wavread('filename') [...] = wavread('filename',N) [...] = wavread('filename',[N1 N2]) [...] = wavread('filename','size')

描述
Wavread 函数支持多通道数据, 最多可支持 32 位采样并支持读取 24 位和 32 位的.wav 文件。 y = wavread('filename') 载入由 filename 字符串指定的一个 WAVE 文件,向 y 矢量返回采样 数据。如果没有给出文件扩展名,函数自动附加.wav 扩展名。样点幅度值介于[-1,+1]范围。 [y,Fs,bits] = wavread('filename') 返回赫兹单位的采样率(Fs) ,以及用于文件数据编码的每样 点比特数(bits) 。 [...] = wavread('filename',N) 仅返回文件各通道数据的前 N 个样点。 [...] = wavread('filename',[N1 N2]) 仅返回文件各通道数据的第 N1 到第 N2 样点。Great! siz = wavread('filename','size') 返回文件所含音频数据的大小而不是实际的音频数据,返回矢 量 siz 的格式为[样点数 通道数]。

参见
auread,wavwrite,wavplay,wavrecord

附录 4
用途
时频分析(产生声谱图) 。

specgram 函数

句法
B = specgram(a) B = specgram(a,nfft) [B,f] = specgram(a,nfft,fs) [B,f,t] = specgram(a,nfft,fs) B = specgram(a,nfft,fs,window)
17

B = specgram(a,nfft,fs,window,numoverlap) specgram(a) B = specgram(a,f,fs,window,numoverlap)

描述
specgram 函数使用滑动窗计算信号的短时傅立叶变换。声谱图是该函数的幅度值。 (1)B = specgram(a) 计算矢量 a 所表示信号的短时傅立叶变换。该句法使用默认参数值: ? nfft 取矢量 a 长度和 256 两者较小的一个,即:min(nffs,256) ? fs = 2 ? window 是长度为 nfft 的周期性汉宁窗 ? numoverlap 等于窗长的 1/2==即重叠部分! 其中:参数 nfft 指定 specgram 函数所用 FFT 长度,该值决定了计算短时傅立叶变换的各频 点;参数 fs 是指定采样频率的一个标量;参数 window 指定了一个窗函数以及 specgram 函 数用以分割矢量 a 的样点数;参数 numoverlap 是分割区域重叠的样点数。你从最后一个句 法的输入参数列表中省略的任意参数将使用以上默认值。 如果矢量 a 是实数,specgram 函数仅在正频点计算短时傅立叶变换。如果 nfft 为偶数, specgram 函数返回 nfft/2+1 行 SFT 值 (包含 0 和奈奎斯特带宽) ; 如果 nfft 为奇数, specgram 函数返回 nfft/2 行 SFT 值。返回矢量 B 中的列数为: k = fix((n-numoverlap)/(length(window)-numoverlap)) 如果矢量 a 是复数,specgram 函数在正频点和负频点都计算短时傅立叶变换。在这种情况 下,返回矢量 B 是一个 nfft 行的复数矩阵。从 B 中第 1 列的第 1 个样点开始,时间沿列号 递增方向线性递增;频率从 0 开始,沿行号递增方向线性递增。 (2)B = specgram(a,nfft) 使用指定的 FFT 长度 nfft 进行其计算。 (3)[B,f] = specgram(a,nfft,fs) 返回的矢量 f 是该函数计算短时傅立叶变换的各个频点。参 数 fs 对于输出 B 没有影响,它只不过是频率尺度倍乘系数。 (4) [B,f,t] = specgram(a,nfft,fs) 分别返回频率矢量 f 和时间矢量 t。 参数 t 是一个尺度化时间 的列矢量,其长度等于矩阵 B 的列数。t(j)是第 j 个窗口截取矢量 a 的最早时刻,t(1) 总是等 于 0。 (5)B = specgram(a,nfft,fs,window) 指定了窗函数和矢量 a 每个窗口分区的样点数。如果你 提供了窗口尺度,specgram 函数使用该长度的汉宁窗。窗长必须小于等于 nfft。 (6)B = specgram(a,nfft,fs,window,numoverlap) 以 numoverlap 个样点重叠 a 的各分区。 你可以利用空矩阵[] 为任意输入参数指定默认值。例如:B = specgram(x,[],10000),除了具 有采样频率 10000 Hz 而不是默认的 2 Hz 以外,其它都等同于 B = specgram(x)。 (7) specgram(...) 没有输出参数, 使用函数 imagesc(t,f,20*log10(abs(b)),axis xy, colormap(jet)) 在当前图形窗口显示对数尺度声谱图。模式 axis xy 在坐标系的左下角显示信号第 1 部分的 低频成分。Specgram 函数根据真实的时间和频率,利用来刻度坐标轴。 (8)B = specgram(a,f,fs,window,numoverlap) 利用高斯 z 变换(多于 20 个平坦分布的频点) 或者 10 取其 1 多相滤波器组,在矢量 f 所指定的频点处计算声谱图。参数 f 是以赫兹为单 位的频点矢量,它至少应含有 2 个元素。

示例
显示数字化语音信号的声谱图: load mtlb specgram(mtlb,512,Fs,kaiser(500,5),475)
18

title('Spectrogram')

注意: 你可以在信号处理工具箱的 Demo 中观看和操作类似的声谱图, 可从 MATLAB 基础 (查 看菜单的 Launch Pad 菜单项)访问该 Demo。

算法
specgram 函数按如下过程计算给定信号的声谱图: 1、 它应用窗口参数所指定的窗口,将信号分割成重叠的分区。 2、 用 nfft 长度的 FFT 计算各分区的短视时傅立叶变换,以产生对信号短期频率成分的一个 估计;这些变换组成了矩阵 B 的各个列。数值 (length(window) - numoverlap) 指定经过 多少个样点 specgram 函数改变一次窗口。 3、 对于实数输入,specgram 函数将声谱图截短到开始的 nfft/2 + 1 个点(若 nfft 为偶数)或 (nfft + 1)/2 个点(若 nfft 为奇数) 。

19


更多相关文档:

《数字语音处理》实验指导书2015.doc

《数字语音处理》实验指导书2015_理学_高等教育_教育专区 暂无评价|0人阅读|0次下载|举报文档《数字语音处理》实验指导书2015_理学_高等教育_教育专区。《数字语音...

《数字图像处理》实验指导书2015.doc

《数字图像处理》实验指导书2015_信息与通信_工程科技_专业资料。《数字图像处理...五、实验仪器与软件 5 (1) PC 计算机 (2) MatLab 软件/语言包括图像处理...

数字语音处理实验指导书-通信12.doc

数字语音处理实验指导书-通信12 - 第 9 章 数字语音处理的 MATLAB 实现 9.1 语音信号的采集 数字语音处理是利用数字信号处理技术对语音信号进行处理的一门学科。 ...

《数字逻辑》--实验指导书2015最新.doc

《数字逻辑》--实验指导书2015最新_互联网_IT/计算机_专业资料。《数字逻辑》 实验指导书 计算机科学与技术与学院 二○一五年 目 录 实验一 集成门电路逻辑功能...

《数字语音处理》实验指导书.doc

《数字语音处理》实验指导书 - 《数字语音处理实验》指导书中国地质大学 机械

语音信号处理实验指导书_图文.doc

语音信号处理实验指导书 - 数字语音信号处理 实验指导书 编写 曹建荣 山东建筑大学信息与电气工程学院 2011 年 10 月 1 前言 语音信号处理是研究用数字信号处理...

《数字音视频处理技术》实验教案.doc

《数字音视频处理技术》 实验教案 2015-2016 学年...三、实验原理根据实验指导书和实验视频文件,实际操作...(3)学会用镜头语言表达故事内容以及自己的思想。 二...

数字语音信号处理实验__图文.doc

数字语音信号处理 实验指导书 前言 语音信号处理是研究用数字信号处理技术和语音学知识对语音信号进行处理的新兴的 学科, 是目前发展最为迅速的信息科学研究领域的...

数字语音处理课程实验报告.doc

数字语音处理课程实验报告_工学_高等教育_教育专区。数字语音处理 课程报告 语音

《数字语音处理》实验指导书2005.doc

《数字语音处理》实验指导书2005 - 《数字语音处理实验》指导书中国地质大

人机实验指导书(2015)_图文.doc

人机实验指导书(2015) - 艺术与设计学院工业设计系 《人机工程学》实验指导书 2015 年度适用 实验一 一 目的 1. 认识常用人体形态尺寸测量尺及其用途。 2. ...

九江学院《数字语音处理实验指导书》11.4.pdf

《数字语音处理》实验指导书主编 武良丹 九江学院电子工程学院 二零一零年二月 目

数字语音信号处理实验报告.doc

语音信号处理实验报告专业班级 学生姓名 指导教师 完成日期 电子信息 1203 钟英爽 覃爱娜 2015 年 4 月 28 日 电子信息工程系 信息科学与工程学院 实验语音...

多媒体实验指导书-修改最终版.doc

多媒体实验指导书-修改最终版 - 《多媒体技术》 实验指导书 编写 王雅琳、王晓丽、曹跃 中南大学信息科学与工程学院 2015 年 4 月 目 录 实验一 图像采集与...

2015 编译原理实验指导书.doc

2015 编译原理实验指导书_理学_高等教育_教育专区。...2、单词的 BNF 表示 标识符→字母字母数字串 ...(仅供参考): 这里以开始定义的 C 语言子集的源...

2015_《管理信息系统》实验指导书.pdf

2015_《管理信息系统》实验指导书 - 《管理信息系统》实验指导书 一、课程实

赵静数学实验实验指导书2015.doc

赵静数学实验实验指导书2015_理学_高等教育_教育专区...《数学建模与数学实验》实验指导书 《数学建模与数学...(信用等级数字越小,信用程序越高) ; 3)所购证券...

《电工电子学》实验指导书(2015年修订版).doc

《电工电子学》实验指导书(2015年修订版) - 《电工电子学》实验指导书 信息学院实验中心 2015 年 8 月 目 录 《电工电子学》实验指导书 ......

上海应用技术学院程序设计语言实验指导书(2015年).doc

上海应用技术学院程序设计语言实验指导书(2015年)_...用输入函数输入菜单选择的数字(0-4)对其他输入要...排序 4 0 输出 退出 其他 出错处理 N Y 退出? ...

2015-5信号与系统实验指导书.doc

2015-5信号与系统实验指导书 - 《信号与系统》实验指导书 《信号与系统及 MATLAB 实现》 实验指导书 1 《信号与系统》实验指导书 前 言 长期以来, 《信号与...

更多相关标签:
网站地图

文档资料共享网 nexoncn.com copyright ©right 2010-2020。
文档资料共享网内容来自网络,如有侵犯请联系客服。email:zhit325@126.com