男女声音信号的转换.docx

上传人:b****1 文档编号:166695 上传时间:2022-10-04 格式:DOCX 页数:7 大小:266.95KB
下载 相关 举报
男女声音信号的转换.docx_第1页
第1页 / 共7页
男女声音信号的转换.docx_第2页
第2页 / 共7页
男女声音信号的转换.docx_第3页
第3页 / 共7页
男女声音信号的转换.docx_第4页
第4页 / 共7页
男女声音信号的转换.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

男女声音信号的转换.docx

《男女声音信号的转换.docx》由会员分享,可在线阅读,更多相关《男女声音信号的转换.docx(7页珍藏版)》请在冰豆网上搜索。

男女声音信号的转换.docx

题目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)

【结果分析】

男声频谱高于女声频谱。

【自主学习内容】

基频改变方法,频谱线性插值的实现,时间长度的归整。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 党团建设

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1