数字语音处理B第二次实验教学内容.docx
《数字语音处理B第二次实验教学内容.docx》由会员分享,可在线阅读,更多相关《数字语音处理B第二次实验教学内容.docx(16页珍藏版)》请在冰豆网上搜索。
数字语音处理B第二次实验教学内容
数字语音处理B
2016–2017学年第2学期电信1405龙为花
第二次实验
一、实验目的
1.掌握短时傅里叶变换的定义,并理解其两种解释
2.理解窗函数对短时傅里叶谱的影响,并能根据需要选择适当的窗函数
3.理解同态信号处理的原理
4.掌握倒谱的定义及计算方法
5.对以上各项能用Matlab代码实现,并能画出相应谱图
二、实验内容
1.画出ah第20帧单帧语音时域图,窗长20ms,帧移10ms,同时加矩形窗和hamming窗
分帧函数:
function[frameSet,timeAxis,frameCount]=enframe(data,fs,timeperFrame,overlapRate,winF)
winfunc=str2func(winF);
ndata=length(data(:
));
frameLength=fs*timeperFrame*0.001;
nframeLength=length(winfunc(frameLength));%取窗长
overlap=frameLength*overlapRate;
inc=frameLength-overlap;
if(nframeLength==1)
len=frameLength;
else
len=nframeLength;
end
frameCount=fix((ndata-overlap)/inc);%计算帧数
frameSet=zeros(len,frameCount);
startIndexf=(0:
(frameCount-1))*inc;%每帧在数据data中开始的位置
startIndexs=(1:
len);
startIndexsT=startIndexs(:
);
frameSet(:
)=data(startIndexsT(:
ones(frameCount,1))+startIndexf(ones(1,len),:
));
w=winfunc(frameLength);
if(nframeLength>1)
frameSet=frameSet.*w(:
ones(frameCount,1));
end
timeAxis=(((1:
frameCount)-1)*inc+frameLength/2)/fs;%求出每帧对应的时间
主函数:
clc
clearall
closeall
%----------------------------------------
loadah;
x1=enframe(data,fs,20,0.5,'boxcar');
x2=enframe(data,fs,20,0.5,'hamming');
plot(x1(:
20),'g','LineWidth',2);
holdon;
plot(x2(:
20),'b','LineWidth',2);
legend('矩形窗信号','汉明窗信号');
xlabel('时间(采样点数)');ylabel('幅度');
suptitle('电信1405龙为花0121409341029')
图1:
语音ah第20帧时域波形图与加hammming窗10k采样
2.语音单帧频谱图
clc
clearall
closeall
%----------------------------------------
loadah;
fs=10000;
x2=enframe(data,fs,20,0.5,'boxcar');
x1=enframe(data,fs,20,0.5,'hamming');
u1=x1(:
20);%取得一帧数据
u2=x2(:
20);
N=1024;
t=(0:
N-1)/fs;
y1=20*log10(fft(u1,N));
y2=20*log10(fft(u2,N));
f=(0:
511)*fs/1024;
figure
(1);
xlabel('Hz');
ylabel('db');
plot(f,y1(1:
512),'r','LineWidth',1);%做原始语音信号的FFT频谱
legend('汉明窗的频谱');
figure
(2);
plot(f,y2(1:
512),'b','LineWidth',1);
xlabel('Hz');
ylabel('db');
legend('矩形窗的频谱');
suptitle('电信1405龙为花0121409341029')
图2:
ah第20帧单帧语音频谱图,窗长20ms,帧移10ms,矩形窗和hamming窗,10k采样
3.语音频域功率谱图
clc
clearall
closeall
%----------------------------------------
loadah;
fs=10000;
x2=enframe(data,fs,20,0.5,'boxcar');
x1=enframe(data,fs,20,0.5,'hamming');
u1=x1(:
20);%取得一帧数据
u2=x2(:
20);
N=1024;
t=(0:
N-1)/fs;
y1=20*log10(fft(u1,N));
y2=20*log10(fft(u1,N).^2);
f=(0:
511)*fs/1024;
figure
(1);
plot(f,y1(1:
512),'b','LineWidth',1.5);%做原始语音信号的频谱
holdon;
plot(f,y2(1:
512),'r','LineWidth',1.5);%做原始语音信号的功率谱
xlabel('Hz');
ylabel('db');
suptitle('电信1405龙为花0121409341029')
legend('汉明窗的频谱','汉明窗功率谱');
z1=20*log10(fft(u2,N));
z2=20*log10(fft(u2,N).^2);
figure
(2);
plot(f,z1(1:
512),'b','LineWidth',1);%做原始语音信号的频谱
holdon;
plot(f,z2(1:
512),'r','LineWidth',1);%做原始语音信号的功率谱
xlabel('Hz');
ylabel('db');
suptitle('电信1405龙为花0121409341029')
legend('矩形窗的频谱','矩形窗功率谱');
图3:
Ah第20帧时域波形图,10k采样,帧长20ms,hamming窗
图4:
Ah第20帧时域波形图,10k采样,帧长20ms,矩形窗
4.语谱图
(1)
clc
clear
closeall
[x,fs]=audioread('E:
\1.wav');
m1=42230;
m2=138000;
x=x(m1:
m2);
win=0.01;inc=win/2;
winlen=win.*fs;
inclen=inc.*fs;
amp1=enframe(filter([1-0.9375],1,x),hamming(winlen),inclen)';
n=fix((length(x)-winlen+inclen)/inclen);
w=winlen/2+1;
n2=1:
w;
freq=(n2-1)*fs/winlen;
Y=fft(amp1);
Yn=Y(n2,:
);clf;
frameTime=(1:
n)*inclen;
imagesc(frameTime,freq,20*log10(abs(Yn)+eps));
axisxy;
xlabel('时间/s)');ylabel('频率/Hz');
colormap(jet);
suptitle('电信1405龙为花0121409341029')
图5:
语音WHUT语谱图,10k采样
(2)
clc
clear
closeall
[x,fs]=audioread('E:
\1.wav');
m1=42230;
m2=138000;
x=x(m1:
m2);
win=0.04;inc=win/2;
winlen=win.*fs;
inclen=inc.*fs;
amp1=enframe(filter([1-0.9375],1,x),hamming(winlen),inclen)';
n=fix((length(x)-winlen+inclen)/inclen);
w=winlen/2+1;
n2=1:
w;
freq=(n2-1)*fs/winlen;
Y=fft(amp1);
Yn=Y(n2,:
);clf;
frameTime=(1:
n)*inclen;
imagesc(frameTime,freq,20*log10(abs(Yn)+eps));
axisxy;
xlabel('时间/s');ylabel('频率/Hz');
colormap(jet);
suptitle('电信1405龙为花0121409341029')
图6
4.2
(1)
clc
clear
closeall
load('should.mat');
fs=10000;
win=0.01;inc=win/2;
winlen=win.*fs;
inclen=inc.*fs;
amp1=enframe(filter([1-0.9375],1,data),hamming(winlen),inclen)';
n=fix((length(data)-winlen+inclen)/inclen);
w=winlen/2+1;
n2=1:
w;
freq=(n2-1)*fs/winlen;
Y=fft(amp1);
Yn=Y(n2,:
);clf;
frameTime=(1:
n)*inclen;
imagesc(frameTime,freq,20*log10(abs(Yn)+eps));
axisxy;
xlabel('时间/s');ylabel('频率/Hz');
colormap(jet);
suptitle('电信1405龙为花0121409341029')
图7
(2)
clc
clear
closeall
load('should.mat');
fs=10000;
win=0.04;inc=win/2;
winlen=win.*fs;
inclen=inc.*fs;
amp1=enframe(filter([1-0.9375],1,data),hamming(winlen),inclen)';
n=fix((length(data)-winlen+inclen)/inclen);
w=winlen/2+1;
n2=1:
w;
freq=(n2-1)*fs/winlen;
Y=fft(amp1);
Yn=Y(n2,:
);clf;
frameTime=(1:
n)*inclen;
imagesc(frameTime,freq,20*log10(abs(