对采集的语音信号进行matlab设计与分析课程设计报告 30.docx
- 文档编号:12781429
- 上传时间:2023-04-22
- 格式:DOCX
- 页数:44
- 大小:1.69MB
对采集的语音信号进行matlab设计与分析课程设计报告 30.docx
《对采集的语音信号进行matlab设计与分析课程设计报告 30.docx》由会员分享,可在线阅读,更多相关《对采集的语音信号进行matlab设计与分析课程设计报告 30.docx(44页珍藏版)》请在冰豆网上搜索。
对采集的语音信号进行matlab设计与分析课程设计报告30
语
音
信
号
采
集
与
处
理
主题:
Matlab与信息系统仿真课程设计
组长:
XXX
组员:
XXXXXXX
班级:
电子信息工程1201
第一章课程设计情况概述
1.1课程设计目的…………………………………………………3
1.2课程设计内容…………………………………………………3
1.3小组分工………………………………………………………3
第二章具体实现方案及小结
2.1第
(1)、
(2)版块:
录制语以及频谱分析………………………………4
2.1.1板块要求…………………………………………………………………4
2.1.2版块分析及具体实现代码………………………………………………4
2.1.3Matlab仿真结果图……………………………………………………5
2.2第(3)版块:
采样…………………………………………………………7
2.2.1版块要求…………………………………………………………………7
2.2.2板块分析及具体实现代码……………………………………………7
2.3第(4)版块:
对语音实现几种常见变化……………………………………13
2.3.1版块要求………………………………………………………………13
2.3.2板块分析及具体实现代码……………………………………………13
2.4第(5)版块:
调制、解调………………………………………………25
2.4.1板块要求………………………………………………………………25
2.4.2版块分析及具体实现代码……………………………………………25
2.4.3Matlab仿真结果图……………………………………………………28
2.5第(6)版块:
加噪、滤波………………………………………………32
2.5.1板块要求………………………………………………………………32
2.5.2版块分析及具体实现代码……………………………………………32
2.6小结………………………………………………………………………41
第一章课程设计情况概述
1.1课程设计目的
本课程设计要求掌握Matlab语言特性、数学运算和图形表示;掌握Matlab程序设计方法在信息处理方面的一些应用;掌握在Windows环境下,利用Matlab进行语音信号采集与处理的基本方法。
综合设计实验方案设计5天分析题目,查找相关资料,利用已掌握知识、原理,提出设计具体方案,拟订设计步骤,确定方案,编写程序代码并上机调试,修改完善设计,记录数据,分析结果。
1.2课程设计内容
这次的课程设计大致分为两个阶段,一周为一个阶段。
1.关于Matlab的基础训练
Matlab在信号与系统、随机信号处理中的基本应用
2.综合设计:
语音信号的采集与处理
(1)利用windows自带的录音机或者其它录音软件,录制几段语音信号(要有几种不同的声音,要有男声、女声)。
(2)对录制的语音信号进行频谱分析,确定该段语音的主要频率范围,由此频率范围判断该段语音信号的特点(低沉or尖锐?
)
(3)利用采样定理,对该段语音信号进行采样,观察不同采样频率(过采样、欠采样、临界采样)对信号的影响。
(4)实现语音信号的快放、慢放、倒放、回声、男女变声。
(5)对采集到的语音信号进行调制与解调,观测调制与解调前后信号的变化。
(6)对语音信号加噪,然后进行滤波,分析不同的滤波方式对信号的影响。
1.3小组分工
第
(1)、
(2)版块XXX,第(3)版块XXX,第(4)版块XXX,第(5)版块XXX,第(6)版块XXX,报告最终由组长统一整理。
第二章具体实现方案
2.1第
(1)、
(2)版块:
录制语音以及频谱分析
2.1.1版块要求:
①利用windows自带的录音机或者其它录音软件,录制几段语音信号(要有几种不同的声音,要有男声、女声)。
②对录制的语音信号进行频谱分析,确定该段语音的主要频率范围,由此频率范围判断该段语音信号的特点(低沉还是尖锐?
)
2.1.2版块分析及具体实现代码:
先录制几段音频,再利用Matlab编程对其进行频谱分析。
[x1,fs,nbits]=wavread('D:
\matlab\语音样本.wav');%读取音频文件,识别的是音频存放地址
sound(x1,fs);%利用matlab中发声函数sound语句
N=length(x1);
M=log(N)/log
(2);
Q=round(M);%round函数是对所得数取整
S=2^Q;%求得与N最接近的2的n次幂
n=[0:
N-1];%从0取到N-1
X=fft(x1);%进行傅里叶变换
Fs=1*fs;
f=n/N*Fs;%图2的横坐标
figure
(1);
subplot(2,1,1);plot(n,x1);%绘制原音频信号图
title('原始音频信号');
Amp=abs(X)/(S/2);
Amp(1,:
)=Amp(1,:
)/2;
subplot(2,1,2);plot(f,Amp);
axis([0,3000,0,0.01])%绘制频谱图
title('音频的幅度谱');
在设计算法的过程中,本段程序的难点在于如何找到与length(x1)最接近的2的n次幂,以及傅立叶变换之后的频谱值(即图中的纵坐标值)。
通过先对length(x1)求2的对数,再利用round函数进行四舍五入求整,最终得到想要的最接近length(x1)的2的n次幂。
2.1.3Matlab仿真结果图:
从图中可以读出这段音频信号的频率大概在100~800赫兹,比较低沉,一般来说应该是男声。
从图中可以读出这段音频信号的频率大概在700~1400赫兹,比较尖锐,一般来说应该是女声。
2.2第(3)版块:
采样
2.2.1版块要求
利用采样定理,对该段语音信号进行采样,观察不同采样频率(过采样、欠采样、临界采样)对信号的影响。
2.2.2板块分析及具体实现代码
这里涉及到采样下重采样的问题。
所谓重采样就是对一系列离散的数字信号进行插值(升频)或去值(降频),以改变原有信号的采样率,在Matlab中,可以用resample(x,p,q),decimate(x,r)函数实现。
也可以将原有音频进行重构,对获得的波形进行二次采样,不过这样比较麻烦。
本段程序采用的是resample(x,p,q)函数,所用的音频时间大概有3秒,更有利于观察对频谱的影响。
RESAMPLE函数的原理:
p/Q是确定采样频率的必要条件,由于系统录音所确定的采样频率由[x1,fs,nbits]=wavread('D:
\matlab\nv.wav')所决定;%读取音频文件返回值为44100hz。
对于所用音频,其频谱分析出来的最高频率是fm=1750hz。
由采样定理得,采样频率fs=2fm=3500hz,大约是44100的1/13。
当为临界采样时fs=2fm,确定p=1,Q=13,采样频率为3500hz;
当为过采样时fs>2fm,确定P=1,Q=10,采样频率为4410hz;
当为欠采样时fs<2fm,确定P=1,Q=18,采样频率为2450hz;
程序代码:
[x1,fs,nbits]=wavread('D:
\matlab\nv.wav');%读取音频文件,识别的是地址
sound(x1,fs);%利用matlab中发声函数sound语句
N=length(x1);
M=log(N)/log
(2);
Q=round(M);
S=2^Q;
n=[0:
N-1];%n从0取到N-1
X=fft(x1);%进行傅里叶变换
Fs=1*fs;
f=n/N*Fs;
figure
(1);
subplot(2,1,1);plot(n,x1);%绘制原音频信号
title('原始音频信号');
Amp=abs(X)/(S/2);
Amp(1,:
)=Amp(1,:
)/2;
subplot(2,1,2);plot(f,Amp);
axis([0,4000,0,0.01])%绘制频谱图
title('音频的幅度谱');
临界采样:
[x,fs,nbits]=wavread('D:
\matlab\nv.wav');%读取音频文件,识别的是地址
x2=resample(x,1,13);%采样频率化为3500Hz
sound(x2,fs/13);%利用matlab中发声函数sound语句
N=length(x2);
M=log(N)/log
(2);
Q=round(M);
S=2^Q;
n=[0:
N-1];%从0取到N-1
X=fft(x2);%进行傅里叶变换
Fs=fs/14;
f=n/N*Fs;
figure
(2)
subplot(2,1,1);plot(n,x2);%绘制原音频信号
title('临界采样后原始音频信号');
Amp=abs(X)/(S/2);
Amp(1,:
)=Amp(1,:
)/2;
subplot(2,1,2);plot(f,Amp);
axis([0,4000,0,0.01])%绘制频谱图
title('临界采样音频的幅度谱');
过采样:
[x,fs,nbits]=wavread('D:
\matlab\nv.wav');%读取音频文件,识别的是地址
x3=resample(x,1,10);%采样频率化为4410Hz
sound(x3,fs/10);%利用matlab中发声函数sound语句
N=length(x3);
M=log(N)/log
(2);
Q=round(M);
S=2^Q;
n=[0:
N-1];%从0取到N-1
X=fft(x3);%进行傅里叶变换
Fs=fs/10;
f=n/N*Fs;
figure(3);
subplot(2,1,1);plot(n,x3);%绘制原音频信号
title('过采样后原始音频信号');
Amp=abs(X)/(S/2);
Amp(1,:
)=Amp(1,:
)/2;
subplot(2,1,2);plot(f,Amp);
axis([0,4000,0,0.01])%绘制频谱图
title('过采样后音频的幅度谱');
欠采样
[x,fs,nbits]=wavread('D:
\matlab\nv.wav');%读取音频文件,识别的是地址
x4=resample(x,1,18);%采样频率化为2450Hz
sound(x4,fs/18);%利用matlab中发声函数sound语句
N=length(x4);
M=log(N)/log
(2);
Q=round(M);
S=2^Q;
n=[0:
N-1];%从0取到N-1
X=fft(x4);%进行傅里叶变换
Fs=fs/18;
f=n/N*Fs;
figure(4);
subplot(2,1,1);plot(n,x4);%绘制原音频信号
title('欠采样后原始音频信号');
Amp=abs(X)/(S/2);
Amp(1,:
)=Amp(1,:
)/2;
subplot(2,1,2);plot(f,Amp);
axis([0,4000,0,0.01])%绘制频谱图
title('欠采样后音频的幅度谱');
频谱分析:
由第一段程序对所用的音频进行频谱分析所得频谱图可知,这段音频的最大频率为1750Hz,也就可以确定三种采样所用的采样频率。
由采样定理知,临界采样和过采样对声音不会有太大影响,临界采样让相邻频谱紧靠,过采样让相邻频谱分开一段距离。
而欠采样则让频谱不全,声音听起来低沉暗哑。
2.3第(4)版块:
对语音实现几种常见变化
2.3.1板块要求
实现语音信号的快放、慢放、倒放、回声、男女变声。
2.3.2版块分析及具体实现代码
①实现对录音内容倒放
[x,fs,Nbits]=wavread('D:
\matlab\语音样本.wav');
x=flipud(x)
wavplay(x,fs);%对加载的语音信号进行回放
②实现录音内容回声
[x,fs,bits]=wavread('D:
\matlab\语音样本.wav');%读取语音信号
n1=0:
2000;
b=x(:
1);%产生单声道信号
N=3;
M=length(x);
yy2=filter(1,[1,zeros(1,80000/(N+1)),0.7],[b',zeros(1,40000)]);%IIR滤波器进行滤波
figure(3)
subplot(2,1,1);plot(yy2);%三次回声滤波器时域波形
title('三次回声滤波器时域波形');
YY2=fft(yy2);%对三次回声信号做FFT变换
subplot(2,1,2);plot(n1(1:
1000),YY2(1:
1000)/M);%三次回声滤波器频谱图
title('三次回声滤波器频谱图');
figure(4)
subplot(2,1,1);plot(abs(YY2)/M);%经傅里叶变换之后的信号的幅值
title('幅值');
subplot(2,1,2);plot(angle(YY2));%经傅里叶变换之后的信号的相位
title('相位');
sound(5*yy2,fs,bits);%经三次回声滤波器后的语音信号,乘以5是为了加强信号
③实现对录音内容快放
[x1,fs]=wavread('D:
\matlab\语音样本.wav');%读取音频文件,识别的是地址
N=length(x1);
n=[0:
N-1];
X=fft(x1);%进行傅里叶变换
Fs=1*fs;
f=n/N*Fs;
t=0:
1/fs:
(N-1)/fs;
figure
(1);
subplot(2,1,1);plot(t,x1/N);%绘制原音频信号
title('原音频信号');
subplot(2,1,2);plot(f,abs(X)/N);%绘制频谱图
title('音频的幅度谱');
sound(x1,1.5*fs);%以1.5倍速度播放
Fs2=1.5*fs;
t2=0:
1/Fs2:
(N-1)/Fs2;
f2=n/N*Fs2;
figure
(2);
subplot(2,1,1);plot(t2,x1/N);
title('快放后的音频信号');
subplot(2,1,2);plot(f2,abs(X)/N);
title('快放后的幅度谱');
④实现对录音内容慢放
[x1,fs]=wavread('D:
\matlab\语音样本.wav');%读取音频文件,识别的是地址
N=length(x1);
n=[0:
N-1];
X=fft(x1);%进行傅里叶变换
Fs=1*fs;
f=n/N*Fs;
t=0:
1/fs:
(N-1)/fs;
figure
(1);
subplot(2,1,1);plot(t,x1/N);%绘制原音频信号
title('原音频信号');
subplot(2,1,2);plot(f,abs(X)/N);%绘制频谱图
title('音频的幅度谱');
sound(x1,0.5*fs);%以0.5倍速度播放
Fs2=0.5*fs;
t2=0:
1/Fs2:
(N-1)/Fs2;
f2=n/N*Fs2;
figure
(2);
subplot(2,1,1);plot(t2,x1/N);
title('慢放后的音频信号');
subplot(2,1,2);plot(f2,abs(X)/N);
title('慢放后的幅度谱');
⑤⑤实现男女变声(实现男女变声都需调用一个voice函数)
functionY=voice(x,f)%更改采样率使基频改变f>1降低;f<1升高
f=round(f*1000);
d=resample(x,f,1000);%时长整合使语音文件恢复原来时长
W=400;
Wov=W/2;
Kmax=W*2;
Wsim=Wov;
xdecim=8;
kdecim=2;X=d';
F=f/1000;
Ss=W-Wov;
xpts=size(X,2);
ypts=round(xpts/F);
Y=zeros(1,ypts);
xfwin=(1:
Wov)/(Wov+1);
ovix=(1-Wov):
0;newix=1:
(W-Wov);
simix=(1:
xdecim:
Wsim)-Wsim;
padX=[zeros(1,Wsim),X,zeros(1,Kmax+W-Wov)];
Y(1:
Wsim)=X(1:
Wsim);lastxpos=0;km=0;
forypos=Wsim:
Ss:
(ypts-W)
xpos=round(F*ypos);
kmpred=km+(xpos-lastxpos);
lastxpos=xpos;
if(kmpred<=Kmax)
km=kmpred;
else
ysim=Y(ypos+simix);
rxy=zeros(1,Kmax+1);
rxx=zeros(1,Kmax+1);
Kmin=0;
fork=Kmin:
kdecim:
Kmax
xsim=padX(Wsim+xpos+k+simix);
rxx(k+1)=norm(xsim);
rxy(k+1)=(ysim*xsim');
end
Rxy=(rxx~=0).*rxy./(rxx+(rxx==0));
km=min(find(Rxy==max(Rxy))-1);
end
xabs=xpos+km;
Y(ypos+ovix)=((1-xfwin).*Y(ypos+ovix))+(xfwin.*padX(Wsim+xabs+ovix));
Y(ypos+newix)=padX(Wsim+xabs+newix);
end
end
Ⅰ.男声变女声
[y,fs,nbits]=wavread('D:
\matlab\语音样本.wav');%读取声音文件
x=y(:
1);%读入的y矩阵有两列,取第1列
y1=voice(x,0.40);%调整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.40;
f=n/N*Fs;f1=m/M*Fs*0.40;
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(f,abs(X)/N);
xlabel('frequency/Hz');ylabel('magnitude');title('转换前的频谱');
subplot(2,1,2);
plot(f1,abs(Y)/M);
xlabel('frequency/Hz');ylabel('magnitude');title('转换后的频谱');
sound(y1,fs,nbits);
Ⅱ.女声变男声
[y,fs,nbits]=wavread('D:
\matlab\语音样本2.wav');%读取声音文件
x=y(:
1);%读入的y矩阵有两列,取第1列
y1=voice(x,1.6);%调整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/1.61;
f=n/N*Fs;f1=m/M*Fs*1.61;
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(f,abs(X)/N);
xlabel('frequency/Hz');ylabel('magnitude');title('转换前的频谱');
subplot(2,1,2);
plot(f1,abs(Y)/M);
xlabel('frequency/Hz');ylabel('magnitude');title('转换后的频谱');
sound(y1,fs,nbits);
wavwrite(y1,1*fs,'D:
\matlab\语音样本2.wav')
经过统计整理可知:
女声基频=男声基频*1.5,本程序是通过抽样与插值的方式来达到基频的改变。
2.4第(5)版块:
调制、解调
2.4.1版块要求:
对采集到的语音信号进行调制与解调,观测调制与解调前后信号的变化。
2.4.2版块分析及具体实现代码:
语音信号与高频正弦载波相调制,比较其频谱变化,回放信号,比较是与众语音信号变化。
将调制后的信号进行解调,回放信号,比较时域中语音信号变化。
1.调制
所谓调制就是在传送信号的一方将所要传送的信号附加在高频振荡上,再由天线发射出去。
这里高频振荡波就是携带信号的运载工具,也叫载波。
振幅调制,就是由调制信号去控制高频载波的振幅,直至随调制信号做线性变化。
在线性调制系列中,最先应用的一种幅度调制是全调幅或常规调幅,简称为调幅(AM)。
在频域中已调波频谱是基带调制信号频谱的线性位移;在时域中,已调波包络与调制信号波形呈线性关系。
设正弦载波c(t)=Acos(ω0t+
)式中,A为载波幅度;ω0为载波角频率;
为载波初始相位(假设
=0).调制信号(基带信号)为m(t)。
根据调制的定义,振幅调制信号(已调信号)一般可以表示
.
标准调幅波(AM)产生原理:
调制信号是只来来自信源的调制信号(基带信号),这些信号可以是模拟的,亦可以是数字的。
为首调制的高频振荡信号可称为载波,它可以是正弦波,亦可以是非正弦波(如周期性脉冲
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 对采集的语音信号进行matlab设计与分析课程设计报告 30 采集 语音 信号 进行 matlab 设计 分析 课程设计 报告