编辑: liubingb | 2018-04-25 |
%全局变量,用于存放语音数据和浊音帧 global y;
% 全局变量,用于存放清音帧 "录音"按钮的回调函数 global x;
%全局变量声明 Fs=8000;
%采样率 8KHz x=wavrecord(5*Fs,Fs,'uint8');
%录音
5 秒x=x/max(x);
%归一化 plot(handles.
axes1,x,'k');
%绘制语音波形 "短时能量分析"按钮的回调函数 global x;
global y;
nx=length(x);
%x nwin=200;
% 窗口长度 ninc=100;
%帧间重叠
100 点,以下是分帧 nf = fix((nx-nwin+ninc)/ninc);
frame=zeros(nf,nwin);
indf= ninc*(0:(nf-1)).';
inds = (1:nwin);
frame(:) = x(indf(:,ones(1,nwin))+inds(ones(nf,1),:));
w =ones(nwin)';
handles.frame= frame.* w(ones(nf,1),:);
%分帧结果 handles.energy=sum(handles.frame.*handles.frame,2);
%短时能量 plot(handles.axes2,handles.energy,'k');
%绘制短时能量波形 x=handles.frame(3200,:);
%浊音帧 y=handles.frame(1000,:);
%清音帧 "浊音帧"按钮回调函数 global x;
plot(handles.axes3,x,'k');
"清音帧"按钮回调函数 global y;
plot(handles.axes3,y,'k');
"浊音自相关"按钮回调函数 global x;
autocorr=xcorr(x);
%自相关 plot(handles.axes3,-199:199,autocorr,'k');
%自相关波形绘制,0 在中间 "清音自相关"按钮回调函数 global y;
autocorr=xcorr(y);
%自相关 plot(handles.axes3,-199:199,autocorr,'k');
%自相关波形绘制,0 在中间 "浊音频谱"按钮回调函数 global x;
fre=fft(x,2000);
%200 点FFT fre=fftshift(fre);
%将0平移到中间 plot(handles.axes3,(-1000:999)*8000/2000,fre,'k');
%绘制频谱,横坐标为 Hz "清音频谱"按钮回调函数 global y;
fre=fft(y,2000);
%200 点FFT fre=fftshift(fre);
%将0平移到中间 plot(handles.axes3,(-1000:999)*8000/2000,fre,'k');
%绘制频谱,横坐标为 Hz "低通滤波"按钮回调函数 global x;
[wc,n]=buttord(2*pi*900/8000,2*pi*1200/8000,3,40);
%巴特沃斯低通滤波器的设计 [b,a]=butter(wc,n);
filtering=filter(b,a,x);
%低通滤波 plot(handles.axes3,filtering,'k');
%绘制低通滤波后的波形 "复倒谱"按钮的回调函数 global x;
xn=cceps(x);
xn=fftshift(xn);
%计算复倒谱,并将
0 移到中心位置 plot(handles.axes3,-100:99,xn,'k');
%显示语音的复倒谱 "倒谱"按钮回调函数 global x;
xn=rceps(x);
xn=fftshift(xn);
%计算倒谱,并将
0 移到中心位置 plot(handles.axes3,-100:99,xn,'k');
%显示语音的倒谱 "同态滤波"按钮回调函数 global x;
xn=cceps(x);
%对语音进行复倒谱分析 hn1=[xn(1:40) zeros(1,120) xn(161:200)];
%以N为40 对复倒谱进行频率不变线性低通滤波 xn1=[zeros(1,40) xn(41:160) zeros(1,40)];
%以N为40 对复倒谱进行频率不变线性高通滤波 Hk1=fft(hn1);
Xk1=fft(xn1);
%进行傅里叶变换 Hk2=exp(Hk1);
Xk2=exp(Xk1);
%取指数运算,即计算复倒谱时取对数的逆 Hk2=fftshift(Hk2);
Xk2=fftshift(Xk2);
plot(handles.axes3,-100:99,abs(Xk2),'k');
plot(handles.axes2,-100:99,abs(Hk2),'k');
以上是课程设计的基本程序,可在此基础上完善、美化界面,最好能让计算机自己算出 基音频率和共振峰频率.