for i=1:3
b=menu('请选择:','原始信号采样后的时域图和频谱图','FIR滤波器','IIR滤波器','退出');
if b==1
for j=1:3
temp=menu('请选择','播放原始语音','原始语音时域图和频谱图','FFT频谱图');
if temp==1
clc;
clear;
[x,fs]=audioread('D:\matlab\bin\张婷婷.wav'); %打开语音信号
sound(x,fs); %播放语音信号
%main(1)
else
if temp==2
[x,fs]=audioread('D:\matlab\bin\张婷婷.wav'); %打开语音信号
sound(x,fs); %播放语音信号
N=length(x); %长度
n=0:N-1;
w=2*n*pi/N;
y1=fft(x); %对原始信号做FT变换
subplot(2,1,1);
plot(n,x) %做原始语音信号的时域波形图
title('原始语音信号时域图');
xlabel('时间t');
ylabel('幅值');
subplot(2,1,2); %做原始语音信号的频谱图
plot(w/pi,abs(y1));
title('原始语音信号频谱')
xlabel('频率Hz');
ylabel('幅度');
%main(1);
else
[x,fs]=audioread('D:\matlab\bin\张婷婷.wav'); %打开语音信号sound(x,fs); %播放语音信号
N=length(x); %长度
n=0:N-1;
w=2*n*pi/N;
y1=fft(x); %对原始信号做FFT变换
subplot(2,1,1); %做原始语音信号的频谱图
plot(w/pi,abs(y1));
title('原始语音信号频谱')
xlabel('频率Hz');
ylabel('幅度');
df=fs/(N-1); %分辨率
f=(0:N-1)*df; %其中每点的频率
Y=fft(x(1:N))/N*2; %真实的幅值 %
Y=fftshift(Y);
subplot(2,1,2); %做原始语音信号的频谱图
plot(f(1:N/2),abs(Y(1:N/2)));
title('原始语音信号采样后的FFT频谱')
xlabel('频率Hz');
ylabel('幅值');
end
end
end
else
if b==2
for k=1:3
temp1=menu('请选择','FIR低通滤波器','FIR高通滤波器','FIR带通滤波器');
if temp1==1
%FIR低通
[x,fs]=audioread('D:\matlab\bin\张婷婷.wav'); %打开语音信号
sound(x,fs); %播放滤波后的语音信号
wp=2*pi*1000/fs;
ws=2*pi*1200/fs;
Rp=1;
Rs=53;
wdelta=ws-wp;
N=ceil(8* pi/wdelta); %取整
wn=(wp+ws)/2;
[b,a]=fir1(N,wn/pi,hamming(N+1)); %选择窗函数,并归一化截止频率
figure(1)
freqz(b,a,512);
title('FIR低通滤波器');
f2=filter(b,a,x);
figure(2)
subplot(2,2,1)
plot(x)
title('FIR低通滤波器滤波前的时域波形');
subplot(2,2,2)
plot(f2);
title('FIR低通滤波器滤波后的时域波形');
pause(2);
sound(f2,fs); %播放滤波后的语音信号
F0=fft(f2,1024);
f=fs*(0:511)/1024;
y2=fft(x,1024);
subplot(2,2,3);
plot(f,abs(y2(1:512)));
title('FIR低通滤波器滤波前的频谱')
xlabel('频率/Hz');
ylabel('幅值');
subplot(2,2,4)
F2=plot(f,abs(F0(1:512)));
title('FIR低通滤波器滤波后的频谱')
xlabel('频率/Hz');
ylabel('幅值');
ylabel('幅值');xlabel('频率/Hz');
ylabel('幅值');
%main(2);
else
if temp1==2
%FIR高通
[x,fs]=audioread('D:\matlab\bin\张婷婷.wav'); %打开语音信号
sound(x,fs);
wp=2*pi*5000/fs;
ws=2*pi*3600/fs;
Rp=1;
Rs=53;
wdelta=wp-ws;
N=ceil(8*pi/wdelta); %取整
wn=(wp+ws)/2;
[b,a]=fir1(N,wn/pi,'high');
figure(1)
freqz(b,a,512);
title('FIR高通滤波器');
f2=filter(b,a,x);
figure(2)
subplot(2,2,1)
plot(x)
title('FIR高通滤波器滤波前的时域波形');
subplot(2,2,2)
plot(f2);
title('FIR高通滤波器滤波后的时域波形');
pause(2);
sound(f2,fs); %播放滤波后的语音信号
F0=fft(f2,1024);
f=fs*(0:511)/1024;
y2=fft(x,1024);
subplot(2,2,3);
plot(f,abs(y2(1:512)));
title('FIR高通滤波器滤波前的频谱')
xlabel('频率/Hz');
ylabel('幅值');
subplot(2,2,4)
F2=plot(f,abs(F0(1:512)));
title('FIR高通滤波器滤波后的频谱')
xlabel('频率/Hz');
ylabel('幅值');
% main(2);
else
%FIR 带通
[x,fs]=audioread('D:\matlab\bin\张婷婷.wav'); %打开语音信号
sound(x,fs);
wp1 =2*pi*1400/fs;wp2=2*pi*3400/fs;
ws1 =2*pi*1200/fs;ws2=2*pi*3400/fs;
Rp=1;
Rs=53;
wp=(wp1 +ws1)/2;ws=(wp2+ws2)/2;
wdelta=wp1-ws1;
N=ceil(8*pi/wdelta); %取整
wn=[wp ws];
[b,a]=fir1(N,wn/pi,'bandpas');
figure(1)
freqz(b,a,512);
title('FIR带通滤波器');
f2=filter(b,a,x);
figure(2)
subplot(2,2,1)
plot(x)
title('FIR带通滤波器滤波前的时域波形');
subplot(2,2,2)
plot(f2);
title('FIR带通滤波器滤波后的时域波形');
pause(2);
sound(f2,fs); %播放滤波后的语音信号
F0=fft(f2,1024);
f=fs*(0:511)/1024;
y2=fft(x,1024);
subplot(2,2,3);
plot(f,abs(y2(1:512)));
title('FIR带通滤波器滤波前的频谱')
xlabel('频率/Hz');
ylabel('幅值');
subplot(2,2,4)
plot(f,abs(F0(1:512)));
title('FIR带通滤波器滤波后的频谱')
xlabel('频率/Hz');
ylabel('幅值');
%main(2)
end
end
end
else
for l=1:3
temp2=menu('请选择','IIR低通滤波器','IIR高通滤波器','IIR带通滤波器');
if temp2==1
%IIR低通
[x,fs]=audioread('D:\matlab\bin\张婷婷.wav'); %打开语音信号
sound(x ,fs);
Ts=1/fs;R1=100;
wp=2*pi*1000/fs;
ws=2*pi*1200/fs;
Rp=1;
Rl=8;
wp1=2/Ts*tan(wp/2); %将模拟指标转换成数字指标
ws1=2/Ts*tan(ws/2);
[N,Wn]=buttord(wp1,ws1,Rp,Rl,'s'); %选择滤波器的最小阶数
[Z,P,K]=buttap(N); %创建butterworth模拟滤波器
[Bap,Aap]=zp2tf(Z,P,K);
[b,a]=lp2lp(Bap,Aap,Wn);
[bz,az]=bilinear(b,a,fs); %用双线性变换法实现模拟滤波器到数字滤波器的转换
[H,W]=freqz(bz,az); %绘制频率响应曲线
figure(1)
plot(W*fs/(2* pi),abs(H))
grid
xlabel('频率/ Hz')
ylabel('频率响应幅度')
title('IIR低通滤波器')
figure(2)
subplot(2,2,1)
plot(x) %画出滤波前的时域图
title('IIR低通滤波器滤波前的时域波形');
y1=filter(bz,az,x);
subplot(2,2,2)
plot(y1); %画出滤波后的时域图
title('IIR低通滤波器滤波后的时域波形');
pause(2);
sound(y1 ,41000); %播放滤波后的信号
F0=fft(y1,1024);
f=fs*(0:511)/1024;
y2=fft(x,1024);
subplot(2,2,3);
plot(f,abs(y2(1:512))); %画出滤波前的频谱图
title('IIR低通滤波器滤波前的频谱')
xlabel('频率/Hz');
ylabel('幅值');
subplot(2,2,4)
F1=plot(f,abs(F0(1:512))); %画{出滤波后的频谱图
title('lIR低通滤波器滤波后的频谱')
%main(3);
else
if temp2==2
%IIR高通
[x,fs]=audioread('D:\matlab\bin\张婷婷.wav'); %打开语音信号
sound(x,fs);
Ts=1/fs;R1=50;
Wp=2*pi*4400/fs;
Ws=2* pi*4000/fs;
Rp=1;
Rl=100;
Wp1=2/Ts*tan(Wp/2); %将模拟指标转换成数字指标
Ws1=2/Ts*tan(Ws/2);
[N,Wn]=cheb2ord(Wp1,Ws1,Rp,R1,'s'); %选择滤波器的最小阶数
[Z,P,K]=cheb2ap(N,Rl); %创建切比雪夫模拟滤波器
[Bap,Aap]=zp2tf(Z,P,K);
[b,a]=lp2hp(Bap,Aap,Wn);
[bz,az ]=bilinear(b,a,fs); %用双线性变换法实现模拟滤波器到数字滤波器的转换
[H,W]=freqz(bz,az); %绘制频率响应曲线
figure(1)
plot(W*fs/(2*pi),abs(H))
grid
xlabel('频率/ Hz')
ylabel('频率响应幅度')
title('IIR高通滤波器')
f1=filter(bz,az,x);
figure(2)
subplot(2,2,1)
plot(x) %画出滤波前的时域图
title('IIR高通滤波器滤波前的时域波形');
subplot(2,2,2)
plot(f1); %画出滤波后的时域图
title('IIR高通滤波器滤波后的时域波形');
pause(2);
sound(f1,44100); %播放滤波后的信号
F0=fft(f1,1024);
f=fs*(0:511)/1024;
y2=fft(x,1024);
subplot(2,2,3)
plot(f,abs(y2(1:512))); %画出滤波前的频谱图
title('IIR高通滤波器滤波前的频谱')
xlabel('频率/Hz');
ylabel('幅值');
subplot(2,2,4);
plot(f,abs(F0(1:512))); %画出滤波后的频谱图
title('IIR高通滤波器滤波后的频谱')
xlabel('频率/Hz');
ylabel('幅值');
%main(3);
else
%IIR带通
[x,fs]=audioread('D:\matlab\bin\张婷婷.wav'); %打开语音信号
sound(x,fs);
Ts= 1/fs;R1=30;
fb1=1200;fb2=3000;fc1=1000;fc2=3200;fs=23000;
W1=2*fb1 *pi/fs;W2=2*fc1*pi/fs;
W3=2*fb2*pi/fs;W4=2*fc2* pi/fs;
Wp=[W1,W3];
Ws=[W2,W4];
Rp=1;
Rl=100;
Wp1=2/Ts*tan(Wp/2); %将模拟指标转换成数字指标
Ws1 =2/Ts*tan(Ws/2);
[N,Wn]=cheb2ord(Wp1,Ws1,Rp,R1,'s'); %选择滤波器的最小阶数
[Z,P,K]=cheb2ap(N,Rl); %创建切比雪夫模拟滤波器;
[Bap,Aap]=zp2tf(Z,P,K);
[b,a]=lp2bp(Bap,Aap,2100*2*pi,1800*2*pi);
[bz,az]=bilinear(b,a,fs); %用双线性变换法实现模拟滤波器到数字滤波器的转换
[H,W]=freqz(bz,az); %绘制频率响应曲线
figure(1)
plot(W*fs/(2*pi),abs(H))
grid
xlabel('频率/ Hz')
ylabel('频率响应幅度')
title('IIR带通滤波器')
f1 =filter(bz,az,x);
figure(2)
subplot(2,2,1)
plot(x) %画出滤波前的时域图
title('IIR带通滤波器滤波前的时域波形');
subplot(2,2,2)
plot(f1); %画出滤波后的时域图
title('IIR带通滤波器滤波后的时域波形');
fs2=50000;
pause(2);
sound(f1 ,fs2); %播放滤波后的信号
F0=fft(f1,1024);
f=fs*(0:511)/1024;
y2=fft(x,1024);
subplot(2,2,3);
plot(f,abs(y2(1:512))); %画出滤波前的频谱图
title('IIR带通滤波器滤波前的频谱')
xlabel('频率/Hz');
ylabel('幅值');
subplot(2,2,4)
plot(f,abs(F0(1:512))); %画出滤波后的频谱图
title('IIR带通滤波器滤波后的频谱')
xlabel('频率/Hz');
xlabel('频率/Hz');
% main(3);
end
end
end
end
end
end