fs=8000; %取样频率
duration=2; %录音时间
waveFile='原声音信号.wav';%录制文件名
fprintf('Press any key to start 2 seconds of recording...\n',duration);
pause;
fprintf('Recording...\n');%录音中
y=wavrecord(duration*fs,fs); %duration*fs 是总的采样点数
fprintf('Finished recording.\n');%录音结束
fprintf('Press any key to store the file',waveFile);
pause;
nbits=8;
wavwrite(y,fs,nbits,waveFile);%将录制的声音写入声音文件
fprintf('Storing is over\n');
fprintf('Press any key to play\n',waveFile);
dos(['start',waveFile]);
%声音信号的幅频特性
[x,Fs,bits]=wavread('原声音信号.wav'); %用wavread()函数读取原始声音信号
Xs=x(:,1); %做单声道处理
X1=Xs(1:16000); %取原始声音信号
siglength1=length(X1);
t1=(0:siglength1-1)/Fs;
figure(1);
plot(t1,X1);axis([0,2,-1,1]); %原始声音信号序列
xlabel('时间(s)');ylabel('X1(n)');
title('原声音信号序列');
Y1 = fft(X1);
f1=[0:15999]/16000*Fs;
figure(2);
plot(f1,abs(Y1)); %原始声音信号频谱
xlabel('频率(hz)');ylabel('幅度');
title('原声音信号频谱');
N=2;
siglength2=siglength1/N; %取两倍的抽样点数
X2=zeros(siglength2,1); %对原始声音信号两倍抽样
for(i=1:siglength2)
X2(i)=X1(N*i);
end;
t2=(0:siglength2-1)/Fs*N;
figure(3);
plot(t2,X2);axis([0,2,-1,1]); %画两倍抽样信号序列
xlabel('时间(s)');ylabel('X2(n)');
title('两倍抽样信号序列');
Y2=fft(X2);
f2=[0:7999]/8000*Fs/N;
figure(4);
plot(f2,abs(Y2)); %画两倍抽样信号频谱
xlabel('频率(hz)');ylabel('幅度');
title('两倍抽样信号频谱');
%滤波器的设计
fp=[300 800];fs=[200 900];
rp=3;rs=18;Fs=9000;
wp=fp*2*pi/Fs;
ws=fs*2*pi/Fs;
%滤波器数字指标到模拟指标的转换
wap=Fs*wp;
was=Fs*ws;
%滤波器的阶数n
bw=wap(2)-wap(1);
wnp=1;
wns(1)=(was(1)^2-wap(1)*wap(2))/(was(1)*bw);
wns(2)=(was(2)^2-wap(1)*wap(2))/(was(2)*bw);
wns=min(abs(wns(1)),abs(wns(2)));
n=log10(sqrt((10^0.1*rp-1)/(10^0.1*rs-1)))/(log10(wnp/wns));
n=real(n);
n=ceil(n);
%归一化模拟低通滤波器的设计,系数是bp,ap
[z,p,k]=buttap(n);
[bp,ap]=zp2tf(z,p,k)
%模拟低通滤波器到模拟带通滤波器的转换,系数bs,as
w0=sqrt(wap(1)*wap(2));
[bs,as]=lp2bp(bp,ap,w0,bw)
%模拟带通滤波器经冲激响应不变法得到数字带通滤波器,系数bz,az
[bz,az]=impinvar(bs,as,Fs)
%数字带通滤波器的频率响应
[h,w]=freqz(bz,az,1000,Fs);
figure(5);
plot(w,abs(h));
grid;axis([0,1500,0,1.2]);
title('数字带通滤波器幅频响应');
xlabel('频率(Hz)');ylabel('幅度');
figure(6);
plot(w,angle(h));axis([0,1500,-4,4]);
grid;title('数字带通滤波器相频响应');
xlabel('频率');ylabel('相位');
title('数字带通滤波器相频响应');
%经滤波器后声音信号
Xf1=filter(bz,az,X1);
figure(7);
plot(t1,Xf1);axis([0,2,-1,1]);
xlabel('时间(s)');ylabel('Xf1(n)');
title('经滤波器后声音信号序列');
Yf2=filter(bz,az,Y1);
figure(8);
plot(f1,abs(Yf2));
xlabel('频率(hz)');ylabel('幅度');
title('经滤波器后声音信号频谱');
wavwrite(Xf1,Fs,16,'经过滤波器后声音信号') %将滤波后声音写入.wav文件