语音信号预加重,分帧加窗
- 格式:pdf
- 大小:502.53 KB
- 文档页数:8
《语音信号处理》仿真作业
院系电气与电子工程学院专业班级
姓名
学号
指导教师
2020年3月
作业题目:语音信号的预处理和分帧
一、目的
(1)掌握语音信号的预处理;
(2)掌握语音信号的短时时域分析。
二、要求
(1)用Cooledit读入语音“我到北京去”。
(2)将读入的语音文件wav保存为.txt文件,设置采样率为8kHz,16位,单声道。
(3)把保存的文件.txt读入Matlab。
如:fid=fopen('zqq.txt','rt'); x=fscanf(fid,'%f'); fclose(fid);
(4)对采集到的语音样点值进行预加重。
(5)对采集到的语音样点值进行加窗(矩形和汉明)、分帧。
三、具体步骤(包含原理、具体实现、结果对比等)
1、基本原理
预加重:数字语音高频部分进行加重,去除口唇辐射影响,增加高频分辨率。
语音信号具有短时平稳性。
分帧是为了将无限长的语音信号,分成一段一段的,因为语音信号具有短时平稳性,方便处理,加窗是为了使分帧后的语音信号更加平稳。
窗函数主要有矩形窗和汉明窗。
加窗主要是为了使时域信号似乎更好地满足FFT处理的周期性要求,减少泄漏。
2、具体实现(步骤、代码)
第一步:打开Cooledit软件,开始录音,选择采样频率为8kHz,单声道,16位,录入“我到北京去”。
第二步:用Matlab软件读入.txt文件并进行预加重操作,代码如下
fid=fopen('G:\Desktop\专业学习教程\语音信号处理\作业及相关代码\我到北京去.txt','rt'); %打开文件
e=fscanf(fid,'%f'); %读数据
fclose(fid);
ee=e(11091:12090);
r=fft(ee,1024); %对信号ee进行1024点傅立叶变换
r1=abs(r); %对r取绝对值r1表示频谱的幅度值
pinlv=(0:1:999)*8000/512; %点和频率的对应关系
yuanlai=20*log10(r1); %对幅值取对数
signal(1:1000)=yuanlai(1:1000);%取256个点,目的是画图的时候,维数一致[h1,f1]=freqz([1,-0.98],[1],1000,4000);%高通滤波器
pha=angle(h1); %高通滤波器的相位
H1=abs(h1); %高通滤波器的幅值
r2(1:1000)=r(1:1000);
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(ee);title('原始语音信号');
xlabel('样点数');ylabel('幅度');
axis([0 1000 -3*10^4 2*10^4]);
subplot(212);plot(real(un));
title('经高通滤波后的语音信号');
xlabel('样点数');ylabel('幅度');
axis([0 1000 -1*10^4 1*10^4]);
figure(3);subplot(211);plot(pinlv,signal);title('原始语音信号频谱');
xlabel('频率/Hz');ylabel('幅度/dB');
subplot(212);plot(pinlv,u3);title('经高通滤波后的语音信号频谱');
xlabel('频率/Hz');ylabel('幅度/dB');
第三步:对语音信号进行加窗操作
clc;
clear;
close all;
fid=fopen('G:\Desktop\专业学习教程\语音信号处理\作业及相关代码\我到北京去.txt','rt'); %打开文件
e=fscanf(fid,'%f'); %读数据
fclose(fid);
x1=e(11091:12090);
figure()
plot(boxcar(200)) %画矩形窗波形
title('矩形窗');
figure()
plot(hamming(200)) %画汉明窗波形
title('汉明窗');
y1=fft(x1,1024); %对语音信号进行256点fft变换
figure()
subplot(211);
plot(x1);
title('原始语音信号');
subplot(212);
plot(abs(y1(1:1024)));
title('原始语音信号FFT频谱');
x2=enframe(x1,200,100);%分帧
figure();%画图
subplot(221);
plot(x2(50,:)) %画第50帧波形
title('语音信号第50帧波形');
x3=enframe(x1,boxcar(200),100);%每两百个点分为一帧,再加矩形窗subplot(222);
plot(x3(50,:)) %画第50帧波形
title('加矩形窗后第50帧波形');
x4=enframe(x1,hamming(200),100);%每两百个点分为一帧,再加汉明窗subplot(224);
plot(x5(50,:)) %画第50帧波形
title('加汉明窗后第50帧波形');
3、实验结果说明
预加重处理相关结果:
信号分帧加窗处理相关结果:
由给出的处理前后波形对比可以较为明确的看出处理后的变化。
四、总结
这次作业虽然参考了书上的例程,但是在进行对例程的修改的时候还是遇到了不少困难的,比如将Cooledit音频文件转存为.txt文件后在Matlab中进行打开,但是在数据读取时一直会报错,检查了很久才最终发现没有将.txt文件中对音频文件的特征描述给删除,导致.txt 中出现了字符型的数据,影响了信号的输入。
在对信号进行分帧加窗处理时,在网络上了解并向Matlab软件中添加了Viocebox工具箱,使得一些较为复杂的处理过程得到了大大简化。