MATLAB课程设计报告语音信号的采集与处理.docx
《MATLAB课程设计报告语音信号的采集与处理.docx》由会员分享,可在线阅读,更多相关《MATLAB课程设计报告语音信号的采集与处理.docx(24页珍藏版)》请在冰豆网上搜索。
![MATLAB课程设计报告语音信号的采集与处理.docx](https://file1.bdocx.com/fileroot1/2022-10/23/01822ec5-3fa5-485b-bfd3-cf41e43c643c/01822ec5-3fa5-485b-bfd3-cf41e43c643c1.gif)
MATLAB课程设计报告语音信号的采集与处理
MATLAB
课程设计
学院:
电气信息工程学院
课题:
语音信号的采集与处理
班级:
电信1201
组长:
组员:
指导老师:
语音信号的采集与处理
一、实验要求
(1)本课程设计要求掌握MATLAB语言特性、数学运算和图形表示;掌握MATLAB程序设计方法在信息处理方面的一些应用;掌握在Windows环境下,利用MATLAB进行语音信号采集与处理的基本方法。
(2)本课程设计分为基础与综合设计题目,其中基础题目为MATLAB基本训练(必做);对于综合设计题,需按照任务书要求,对设计过程所进行的有关步骤进行理论分析,并对完成的设计作出评价,总结自己整个设计工作中的经验教训、收获;在课设最后一天提交课程设计报告,报告必须按照统一格式打印,装订成册。
二、实验内容
1、利用windows自带的录音机或者其它录音软件,录制几段语音信号(要有几种不同的声音,要有男声、女声)。
2、对录制的语音信号进行频谱分析,确定该段语音的主要频率范围,由此频率范围判断该段语音信号的特点(低沉or尖锐?
)
3、利用采样定理,对该段语音信号进行采样,观察不同采样频率(过采样、欠采样、临界采样)对信号的影响。
这里涉及到采样下重采样的问题,请大家思考如何去做。
4、实现语音信号的快放、慢放、倒放、回声、男女变声。
5、对采集到的语音信号进行调制与解调,观测调制与解调前后信号的变化。
6、对语音信号加噪,然后进行滤波,分析不同的滤波方式对信号的影响。
7、如果精力和时间允许,鼓励利用MATLABGUI制作语音信号采集与分析演示系统。
三、MATLAB仿真
任务一(陈康负责)
1.利用频谱的分析
利用Windows下的录音机,录制一段男生和女生的语音,存为*.WAV的文件。
然后在Matlab软件平台下,利用函数wavread对语音信号进行采样,记住采样频率和采样点数。
首先画出语音信号的时域波形;然后对语音号进行快速傅里叶变换(FFT变换),得到信号的频谱特性,分析语音信号频谱。
源程序:
fs=44100;
[x,fs,Nbits]=wavread('E:
\GQQQ\leo');
derta_fs=fs/length(x);
t=0:
1/44100:
(length(x)-1)/44100;
sound(x,fs);%对加载的语音信号进行回放
figure
(1)
plot(t,x)%做原始语音信号的时域图形
title('原始语音信号');
xlabel('timen');
ylabel('fuzhin');
n=length(x);%求出语音信号的长度
y1=fft(x,n);%傅里叶变换
w=1/n*[0:
n-1]*fs;
figure
(2)
plot([-fs/2:
derta_fs:
fs/2-derta_fs],abs(fftshift(y1)*2/n));%做原始语音信号的FFT频谱图
title('原始语音信号FFT频谱')
频谱分析对比
运行结果:
女生:
频谱分析:
从300hz到2000hz都有分布,主要集中在300—1200Hz,声音尖锐,是女生频谱。
男生:
频谱分析:
从200hz到1000hz都有分布,集中在300—1000Hz声音低沉,是男生频谱。
任务二(詹筱珊负责)
利用采样定理,对该段语音信号进行采样,观察不同采样频率(过采样、欠采样、临界采样)对信号的影响。
这里涉及到采样下重采样的问题,请大家思考如何去做。
源程序:
clear;
[y,fs,bits]=wavread('E:
\GQQQ\WOMAN');%x语音数据fs采样频率bits采样点数
sound(y,fs,bits);%话音回放
n=length(y);%求出语音信号的长度
derta_fs=fs/length(y);
Y=fft(y,n);%傅里叶变换
figure
(1);
subplot(2,1,1);
plot(y);
title('原始信号波形');
subplot(2,1,2);
plot([-fs/2:
derta_fs:
fs/2-derta_fs],abs(fftshift(Y)*2/n));
title('原始信号频谱');grid
y1=decimate(y,2);%采样频率为22050Hz,过采样
fs1=fs/2;
sound(y1,fs1,bits);%话音回放
n1=length(y1);%求出语音信号的长度
derta_fs=fs/length(y1);
Y1=fft(y1,n1);%傅里叶变换
figure
(2);
subplot(2,1,1);
plot(y1);
title('过采样信号波形');
subplot(2,1,2);
plot([-fs/2:
derta_fs:
fs/2-derta_fs],abs(fftshift(Y1)*2/n1));
title('过采样信号频谱');grid
y2=decimate(y,4);%每4个取一个,采样频率为11025Hz接近临界采样
fs2=fs/4;
sound(y2,fs2,bits);%话音回放
n2=length(y2);%求出语音信号的长度
derta_fs=fs/length(y2);
Y2=fft(y2,n2);%傅里叶变换
figure(3);
subplot(2,1,1);
plot(y2);
title('临界采样信号波形');
subplot(2,1,2);
plot([-fs/2:
derta_fs:
fs/2-derta_fs],abs(fftshift(Y2)*2/n2));
title('临界采样信号频谱');grid
y3=decimate(y,8);%抽取函数,频率变为原来1/8,欠采样
fs2=fs/8;
sound(y2,fs2,bits);%话音回放
n3=length(y3);%求出语音信号的长度
derta_fs=fs/length(y3);
Y3=fft(y3,n3);%傅里叶变换
figure(4);
subplot(2,1,1);
plot(y3);
title('欠采样信号波形');
subplot(2,1,2);
plot([-fs/2:
derta_fs:
fs/2-derta_fs],abs(fftshift(Y3)*2/n3));
title('欠采样信号频谱');grid
运行结果:
任务三(郭前负责)
实现语音信号的快放、慢放、倒放、回声、男女变声
源程序:
%变速-快放%
fs=25600;
[z,fs,nbits]=wavread('E:
\GQQQ\leo');%读取声音文件
derta_fs=fs/length(z);
x=z(:
1);%读入的y矩阵有两列,取第1列
y1=voice(x,1.5);%调整voice()第2个参数转换音调,>1降调,<1升调,y1为x转换后的声音
w=1.5;
F=w*fs;%w>1为快放,w<1为慢放
sound(y1,F)
N=length(x);M=length(y1);
n=0:
N-1;m=0:
M-1;
X=fft(x);Y=fft(y1);%傅里叶变换
T=1/fs;T1=1/(fs*w);
f=n/N*fs;f1=m/M*fs*w;
t=n*T;t1=m*T1;
figure;
subplot(2,1,1);
plot(t,x);
xlabel('t/s');ylabel('幅值');title('转换前的波形');
subplot(2,1,2);
plot(t1,y1);
xlabel('t/s');ylabel('幅值');title('转换后的波形');
figure;
subplot(2,1,1);
plot([-fs/2:
derta_fs:
fs/2-derta_fs],abs(fftshift(X))*2/N);
xlabel('frequency/Hz');ylabel('幅值');title('转换前的频谱');
subplot(2,1,2);
plot([-fs/2:
derta_fs:
fs/2-derta_fs],abs(fftshift(Y))*2/N);
xlabel('frequency/Hz');ylabel('幅值');title('转换后的频谱');
快放:
快放之后时间缩短。
慢放:
慢放之后时间变长。
倒放
fs=22050;
[x,fs,Nbits]=wavread('E:
\GQQQ\leo');
t=0:
1/22050:
(length(x)-1)/22050;%对加载的语音信号进行回放
y=flipud(x)%对加载的语音信号实现翻转函数
figure
(1)
subplot(2,1,1);
plot(x);%声音的时域波形
title('原声音的波形');
subplot(2,1,2);
plot(y);
title('倒放后声音的波形');
wavplay(y,fs);
回声:
[y,fs,nbits]=wavread('E:
\GQQQ\WOMAN');
x=y(:
1);
z=[zeros(50000,1);x];%延时50000个点
x1=[x;zeros(50000,1)];%使原声音长度与延时后相等
y1=x1+0.4*z;%原声+延时衰减
figure
(2)
subplot(2,1,1);
plot(x);%声音的时域波形
title('原声音的波形');
subplot(2,1,2);
plot(y1);
title('加入回声的波形');
sound(5*y1,fs,nbits);
男声转换为女声
[y,fs,nbits]=wavread('E:
\GQQQ\leo');%读取声音文件
x=y(:
1);%读入的y矩阵有两列,取第1列
y1=voice(x,0.71);%调整voice()第2个参数转换音调,>1降调,<1升调,y1为x转换后的声音
N=length(x);M=length(y1);
n=0:
N-1;m=0:
M-1;
X=fft(x);Y=fft(y1);%傅里叶变换
Fs=2*fs;%2倍频
T=1/Fs;T1=1/Fs*0.71;
f=n/N*Fs;f1=m/M*Fs/0.71;
derta_Fs=Fs/length(x);
derta_Fs1=Fs/length(y1);
t=n*T;t1=m*T1;
figure;
subplot(2,1,1);
plot(t,x);
xlabel('t/s');ylabel('magnitude');title('转换前的波形');
subplot(2,1,2);
plot(t1,y1);
xlabel('t/s');ylabel('magnitude');title('转换后的波形');
figure;
subplot(2,1,1);
plot([-Fs/2:
derta_Fs:
Fs/2-derta_Fs],abs(fftshift(X)*2/N));
xlabel('frequency/Hz');ylabel('magnitude');title('转换前的频谱');