cocower 发表于 2007-1-12 13:34

做语音信号滤波分析的进来看下

@@@@@@@@@@@@@@@@@@@@@@@@@@主界面@@@@@@@@@@@@@@@@@@@@@@@@@
%主体界面
h=figure('Visible','off');
set(h,'color',,'position',,...
    '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',,...
            'String','原始信号','callback','OriginalSignal');
      
B=uicontrol('parent',h,'style','pushbutton','Units','points','position',,...
             'String','加入高斯白噪声','callback','AddNoise') ;
C=uicontrol('parent',h,'style','pushbutton','Units','points','position',,...
             'String','布拉克曼低通滤波器滤波','callback','Filter1') ;
         
D=uicontrol('parent',h,'style','pushbutton','Units','points','position',,...
             'String','巴特沃斯低通滤波器滤波','callback','Filter2') ;
         
E=uicontrol('parent',h,'style','text','Units','points','position',,...
             '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();
=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();
=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();
=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中
=wavread('d:\cc1.wav');%语音回放
wavplay(g,fs);
@@@@@@@@@@@@@@@@@@@@@@@@@@@回调函数4@@@@@@@@@@@@@@@@@@@@@@@@@
function[]=Filter2();
=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);
=buttord(OmegaP,OmegaS,1.1,60,'s');
=butter(k,Wn,'s');
%freqs(b,a) %设计模拟的
=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中
=wavread('d:\cc2.wav');%语音回放
wavplay(v,fs);
@@@@@@@@@@@@@@@@@@@@@@@@@@程序结束@@@@@@@@@@@@@@@@@@@@@@@@


高手能把这个程序做完美就好了(主界面接收滤波器参数),请会做的将修改后的程序跟一下贴,谢谢!!

dstsc 发表于 2007-7-8 12:06

高手请教下你!我换了音频信号~可得出来的图六和图八是错的!是不是要改参数啊??

[ 本帖最后由 zhlong 于 2007-7-8 13:16 编辑 ]
页: [1]
查看完整版本: 做语音信号滤波分析的进来看下