带通滤波器滤波程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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); %滤波后语音回放

相关文档
最新文档