应用Matlab对含噪声语音信号进行频谱分析及滤波 联系客服

发布时间 : 星期日 文章应用Matlab对含噪声语音信号进行频谱分析及滤波更新完毕开始阅读34bdb4bf6d1aff00bed5b9f3f90f76c660374c42

2、加入噪声

y=wavread('C:\\Users\\acer\\Desktop\\');

y=y(:,1); %矩阵维度置换成1 subplot(2,2,1); plot(y);

title('加噪前的时域曲线');

N=length(y)-1; n=0:1/fs:N/fs;

x=*sin(40*pi*n); %设置正弦噪声信号 x=x.'; %置换成矩阵 z=y+x; %添加噪声 subplot(2,2,2); plot(z);

title('加噪后的时域曲线'); sound(z,40000)

3、IIR滤波器设计

clc;clear;close all;

fs=22050;x1=wavread('C:\\Users\\acer\\Desktop\\'); x1=x1(:,1)

t=0:1/22050:(size(x1)-1)/22050; %设置并添加噪声信号 d=*sin(40*pi*t); d=d.'; x2=x1+d;

wp=*pi;ws=*pi;Rp=1;Rs=15; %通阻带截止和通阻带衰减 Fs=22050;Ts=1/Fs;

wp1=2/Ts*tan(wp/2); %将模拟指标转换成数字指标 ws1=2/Ts*tan(ws/2);

[N,Wn]=buttord(wp1,ws1,Rp,Rs,'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('Butterworth') f1=filter(bz,az,x2);

figure(2);

subplot(2,1,1); plot(t,x2); %画出滤波前的时域图 title('滤波前的时域波形');

subplot(2,1,2);plot(t,f1); %画出滤波后的时域图 title('滤波后的时域波形');

sound(f1,40000); %播放滤波后的信号 F0=fft(f1,10240);f=fs*(0:255)/10240

figure(3) y2=fft(x2,10240);

subplot(2,1,1);plot(f,abs(y2(1:256))); %画出滤波前的频谱图 title('滤波前的频谱');xlabel('Hz');ylabel('fuzhi');

subplot(2,1,2);F1=plot(f,abs(F0(1:256))); %画出滤波后的频谱图 title('滤波后的频谱');xlabel('Hz');ylabel('fuzhi');