男女声音信号的转换.docx
- 文档编号:584871
- 上传时间:2023-04-29
- 格式:DOCX
- 页数:7
- 大小:266.95KB
男女声音信号的转换.docx
《男女声音信号的转换.docx》由会员分享,可在线阅读,更多相关《男女声音信号的转换.docx(7页珍藏版)》请在冰点文库上搜索。
题目4:
男生女生声音信号的转换
(1)采集wav格式的男女生语音信号。
(2)对所采集的男女生信号进行频谱分析,比较男女生频谱的特点。
(3)实现男生女生声音信号的转换。
【知识点】
连续非周期信号的频谱,离散非周期信号的频谱,时域抽样,频域抽样
【温馨提示】
可以根据傅里叶变换公式,利用数值积分计算;也可以利用MATLAB提供的函数fft
计算。
【男生女生声音信号转换的方法】
(1)更改基频。
不同人的基频不同统计如下:
正常成年男声:
0~200Hz;正常成年女
声:
200~450Hz;小孩声音的基频要比女声的高,老年人的基频要比男声的低。
经
过整理统计可知女声基频=男声基频*1.5。
本程序使用的是通过抽样与插值的方式
来达到基频的改变。
以女变男为例:
用整数D对语音信号X(n)进行抽取Xd=X
(Dn);然后将X(n)的抽样频率提高到I(整数)倍,即为对X(n)的插值。
(2)时长规整通过抽样插值来改变基频也使播放速度,播放时间发生改变,
因此通过时长规整的方式来使播放速度和时间恢复到原来。
本程序使
用的是用重叠叠加算法来达到时长规整。
重叠叠加算法原理:
它分为
两个阶段——分解和合成将原始信号以帧长N,帧间距sa进行分解,
然后以帧间距ss进行合成。
sa与ss的的比值决定了时长规整因子
F=sa/ss。
【仿真程序】
(2)[x,fs,bits]=wavread('a.wav')
x=x(:
1);
sigLength=length(x)
t=(0:
sigLength-1)/fs;;
y=fft(x);
y=fftshift(y);
plot(t,y)
xlabel('Time(s)');
sound(x,fs)
[x,fs,bits]=wavread('b.wav')
x=x(:
1);
sigLength=length(x)
t=(0:
sigLength-1)/fs;;
y=fft(x);
y=fftshift(y);
plot(t,y)
xlabel('Time(s)');
sound(x,fs)
其中,a为女生音频,b为男生音频。
(3)女变男:
functionY=voical(x)
[x,fs,bits]=wavread('a.wav')
d=resample(x,3,2)
W=400;
Wov=W/2;
Kmax=2*W;
Wsim=Wov;
xdecim=8;
kdecim=2;
X=d';
F=1.5;
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);
xabs=0;
lastxpos=0;
km=0;
forypos=Wsim:
Ss:
(ypts-W);
xpos=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=(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
x=x(:
1);
sigLength=length(x)
t=(0:
sigLength-1)/fs;
figure;
I_fft=fftshift(fft(Y));
f=linspace(0,10,length(Y));
plot(f,I_fft)
sound(10*Y,fs)
end
男变女:
functionY=voical(x)
[x,fs,bits]=wavread('b.wav')
d=resample(x,33,50)
W=400;
Wov=W/2;
Kmax=1*W;
Wsim=Wov;
xdecim=8;
kdecim=2;
X=d';
F=0.66;
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);
xabs=1;
lastxpos=1;
km=0;
forypos=Wsim:
Ss:
(ypts-W);
xpos=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=(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
x=x(:
1);
sigLength=length(x)
t=(0:
sigLength-1)/fs;
figure;
I_fft=fftshift(fft(Y));
f=linspace(0,10,length(Y));
plot(f,I_fft)
sound(5*Y,fs)
end
【仿真结果】
(2)
(3)
【结果分析】
男声频谱高于女声频谱。
【自主学习内容】
基频改变方法,频谱线性插值的实现,时间长度的归整。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 男女 声音 信号 转换