数字信号处理系统作业
《数字信号处理系统》实践任务报告
学号:3110411072 姓名:王伟东 班级:11级信计2班
一、问题提出:
1.1实验背景:
滤波器是一种用来消除干扰杂讯的器件,将输入或输出经过过滤而得到纯净的直流电。对特定频率的频点或该频点以外的频率进行有效滤除的电路,就是滤波器,其功能就是得到一个特定频率或消除一个特定频率。经典滤波器按通频带分类可以分为低通(LP )、高通(HP )、带通(BP )、带阻(BS ),按处理信号类型可以分为模拟滤波器和数字滤波器。
通过Matlab 语言可以快捷的设计出有软件组成的数字滤波器,其中FIR 滤波器(即有限冲击响应滤波器)最大的优点就是在满足幅频特性的同时,还可以获得严格的线性相位特性。
1.2实验要求:
某一数字信号由500Hz 、1000Hz 和1500Hz 三个频率组成,采样频率为4000Hz ,请
1. 设计一个低通滤波器,将上述数字信号送入滤波器后只留下500Hz 频率分量;
2. 设计一个带通滤波器,将上述数字信号送入滤波器后只留下1000Hz 频率分量;
3. 设计一个高通滤波器,将上述数字信号送入滤波器后只留下1500Hz 频率分量;
4. 设计一个带阻滤波器,将上述数字信号送入滤波器后滤除1000Hz 频率分量; 要求从时域和频域两个角度说明滤波前后信号的变化。
1.3实验目的:
1. 熟悉 FIR 滤波器的滤波原理
2. 熟悉 FIR 滤波器的汇编实现
3. 熟悉理想采样的性质,了解信号采样前后的频谱变化,加深对采样定理的理解
4. 学习用 MA TLAB 设计滤波器
二、试验方法和过程
2.1实验原理:
数字滤波器的设计,是对提出的设计要求给出响应的性能指标,再通过计算,使物理可实现的实际滤波器频率响应特性,逼近给出的频率响应特性。设计完成后,可根据计算结果在MATLAB 或DSP 上实现。
应用Matlab 设计FIR 滤波器,即根据给定的性能指标,设计一个H (z 、),使其逼近这一指标,进而计算并确定滤波器的系数b (n ),再将所设计滤波器的幅频响应、相频响应曲线作为输出,与设计要求比较,对设计的滤波器进行优化,从而达到滤波的目的。
FIR 数字滤波器系统的传递函数为:
Y (z)N -1
H (z)==∑b (n)z -n X (z)n =0
由此得到系统的差分方程:
y (n)=b (n)x(n)+b (1)x(n-1) +... +b(N-1) x[n-(N-1)]
若FIR 数字滤波器的单位脉冲响应序列为好h (n ),它就是滤波器系数向量b (n )。
2.1实验工具:
Matlab
2.2试验方法:
利用Filter Design &Analysis Tools
2.2.1 FIR滤波器的窗函数设计法
FIR 滤波器的设计方法有许多种,这里采用如窗函数设计法。窗函数设计法的基本原理是用一定宽度窗函数截取无限脉冲响应序列获得优先长的的脉冲响应序列,主要设计步骤为:
(1) 通过傅里叶逆变换获得理想滤波器的单位脉冲响应hd (n )。
h d (n ) =1
2π⎰tx
-tx e jwx dw =sin[w (n -a )] π(n -a )
(2) 有性能指标确定窗函数W (n )和窗口长度N
(3) 求得实际滤波器的单位脉冲响应h (n ),h (n )即为所设计FIR 滤波器系数向量b
(n )。
h (n ) =h d (n ) ⋅W (n )
(4)检验滤波器结果。
2.3滤波器设计步骤:
假设有某一合成信号,表达式如下:
f=cos(2*pi*500*t)+5*cos(2*pi*1000*t)+10*cos(2*pi*1500*t)
以下为请设计三个滤波器,分别提取出信号中各频率分量,并分别绘制出通过这三个滤波器后信号的时域波形和频谱。
以FIR 滤波器为例,程序如下:
某一数字信号由500Hz 、1000Hz 和1500Hz 三个频率组成,采样频率为4000Hz
clear;fs=4000;t=(1:1000)/fs;
x= cos(2*pi*500*t)+5*cos(2*pi*1000*t)+10*cos(2*pi*1500*t);
L=length(x);N=2^(nextpow2(L));Hw=fft(x,N);
figure(1);subplot(2,1,1);plot(t,x);
grid on;title('滤波前信号x');xlabel('时间/s');% 原始信号
subplot(2,1,2);plot((0:N-1)*fs/L,abs(Hw));% 查看信号频谱
grid on;title('滤波前信号频谱图');xlabel('频率/Hz');ylabel('振幅|H(e^jw)|');
1. 设计一个低通滤波器,将上述数字信号送入滤波器后只留下500Hz 频率分量;
%% x_1=cos(2*pi*500*t)
Ap=1;As=60;% 定义通带及阻带衰减
dev=[(10^(Ap/20)-1)/(10^(Ap/20)+1),10^(-As/20)];% 计算偏移量
mags=[1,0];% 低通
fcuts=[60,100];% 边界频率
[N,Wn,beta,ftype]=kaiserord(fcuts,mags,dev,fs);% 估算FIR 滤波器阶数
hh1=fir1(N,Wn,ftype,kaiser(N+1,beta));% FIR滤波器设计
x_1=filter(hh1,1,x);% 滤波
x_1(1:ceil(N/2))=[];% 群延时N/2,删除无用信号部分
L=length(x_1);N=2^(nextpow2(L));Hw_1=fft(x_1,N);
figure(2);subplot(2,1,1);plot(t(1:L),x_1);
grid on;title('x_1=cos(2*pi*500*t)');xlabel('时间/s');
subplot(2,1,2);plot((0:N-1)*fs/L,abs(Hw_1));% 查看信号频谱
grid on;title('滤波后信号x_1频谱图');xlabel('频率/Hz');ylabel('振幅|H(e^jw)|');
2. 设计一个带通滤波器,将上述数字信号送入滤波器后只留下1000Hz 频率分量;
%% x_2=5*cos(2*pi*1000*t)
Ap=1;As=60;% 定义通带及阻带衰减
dev=[10^(-As/20),(10^(Ap/20)-1)/(10^(Ap/20)+1),10^(-As/20)];% 计算偏移量 mags=[0,1,0];% 带通
fcuts=[80,120,180,220];% 边界频率
[N,Wn,beta,ftype]=kaiserord(fcuts,mags,dev,fs);% 估算FIR 滤波器阶数
hh2=fir1(N,Wn,ftype,kaiser(N+1,beta));% FIR滤波器设计
x_2=filter(hh2,1,x);% 滤波
x_2(1:ceil(N/2))=[];% 群延时N/2,删除无用信号部分
L=length(x_2);N=2^(nextpow2(L));Hw_2=fft(x_2,N);
figure(3);subplot(2,1,1);plot(t(1:L),x_2);
grid on;title('x_2=5*cos(2*pi*1000*t)');xlabel('时间/s');
subplot(2,1,2);plot((0:N-1)*fs/L,abs(Hw_2));% 查看信号频谱
grid on;title('滤波后信号x_2频谱图');xlabel('频率/Hz');ylabel('振幅|H(e^jw)|');
3. 设计一个高通滤波器,将上述数字信号送入滤波器后只留下1500Hz 频率分量;
%% x_3=10*cos(2*pi*1500*t)
Ap=1;As=60;% 定义通带及阻带衰减
dev=[10^(-As/20),(10^(Ap/20)-1)/(10^(Ap/20)+1)];% 计算偏移量
mags=[0,1];% 高通
fcuts=[500,550];% 边界频率
[N,Wn,beta,ftype]=kaiserord(fcuts,mags,dev,fs);% 估算FIR 滤波器阶数
hh2=fir1(N,Wn,ftype,kaiser(N+1,beta));% FIR滤波器设计
x_3=filter(hh2,1,x);% 滤波
x_3(1:ceil(N/2))=[];% 群延时N/2,删除无用信号部分
L=length(x_3);N=2^(nextpow2(L));Hw_3=fft(x_3,N);
figure(4);subplot(2,1,1);plot(t(1:L),x_3);
grid on;title('x_3=10*cos(2*pi*600*t)');xlabel('时间/s');
subplot(2,1,2);plot((0:N-1)*fs/L,abs(Hw_3));% 查看信号频谱
grid on;title('滤波后信号x_3频谱图');xlabel('频率/Hz');ylabel('振幅|H(e^jw)|');
5. 设计一个带阻滤波器,将上述数字信号送入滤波器后滤除1000Hz 频率分量 %% x_4=5*cos(2*pi*1000*t)
fp=[500 1500];
fs=[800 1200];
rp=3;rs=18; Fs=4000;
wp=fp*2*pi/Fs;
ws=fs*2*pi/Fs;
%% Firstly to finish frequency prewarping;
wap=2*Fs*tan(wp./2)
was=2*Fs*tan(ws./2);
[n,wn]=buttord(wap,was,rp,rs,'s');
% Note: 's'!
[z,p,k]=buttap(n);
[bp,ap]=zp2tf(z,p,k)
%
bw=wap(2)-wap(1)
w0=sqrt(wap(1)*wap(2))
[bs,as]=lp2bs(bp,ap,w0,bw)
%带阻
[h1,w1]=freqs(bp,ap);
figure(1)
plot(w1,abs(h1));grid;
ylabel(' lowpass G(p)')
%
w2=[0:Fs/2-1]*2*pi;
h2=freqs(bs,as,w2);
2.4实验结果:
经过滤波后得到如下下的图像:
某一数字信号由500Hz 、1000Hz 和1500Hz 三个频率组成,采样频率为
4000Hz
1. 设计一个低通滤波器,将上述数字信号送入滤波器后只留下500Hz 频率分量;
2. 设计一个带通滤波器,将上述数字信号送入滤波器后只留下1000Hz 频率分量;
3. 设计一个高通滤波器,将上述数字信号送入滤波器后只留下1500Hz 频率分量;
4. 设计一个带阻滤波器,将上述数字信号送入滤波器后滤除1000Hz 频率分量