带通滤波器滤波程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
[y,fs,nbits]=wavread ('C:\Documents and Settings\jszx\桌面\录音.wav'); y=y(:,1);
N=length (y); %求出语音信号的长度
Y=fft(y,N); %傅里叶变换
subplot(2,1,1);
t=(0:N-1)/fs;
figure(1);
plot(t,y);
axis([0 12 -1.5 1.5]);
title('原始信号波形');
subplot(2,1,2);
plot(abs(Y));
title('原始信号频谱');
f=fs*(0:1023)/2048;
Au=0.5;
d=[Au.*cos(2*pi*10000*t)]'; %噪声为10kHz的余弦信号
d=d(:,1);
dd=fft(d,N); %傅里叶变换
figure(2);
subplot(2,1,1);
plot(t,d);
axis([0 12 -0.6 0.6])
title('噪声信号波形');
subplot(2,1,2);
plot(abs(dd));
title('噪声信号频谱');
x2=y+d;
S=fft(x2);
figure(3);
subplot(2,1,1);
plot(t,x2);
axis([0 12 -2 2])
title('加噪信号波形');
subplot(2,1,2);
plot(abs(S));
title('加噪信号频谱');
%FIR带通滤波器
fp1=1200;%输入设计指标
fp2=3000;
fs1=1000;
fs2=3200;
Fs=8000;
wp1=fp1/(Fs/2);%计算归一化角频率
wp2=fp2/(Fs/2);
ws1=fs1/(Fs/2);
ws2=fs2/(Fs/2);
deltaw=wp1-ws1;%计算过渡带的宽度
N0=ceil(11/deltaw);%按布莱克曼窗设计算滤波器长度
N=N0+mod(N0+1,2)%为实现FIR类型I偶对称滤波器,应确保N为奇数windows=blackman(N);%使用布莱克曼窗
wc1=(ws1+wp1)/2;%截止频率取通阻带频率的平均值
wc2=(ws2+wp2)/2;
b=fir1(N-1,[wc1,wc2],windows);%用fir1子函数求系统函数系数[db,mag,pha,grd,w]=freqz_m(b,1);
n=0:N-1;
dw=2/1000;
Rp=-(min(db(wp1/dw+1:wp2/dw+1)))
ws0=[1:ws1/dw+1,ws2/dw+1:501];
As=-round(max(db(ws0)))
figure(4);
subplot(2,2,1)
stem(0:N-1,b);
axis([0,N,1.1*min(b),1.1*max(b)]);
title('实际脉冲响应');
xlabel('n');
ylabel('h(n)');
subplot(2,2,2)
stem(n,windows);
axis([0,N,0,1.1]);
title('窗函数特性');
xlabel('n');
ylabel('wh(n)');
subplot(2,2,3)
plot(w/pi,db);
axis([0,1,-100,10]);
title('幅频响应');
xlabel('频率(×\pi)');
ylabel('H(e^(j\omega))');
set(gca,'XTickMode','manual','XTick',[0,wc1,wc2,1]); set(gca,'XTickMode','manual','YTick',[-50,-20,-3,0]); grid
subplot(2,2,4)
plot(w/pi,pha);
axis([0,1,-4,4]);
title('相频响应');
xlabel('频率(×\pi)');ylabel('\phi(\omega)');
set(gca,'XTickMode','manual','XTick',[0,wc1,wc2,1]);
set(gca,'XTickMode','manual','YTick',[-pi,0,pi]);
grid
[y,fn,nbits]=wavread(' C:\Documents and Settings\jszx\桌面\录音.wav '); Y=fft(y);
y1=fftfilt(b,y); %用blabckman滤波器进行滤波
Y1=fft(y1);
n=0:length(y)-1;
figure(5);
subplot(2,2,1);plot(y);title('未滤波语音波形');
subplot(2,2,2);plot(y1);title('滤波后语音波形');
subplot(2,2,3);plot(n,Y);title('未滤波语音频谱');
subplot(2,2,4);plot(n,Y1);title('滤波后语音频谱');
sound(y1,fn,nbits); %滤波后语音回放