📄 bandpass.asv
字号:
clf;
[y,fs,bits]=wavread('d:\test.wav'); %将文件读进来
bandlow=1100/(fs/2);%用fir1设计带通滤波器(从这里开始)
bandhigh=3100/(fs/2);
fcuts = [1000 1200 3000 3200];
mags = [0 1 0];
ap=10^0.05-1; %求通带衰减
as=10^(-5); %求阻带衰减,100db时的as值
devs = [as ap as];
[n,Wn,beta,ftype] = kaiserord(fcuts,mags,devs,fs);
n = n + rem(n,2); %求带通滤波器的阶数
b = fir1(n,Wn,ftype,kaiser(n+1,beta),'noscale');
%b=fir1(100,[bandlow bandhigh]);
figure(1);
freqz(b,1);
figure(2);
subplot(2,3,1);
plot(y,'LineWidth',2);
axis([0 50000 -0.05 0.06]);
xlabel('时间/t') ; ylabel('幅度/A');
title('原信号波形');
spectrum=fft(y); %对采样点进行fft变换
n2=length(spectrum); %计算fft变换后向量的长度
t2=0:n2-1;
subplot(2,3,2);
spreal=abs(spectrum) ; %计算fft变换后序列的实部
spimag=angle(spectrum) ; %计算fft变换后序列的虚部
plot(t2,spreal);
xlabel('k'); %把x轴定义为k
title('原信号幅度'); %标明此图形画的是幅度
subplot(2,3,3);
plot(t2,spimag) ;
xlabel('k') ; %把x轴定义为虚部
title('原信号相位') ; %把x轴定义为虚部
y0=fftfilt(b,y) ; %用带通滤波器对抽样信号进行滤波
n=length(y0);
xx=0:n-1;
subplot(2,3,4);
plot(xx,y0);
axis([0 50000 -0.05 0.06]);
xlabel('n');
ylabel('幅度');
y1=fft(y0);
y0am=abs(y1);
subplot(2,3,5);
plot(xx,y0am);
axis([0 55000 -0.05 0.2]);
title('经过带通滤波器后信号幅度');
y0im=angle(y1);
subplot(2,3,6);
plot(xx,y0im);
axis([0 100000 -4 4]);
title('经过带通滤波器后信号相位');
sound(y0,fs);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -