编辑: 学冬欧巴么么哒 | 2014-12-30 |
);
xlabel('
t(s)'
);
ylabel('
y'
);
Y=fft(y);
Ts=t(2)-t(1);
ws=1/Ts;
wn=ws/2;
w=linspace(0,wn,length(t)/2);
if mod(length(t),2)==0 tnum=length(t)/2;
else tnum=(length(t)-1)/2;
end Y=abs(Y(1:1:tnum));
subplot(2,2,2);
plot(w,Y);
axis([0
2000 0 500]);
grid;
title('
语音信号y的频谱'
);
xlabel('
f(Hz)'
);
ylabel('
Y'
);
3.3对语音信号进行变声处理 3.3.1对语音信号进行低通、高通滤波 低通取通带截止频谱为600,阻带截止频谱为700,(高通通带截止频谱为600,阻带截止频谱为700)采样频谱为8000,对原始语音信号加窗(汉明窗)实现低通滤波. 程序如下: fp=600;
%取通带截止频谱为600 fs=700;
阻带截止频谱为700 Fs=8000;
wp=2*pi*fp/Fs;
ws=2*pi*fs/Fs;
wdelta=ws-wp;
N=ceil(6.6*pi/wdelta);
Wn=(wp+ws)/2;
b=fir1(N,Wn/pi,hamming(N+1));
%加窗滤波 [H,W]=freqz(b,1,512);
t=0:1/Fs:0.2;
x=wavread('
v017'
);
figure plot(x) y=3*filter(b,1,x);
%乘以系数3来增大幅值音量 figure plot(y);
sound(y) wavwrite(y,Fs,'
v017_low_pass'
);
产生WAV语音文件,然后保存 grid on 3.3.2频域右移 原始语音信号的频域分析,对频谱进行整体右移,实现高音播放 程序如下: y=wavread('
v017'
);
% save Y1 %luyin Fs=8192;
%wavplay(Y1,Fs);
pinyi=fft(y);
size(pinyi);
f=8192*[0:22000]/22001;
figure(1) plot(f,2*abs(pinyi));
axis([1,10000,0,250]);
f=8192*[0:24000]/24001;
hang=pinyi'
;
N=1000;
pujialing=[zeros(1,N),hang(1:22001),zeros(1,N)];
pu=pujialing'
;
figure(2) plot(f,abs(pu));
axis([1,10000,0,250]);
Y1=3*real(ifft(pu));
wavwrite(Y1,Fs,'
v017_pinyi_right'
);
wavplay(Y1,Fs);
3.3.3频谱左移 y=wavread('
v017'
);
% save Y1 %luyin Fs=8192;
%wavplay(Y1,Fs);
pinyi=fft(y);
size(pinyi);
f=8192*[0:22000]/22001;
figure(1) plot(f,abs(pinyi));
grid on axis([1,10000,0,250]);
%f=8192*[0:22000]/22001;
hang=pinyi'
;
N=1000;
pujialing=[hang(N:22001),zeros(1,(N-1))];
pu=pujialing'
;
figure(2) plot(f,2*abs(pu));
grid on axis([1,10000,0,250]);
Y1=3*real(ifft(pu));
wavwrite(Y1,Fs,'
v017_pinyi_left'
);
wavplay(Y1,Fs);
3.3.4 快放、慢放播放 实现快放、慢放根本原理就是改变其播放频率. 程序如下: Fs=16384;
[Y,w,t]=voice_spectrum(y,Fs);
sound(y,Fs);
axes(handles.axes1);
cla;
plot(t,y);
grid;
title('
语音信号y,采样频率=16384'
);
xlabel('
t(s)'
);
ylabel('
y'
);
axes(handles.axes2);
cla;
plot(w,Y);
axis([0
2800 0 500]);
grid;
title('
语音信号y的频谱,采样频率=16384'
);
xlabel('
f (Hz)'
);
ylabel('
Y'
);
3.3.5 回音播放 回音播放就是在原始信号的基础上加上一点延迟时间. 程序如下: y=wavread('
v017'
);
%load handel;
delay=900;
tend=length(y)/8192;
t=linspace(0,tend,length(y));
yd=[zeros(1,delay) y(1:(length(y)-delay))'
];
yecho=y+0.4*yd'
;
sound(yecho);
figure(2);
subplot(3,1,1);
plot(t,y);
grid;
title('
原始语音信号y'
);
subplot(3,1,2);
plot(t,yd);
grid;
title('
延迟时间yd'
);
subplot(3,1,3);
plot(t,yecho);
grid;
title('
有回音效果的语音信号yecho'
) 3.4 图形用户界面设计 在MATLAB主窗口中,选择File菜单中的New菜单项,再选择其中的GUI命令,就会显示图形用户界面的设计模板.MATLAB为GUI设计一共准备了4种模板,分别是Blank GUI(默认) 、GUI with Uicontrols(带控件对象的GUI模板) 、GUI with Axes and Menu(带坐标轴与菜单的GUI模板)与Modal Question Dialog(带模式问话对话框的GUI模板). 设计语音信号处理系统的用户图形操作界面(GUI)SoundProcess,其中菜单主要包括File、Process和Output三大主要部分,其中File菜单包括输入(Input)、保存(Save)和退出(Quit)等功能;