马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
@@@@@@@@@@@@@@@@@@@@@@@@@@主界面@@@@@@@@@@@@@@@@@@@@@@@@@
%主体界面
h=figure('Visible','off');
set(h,'color',[0.1 0.7 1],'position',[200 100 650 400],...
'name','语音信号滤波分析',...
'NumberTitle','off','pointer','cross',...
'Units','pixels','Resize','on');
set(h,'Visible','on');
S=['欢迎您使用这个语音信号滤波分析工具!'];
helpdlg(S,'help text');
%控件
A=uicontrol('parent',h ,'style','pushbutton','Units','points','position',[70 250 100 25],...
'String','原始信号','callback','OriginalSignal');
B=uicontrol('parent',h,'style','pushbutton','Units','points','position',[70 210 100 25],...
'String','加入高斯白噪声','callback','AddNoise') ;
C=uicontrol('parent',h,'style','pushbutton','Units','points','position',[70 170 100 25],...
'String','布拉克曼低通滤波器滤波','callback','Filter1') ;
D=uicontrol('parent',h,'style','pushbutton','Units','points','position',[70 130 100 25],...
'String','巴特沃斯低通滤波器滤波','callback','Filter2') ;
E=uicontrol('parent',h,'style','text','Units','points','position',[45 50 400 25],...
'String','@Made by cocower,thanks for your using! If you want to conmunicate with me,please call the number:0732-8682185.') ;
clear;
@@@@@@@@@@@@@@@@@@@@@@@@@@@@回调函数1@@@@@@@@@@@@@@@@@@@@@@@@
function[]=OriginalSignal();
[x,fs,bits]=wavread('d:\cc.wav');%播放原始信号
wavplay(x,fs);
N=length(x);%返回采样点数
t=(1:N)/fs;
df=fs/N;%采样间隔
n1=1:N/2;
f=(n1-1)*df;%频带宽度
figure(2);
plot(x,'LineWidth',2);%信号的时域波形
title('原始信号的时域波形');
xlabel('时间/t');
ylabel('幅值/A');
y0=fft(x);%快速傅立叶变换
figure(3);
plot(f,20*log10(abs(y0(n1))));%离散信号的频谱图
title('原始信号的频谱图');
xlabel('频率/Hz');
ylabel('幅值/db');
grid;
@@@@@@@@@@@@@@@@@@@@@@@@@@回调函数2@@@@@@@@@@@@@@@@@@@@@@@@
function[]=AddNoise();
[x,fs,bits]=wavread('d:\cc.wav');%播放原始信号
N=length(x);%返回采样点数
t=(1:N)/fs;
df=fs/N;%采样间隔
n1=1:N/2;
f=(n1-1)*df;%频带宽度
y1=awgn(x,45);%加入高斯白噪声,信噪比为45
wavplay(y1,fs);%播放加噪信号
figure(4);
plot(y1,'LineWidth',2);%信号的时域波形
title('加噪后信号的时域波形');
xlabel('时间/t');
ylabel('幅值/A');
y2=fft(y1);
figure(5);
plot(f,20*log10(abs(y2(n1))));
title('加噪后信号的频谱图');
xlabel('频率/Hz');
ylabel('幅值/db');
grid;
@@@@@@@@@@@@@@@@@@@@@@@@@@@回调函数3@@@@@@@@@@@@@@@@@@@@@@@@@@
function[]=Filter1();
[x,fs,bits]=wavread('d:\cc.wav');%播放原始信号
N=length(x);%返回采样点数
t=(1:N)/fs;
df=fs/N;%采样间隔
n1=1:N/2;
f=(n1-1)*df;%频带宽度
y1=awgn(x,45);%加入高斯白噪声,信噪比为45
%*****************************布拉克曼滤波器设计*************************
Window=blackman(35); %长度为35的布拉克曼窗Window
b=fir1(34,0.1,Window);%产生低通布拉克曼滤波器
H=freqz(b,1,512);
figure(6);
plot(abs(H));
title('布拉克曼滤波器的频率响应');
%**********************************************************************
ys=fftfilt(b,y1);%信号送入滤波器滤波,ys为输出
fftwave=fft(ys);%将滤波后的语音信号进行快速傅立叶变换
figure(7);
plot(f,20*log10(abs(fftwave(n1))));
title('布拉克曼滤波器滤波后信号的频谱图');
xlabel('频率/Hz');
ylabel('幅值/db');
grid;
wavwrite(ys,fs,'d:\cc1.wav');%把滤波后的信号写入d:\cc1.wav中
[g,fs,bits]=wavread('d:\cc1.wav');%语音回放
wavplay(g,fs);
@@@@@@@@@@@@@@@@@@@@@@@@@@@回调函数4@@@@@@@@@@@@@@@@@@@@@@@@@
function[]=Filter2();
[x,fs,bits]=wavread('d:\cc.wav');%播放原始信号
N=length(x);%返回采样点数
t=(1:N)/fs;
df=fs/N;%采样间隔
n1=1:N/2;
f=(n1-1)*df;%频带宽度
y1=x+0.01*randn(size(x));%加入均匀白噪声
%************************巴特沃斯滤波器设计*****************************
FS=1;
%通带、阻带截止频率
Fl=0.08;Fh=0.15;
%频率预畸
wp=(Fl/FS)*2*pi; %临界频率采用角频率表示
ws=(Fh/FS)*2*pi; %临界频率采用角频率表示
OmegaP=2*FS*tan(wp/2);
OmegaS=2*FS*tan(ws/2);
[k,Wn]=buttord(OmegaP,OmegaS,1.1,60,'s');
[b,a]=butter(k,Wn,'s');
%freqs(b,a) %设计模拟的
[bz,az]=bilinear(b,a,FS); %映射为数字的
% 绘制结果
H=freqz(bz,az,1024,FS,'whole');
figure(8);
plot(abs(H));
title('巴特沃斯滤波器的频率响应');
%**********************************************************************
ys=filter(bz,az,y1);%信号送入滤波器滤波,ys为输出
fftwave=fft(ys);%将滤波后的语音信号进行快速傅立叶变换
figure(9);
plot(f,20*log10(abs(fftwave(n1))));
title('巴特沃斯滤波器滤波后信号的频谱图');
xlabel('频率/Hz');
ylabel('幅值/db');
grid;
wavwrite(ys,fs,'d:\cc2.wav');%把滤波后的信号写入d:\cc2.wav中
[v,fs,bits]=wavread('d:\cc2.wav');%语音回放
wavplay(v,fs);
@@@@@@@@@@@@@@@@@@@@@@@@@@程序结束@@@@@@@@@@@@@@@@@@@@@@@@
高手能把这个程序做完美就好了(主界面接收滤波器参数),请会做的将修改后的程序跟一下贴,谢谢!! |