资源描述
本科实验报告
实验名称: 数字信号处理实验
课程名称:
数字信号处理实验
实验时间:
任课教师:
实验地点:
实验教师:
实验类型:
□ 原理验证
□ 综合设计
□ 自主创新
学生姓名:
学号/班级:
组 号:
学 院:
同组搭档:
专 业:
成 绩:
实验1 利用DFT分析信号频谱
一、实验目的
1.加深对DFT原理的理解。
2.应用DFT分析信号频谱。
3.深刻理解利用DFT分析信号频谱的原理,分析现实过程现象及解决办法。
二、实验原理
1、DFT和DTFT的关系
有限长序列的离散时间傅里叶变换在频率区间的N个等分点上的N个取样值可以由下式表示:
由上式可知,序列的N点DFT,实际上就是序列的DTFT在N个等间隔频率点上样本。
2、利用DFT求DTFT
方法1:由恢复出的方法如图2.1所示:
图 2.1.由 N点DFT恢复频谱DTFT的流程
由图2.1所示流程图可知:
由式2-2可以得到
其中为内插函数
方法2:然而在实际MATLAB计算中,上诉插值公式不见得是最好的方法。由于DFT是DTFT的取样值,其相邻的两个频率样本点的间距为,所以如果我们增加数据的长度N,使得得到的DFT谱线就更加精细,其包络就越接近DTFT的结果,这样可以利用DFT来近似计算DTFT。如果没有更多的数据,可以通过补零来增加数据长度。
3、利用DFT分析连续时间信号的频谱
采用计算机分析连续时间信号的频谱,第一步就是把连续时间信号离散化,这里需要进行连个操作:一是采样,二是截断。
对于连续非周期信号,按采样间隔T进行采样,截取长度为M,那么
对进行N点的频率采样,得到
因此,可以将利用DFT分析连续非周期信号频谱的步骤归纳如下:
(1)确定时域采样间隔T,得到离散序列;
(2)确定截取长度M,得到M点离散序列,这里的为窗函数。
(3)确定频域采样点数N,要求。
(4)利用FFT计算离散序列的N点DFT,得到。
(5)根据式(2-6)由计算采样点的近似值。
采用上诉方法计算的频谱,需要注意如下三点问题:
(1)频谱混叠。如果不满足采样定理的条件,频谱会很出现混叠误差。对于频谱无限宽的信号,应考虑覆盖大部分主要频率的范围。
(2)栅栏效应和频谱分辨率。使用DFT计算频谱,得到的结果只是N个频谱样本值,样本值之间的频谱是未知的,就像通过一个栅栏观察频谱,称为“栅栏效应”。频谱分辨率与记录长度成正比,提高频谱分辨率,就要增加记录时间。
(3)频谱泄露。对于信号截断会把窗函数的频谱会引入到信号频谱中,造成频谱泄露。解决这问题的主要办法是采用旁瓣小的窗函数,频谱泄露和窗函数均会引起误差。
因此,要合理选取采样间隔和截取长度,必要时还需考虑适当的窗。
对于连续周期信号,我们在采用计算机进行计算时,也总是要进行截断,序列总是有限长的,仍然可以采用上诉方法近似计算。
4、可能用到MATLAB函数与代码
实验中的DFT运算可以采用MATLAB中提供的FFT来实现。
DTFT可以利用MATLAB矩阵运算的方法进行计算。
三、实验题目
1. ,完成如下要求:
(1)计算其DTFT,并画出区间的波形。
(2)计算4 点DFT,并把结果显示在(1)所画的图形中。
(3)对补零,计算64 点DFT,并显示结果。
(4)是否可以由DFT 计算DTFT,如果可以,请编程实现。
2. 考察序列
(1)时,用DFT 估计的频谱;将补零加长到长度为100点序列用DFT
估计的频谱。要求画出相应波形。
(2)时,用DFT 估计x(n)的频谱,并画出波形。
3. 已知信号 ,其中,,。从的表达式可以看出,它包含三个频率的正弦波,但是,从其时域波形来看,似乎是一个正弦信号,利用DFT做频谱分析,确定适合的参数,使得到的频谱的频率分辨率符合需要。
4.利用DFT近似分析连续时间信号xt=e-0.1tu(t)的频谱(幅度谱)。分析采用不同的采样间隔和截取长度进行计算的结果,并最终确定合适的参数。
四、实验代码、实验结果及分析
1.
(1)
>> n=0:3;
>> x=[2 -1 1 1];
>> w=-pi:0.01*pi:pi;
>> X=x*exp(-j*n'*w);
>> subplot(211);
>> plot(w,abs(X));
>> xlabel('\Omega/\pi');
>> title('Magnitude');
>> axis tight;
>> subplot(212);
>> plot(w,angle(X));
>> xlabel('\Omega/\pi');
>> title('Phase');
>> axis tight;
(2)
>> Xk=fft(x);
>> subplot(211);
>> hold on;
>> stem(2*pi/4*n,abs(Xk),'filled');
>> subplot(212);
>> hold on;
>> stem(2*pi/4*n,angle(Xk),'filled');
(3)
>> x=[2 -1 1 1 zeros(1,60)];
>> n=0:63;
>> Xk=fft(x);
>> subplot(211);
>> stem(n,abs(Xk),'filled');
>> xlabel('\Omega/\pi');
>> title('Magnitude');
>> axis tight;
>> subplot(212);
>> stem(n,angle(Xk),'filled');
>> xlabel('\Omega/\pi');
>> title('Phase');
>> axis tight;
(4) 可以由DFT计算DTFT,只需采样点足够即可逼近DTFT,可采用增加补零个数的方法实现。
2.
(1)
>> n=0:10;
>> x=cos(0.48*pi*n)+cos(0.52*pi*n);
>> Xk=fft(x);
>> subplot(211);
>> stem(n,abs(Xk),'filled');
>> xlabel('\Omega');
>> title('Magnitude');
>> n1=0:99;
>> x1=[x zeros(1,89)];
>> Xk1=fft(x1);
>> subplot(212);
>> stem(n,abs(Xk1),'filled');
>> xlabel('\Omega');
>> title('Magnitude');
>> n=0:10;
>> x=cos(0.48*pi*n)+cos(0.52*pi*n);
>> Xk1=fft(x);
>> subplot(211);
>> stem(n,angle(Xk),'filled');
>> xlabel('\Omega');
>> title('Phase');
>> n1=0:99;
>> x1=[x zeros(1,89)];
>> Xk1=fft(x1);
>> subplot(212);
>> stem(n1,angle(Xk1),'filled');
>> xlabel('\Omega');
>> title('Phase');
(2)
(3) 可通过增大采样点数,时域补零提高频谱分辨率。
3.
>> n=0:20;
>> x=0.15*sin(2*pi*n)+sin(2*pi*2*n)-0.1*sin(2*pi*3*n);
>> Xk=fft(x);
>> subplot(211);
>> stem(n,abs(Xk),'filled');
>> xlabel('\Omega');
>> title('Magnitude');
>> subplot(212);
>> stem(n,angle(Xk),'filled');
>> xlabel('\Omega');
>> title('Phase');
4.
【修改采样间隔】
>> n=0:10;
>> x=exp(-0.1*n).*heaviside(n);
>> Xk=fft(x);
>> stem(n,abs(Xk),'filled');
>> n=0:50;
>> x=exp(-0.1*n).*heaviside(n);
>> Xk=fft(x);
>> stem(n,abs(Xk),'filled');
>> n=0:100;
>> x=exp(-0.1*n).*heaviside(n);
>> Xk=fft(x);
>> stem(n,abs(Xk),'filled');
【修改截取长度】
>> n=0:100;
>> x=exp(-0.1*n).*(heaviside(n)-heaviside(n-50));
>> Xk=fft(x);
>> stem(n,abs(Xk),'filled');
>> n=0:100;
>> x=exp(-0.1*n).*(heaviside(n)-heaviside(n-10));
>> Xk=fft(x);
>> stem(n,abs(Xk),'filled');
五、实验总结
第一次数字信号处理实验,我了解了如何在MATLAB中使用DFT分析信号的频谱,对DFT采样、截取的概念和操作结果有了更直观的认识。此外,使用MATLAB的FFT大大简化了DFT的计算,让我认识到了FFT算法的快捷。
实验2 利用FFT计算线性卷积
一、实验目的
1.掌握利用FFT计算线性卷积的原理及具体实现方法。
2.加深理解重叠相加法和重叠保留法。
3.考察利用FFT计算线性卷积各种方法的适用范围。
二、实验原理
1.线性卷积与圆周卷积
设x(n)为L点序列,h(n)为M点序列,x(n)和h(n)的线性卷积为
(3-1)
的长度为L+M-1
x(n)和h(n)的圆周卷积为
(3-2)
圆周卷积与线性卷积相等而不产生交叠的必要条件为
N≥L+M+1 (3-3)
圆周卷积定理:根据DFT性质,x(n)和h(n)的N点圆周卷积的DFT等于它们的DFT的乘积:
(3-4)
2.快速卷积
快速卷积发运用圆周卷积实现线性卷积,根据圆周卷积定理利用FFT算法实现圆周卷积。可将快速卷积运算的步骤归纳如下:
(1)必须选择;为了能使用基-2算法,要求。采用补零的办法使得x(n)和h(n)的长度均为N。
(2)计算x(n)和h(n)的N点FFT。
(3)组成乘积
(4)利用IFFT计算Y(k)的IDFT,得到线性卷积y(n)
3.分段卷积
我们考察单位取样响应为h(n)的线性系统,输入为x(n),输出为y(n),则
yn=xn*h(n)
当输入序列x(n)极长时,如果要等x(n)全部集齐时再开始进行卷积,会使输出有较大延时;如果序列太长,需要大量存储单元。为此,我们把x(n)分段,为别求出每段的卷积,合在一起得到最后的总输出。这称为分段卷积。分段卷积可以细分为重叠保留法和重叠相加法。
重叠保留法:设x(n)的长度为,h(n)的长度为M。把序列x(n)分成多段N点序列,每段雨前一段重写M-1个样本。并在第一个输入段前面补M-1个零。计算每一段与h(n)的圆周卷积,其结果中前M-1个不等与线性卷积,应当舍去,只保留后面N-M+1个正确的输出样本,把它们合起来得到总的输出。
利用FFT实现重叠保留法的步骤如下:
(1)在x(n)前面填充M-1个零,扩大以后的序列为
(2)将x(n)分为若干段N点子段,设L=N-M+1为每一段的有效长度,则第i段的数据为:
(3)计算每一段与h(n)的N点圆周卷积,利用FFT计算圆周卷积
(4)舍去每一段卷积结果的前M-1个样本,连接剩下的样本得到卷积结果y(n)。
重叠相加法:设h(n)长度为M,将信号x(n)分解成长为L的子段。以表示没断信号,则:
每一段卷积的长度为L+M-1,所以在做求和时,相邻两段序列由M-1个样本重叠,即前一段的最后M-1个样本和下一段前M-1个样本序列重叠,这个重叠部分相加,再与不重叠的部分共同组成y(n)。
利用FFT实现重叠保留法的步骤如下:
(1)将x(n)分为若干L点子段。
(2)计算每一段与h(n)的卷积,根据快速卷积法利用FFT计算卷积。
(3)将各段相加,得到输出y(n)。
4、可能得到的MATLAB函数
实验中FFT运算可采用MATLAB中提供的函数fft来实现。
三、实验题目
假设要计算序列x(n)=u(n)-u(n-L),0≤n≤L和h(n)=cos(0.2πn),0≤n≤M的线性卷积完成以下实验内容。
1.设L=M,根据线性卷积的表达式和快速卷积的原理分别编程实现计算两个序列线性卷积的方法,比较当序列长度分别为8,16,32,64,256,512,1024时两种方法计算线性卷积所需时间。
2.当L=2048且M=256时比较直接计算线性卷积和快速卷积所需的时间,进一步考察当L=4096且M=256时两种算法所需的时间。
3. 编程实现利用重叠相加法计算两个序列的线性卷积,考察L=2048且M=256时计算线性卷积的时间,与2题的结果进行比较。
4. 编程实现利用重叠保留法计算两个序列的线性卷积,考察L=2048且M=256时计算线性卷积的时间,与2题的结果进行比较。
四、实验代码、实验结果及分析
1.
【线性卷积】
>> for i=1:7
L=input('L:');
n=0:L;
x=heaviside(n)-heaviside(n-L);
h=cos(0.2*pi*n);
tic
y=conv(x,h);
toc
end
L:8
时间已过 0.077287 秒。
L:16
时间已过 0.032760 秒。
L:32
时间已过 0.000095 秒。
L:64
时间已过 0.000060 秒。
L:256
时间已过 0.000131 秒。
L:512
时间已过 0.000230 秒。
L:1024
时间已过 0.000846 秒。
【快速卷积】
>> for i=1:7
L=input('L:');
n=0:L;
x=heaviside(n)-heaviside(n-L);
h=cos(0.2*pi*n);
tic
Xk=fft(x,L+1);
Hk=fft(h,L+1);
Yk=Xk.*Hk;
y=ifft(Yk);
toc
end
L:8
时间已过 0.002417 秒。
L:16
时间已过 0.001108 秒。
L:32
时间已过 0.000384 秒。
L:64
时间已过 0.000616 秒。
L:256
时间已过 0.002367 秒。
L:512
时间已过 0.000702 秒。
L:1024
时间已过 0.000967 秒。
在序列长度较短时,快速卷积优势明显,序列加长后出现了比线性卷积慢的情况
2.
线性卷积:
>> for i=1:2
L=input('L:');
n1=0:L;
M=input('M:');
n2=0:M;
x=heaviside(n1)-heaviside(n1-L);
h=cos(0.2*pi*n2);
tic
y=conv(x,h);
toc
end
L:2048
M:256
时间已过 0.000533 秒。
L:4096
M:256
时间已过 0.000712 秒。
快速卷积:
for i=1:2
L=input('L:');
n1=0:L;
M=input('M:');
n2=0:M;
x=heaviside(n1)-heaviside(n1-L);
h=cos(0.2*pi*n2);
tic
Xk=fft(x,M);
Hk=fft(h,M);
Yk=Xk.*Hk;
y=ifft(Yk);
toc
end
L:2048
M:256
时间已过 0.000592 秒。
L:4096
M:256
时间已过 0.001827 秒。
可见,当序列加长,快速卷积速度开始优于线性卷积
3.
>> tic
>> N=512;
>> m=0:256;
>> h=cos(0.2*pi*m);
>> n=0:2048;
>> x=heaviside(n)-heaviside(n-2048);
>> Lx=length(x);
>> Lm=length(h);
>> M=Lm-1;
>> L=N-M;
>> h=fft(h,N);
>> K=ceil(Lx/L);
>> for i=Lx:K*L-1
x(i+1)=0;
end
>> Y=zeros(K,N);
>> Y2=zeros(1,(K-1)*L+N);
>> for k=0:K-1
Xk=[x(k*L+1:k*L+L),zeros(1,M)];
Y(k+1, :)=(ifft(fft(Xk).*h));
Y2(k*L+1:k*L+N)=Y2(k*L+1:k*L+N)+Y(k+1,:);
end
>> toc
时间已过 0.000575 秒。
可见,重叠相加法的速度相比第二题更快
4.
>> tic
>> N=512;
>> m=0:256;
>> h=cos(0.2*pi*m);
>> n=0:2048;
>> x=heaviside(n)-heaviside(n-2048);
>> Lx=length(x);
>> Lm=length(h);
>> M=Lm-1;
>> L=N-M;
>> h=fft(h,N);
>> K=floor((Lx+M-1)/L)+1;
>> z=(K)*L-Lx;
>> x1=[zeros(1,M),x,zeros(1,z)];
>> Y=zeros(K,N);
>> for k=0:K-1
Xk=fft(x1(k*L+1:k*L+N));
Y(k+1, :)=(ifft(Xk).*h);
end
>> Z=reshape(Y(:,M:N)',1,[]);
>> toc
时间已过 0.000452 秒。
可见,重叠保留法的速度相比第二题也更快
五、实验总结
这次FFT的实验让我对FFT的算法效率有了新的认识,并不是任何情况下FFT卷积的速度都优于直接计算线性卷积,当序列长度很长时反而会比线性卷积慢。此外,我还对两种新的FFT方法:重叠相加法、重叠保留法及其MATLAB实现有了基本的了解。
实验3 IIR数字滤波器设计
一、实验目的
1.掌握利用脉冲响应不变法和双线性变换法设计IIR数字滤波器的原理及具体方法。
2.加深理解数字滤波器和模拟滤波器之间的技术指标转化。
3.掌握脉冲响应不变法和双线性变换法设计IIR数字滤波器的优缺点及适用范围。
二、实验题目
1.设采样频率为fs =4kHz,采用脉冲响应不变法设计一个三阶巴特沃斯数字低通滤波器,其3dB截止频率为fc=1kHz。
2.设采样频率为fs=10kHz,设计数字低通滤波器,满足如下指标
通带截止频率:fp=1kHz,通带波动:Rp=1dB
阻带截止频率:fst=1.5kHz,阻带衰减:As=15dB
要求分别采用巴特沃斯、切比雪夫I型、切比雪夫II型和椭圆模拟原型滤波器及脉冲响应不变法进行设计。结合实验结果,分别讨论采用上述设计的数字滤波器是否都能满足给定指标要求,分析脉冲响应不变法设计IIR数字滤波器的优缺点及适用范围。
三、实验代码、实验结果及分析
1. 巴特沃斯模拟原型滤波器 + 脉冲响应不变法 / 双线性变换法
>> fp=1000;
>> fs=1500;
>> Rp=1;
>> As=15;
>> f=10000;
>> Wp=2*pi*fp;
>> Ws=2*pi*fs;
>> wp=2*f*tan(2*pi*fp/(2*f));
>> ws=2*f*tan(2*pi*fs/(2*f));
>> N1=ceil((log10((10^(Rp/10)-1)/(10^(As/10)-1)))/(2*log10(Wp/Ws)));
>> N2=ceil((log10((10^(Rp/10)-1)/(10^(As/10)-1)))/(2*log10(wp/ws)));
>> OmegaC1=Wp/((10^(Rp/10)-1)^(1/(2*N1)));
>> OmegaC2=wp/((10^(Rp/10)-1)^(1/(2*N1)));
>> [z,p,k]=buttap(N1);
>> b1=k*OmegaC1^N1;
>> a1=poly(p*OmegaC1);
>> [H,w]=freqs(b1,a1);
>> subplot(221);
>> plot(w/pi,abs(H));
>> grid on;
>> axis tight;
>> xlabel('\Omega(\pi)');
>> ylabel('|H(\Omega)|');
>> subplot(223);
>> plot(w/pi,angle(H));
>> grid on;
>> axis tight;
>> xlabel('\Omega(\pi)');
>> ylabel('Phase of |H(\Omega)|(\pi)');
>> [b2,a2]=butter(N2,OmegaC2,'S');
>> [H,w]=freqs(b2,a2);
>> subplot(222);
>> plot(w/pi,abs(H));
>> grid on;
>> axis tight;
>> xlabel('\Omega(\pi)');
>> ylabel('|H(\Omega)|');
>> subplot(224);
>> plot(w/pi,angle(H));
>> grid on;
>> axis tight;
>> xlabel('\Omega(\pi)');
>> ylabel('Phase of |H(\Omega)|(\pi)');
2. 切比雪夫I型 + 脉冲响应不变法 / 双线性变换法
>> wp=0.2*pi;
>> ws=0.3*pi;
>> Rp=1;
>> As=15;
>> f=10000;
>> T=1/f;
>> e=(10^(Rp/10)-1)^(1/2);
>> A=10^(As/20);
>> wp1=wp/T;
>> ws1=ws/T;
>> N=ceil((acosh((A^2-1)^(1/2)/e))/(acosh(ws1/wp1)));
>> wc=wp/pi;
>> [b,a]=cheby1(N,Rp,wc);
>> w=[0:500]*pi/500;
>> [H,w]=freqz(b,a);
>> subplot(221);
>> plot(w/pi,abs(H));
>> grid on;
>> axis tight;
>> xlabel('\omega(\pi)');
>> ylabel('|H(e^j^\omega)|');
>> subplot(222);
>> plot(w/pi,20*log10((abs(H))/max(abs(H))));
>> grid on;
>> axis tight;
>> xlabel('\omega(\pi)');
>> ylabel('|H(e^j^\omega)|(dB)');
>> subplot(223);
>> plot(w/pi,angle(H)/pi);
>> grid on;
>> axis tight;
>> xlabel('\omega(\pi)');
>> ylabel('Phase of H(e^j^\omega)');
>> grd=grpdelay(b,a,w);
>> subplot(224);
>> plot(w/pi,grd);
>> grid on;
>> axis tight;
>> xlabel('\omega(\pi)');
>> ylabel('Group Delay');
3. 切比雪夫II型 + 脉冲响应不变法 / 双线性变换法
>> wp=0.2*pi;
>> ws=0.3*pi;
>> Rp=1;
>> As=15;
>> f=10000;
>> T=1/f;
>> e=(10^(Rp/10)-1)^(1/2);
>> A=10^(As/20);
>> wp1=wp/T;
>> ws1=ws/T;
>> N=ceil((acosh((A^2-1)^(1/2)/e))/(acosh(ws1/wp1)));
>> wc=wp/pi;
>> [b,a]=cheby2(N,Rp,wc);
>> w=[0:500]*pi/500;
>> [H,w]=freqz(b,a);
>> subplot(221);
>> plot(w/pi,abs(H));
>> grid on;
>> axis tight;
>> xlabel('\omega(\pi)');
>> ylabel('|H(e^j^\omega)|');
>> subplot(222);
>> plot(w/pi,20*log10((abs(H))/max(abs(H))));
>> grid on;
>> axis tight;
>> xlabel('\omega(\pi)');
>> ylabel('|H(e^j^\omega)|(dB)');
>> subplot(223);
>> plot(w/pi,angle(H)/pi);
>> grid on;
>> axis tight;
>> xlabel('\omega(\pi)');
>> ylabel('Phase of H(e^j^\omega)');
>> grd=grpdelay(b,a,w);
>> subplot(224);
>> plot(w/pi,grd);
>> grid on;
>> axis tight;
>> xlabel('\omega(\pi)');
>> ylabel('Group Delay');
4. 椭圆型 + 脉冲响应不变法 / 双线性变换法
>> wp=0.2*pi;
>> ws=0.3*pi;
>> Rp=1;
>> As=15;
>> f=10000;
>> T=1/f;
>> e=(10^(Rp/10)-1)^(1/2);
>> A=10^(As/20);
>> wp1=wp/T;
>> ws1=ws/T;
>> N=ceil((acosh((A^2-1)^(1/2)/e))/(acosh(ws1/wp1)));
>> wc=wp/pi;
>> [b,a]=ellip(N,Rp,wc);
>> w=[0:500]*pi/500;
>> [H,w]=freqz(b,a);
>> subplot(221);
>> plot(w/pi,abs(H));
>> grid on;
>> axis tight;
>> xlabel('\omega(\pi)');
>> ylabel('|H(e^j^\omega)|');
>> subplot(222);
>> plot(w/pi,20*log10((abs(H))/max(abs(H))));
>> grid on;
>> axis tight;
>> xlabel('\omega(\pi)');
>> ylabel('|H(e^j^\omega)|(dB)');
>> subplot(223);
>> plot(w/pi,angle(H)/pi);
>> grid on;
>> axis tight;
>> xlabel('\omega(\pi)');
>> ylabel('Phase of H(e^j^\omega)');
>> grd=grpdelay(b,a,w);
>> subplot(224);
>> plot(w/pi,grd);
>> grid on;
>> axis tight;
>> xlabel('\omega(\pi)');
>> ylabel('Group Delay');
五、实验总结
通过这次实验,我了解了巴特沃斯、切比雪夫I/II型、椭圆型滤波器的MATLAB设计方法,对课本上介绍的滤波器设计步骤有了实践,对其思路有了更深的认识,譬如从数字域指标出发设计模拟域的指标,求出模拟滤波器的系统函数再转换回数字滤波器。此外,MATLAB提供的滤波器设计函数大大简化了设计,十分便捷。
实验4 频率取样法设计FIR数字滤波器
一、实验目的
掌握频率取样法设计FIR数字滤波器的原理及具体方法
二、实验原理
1、基本原理
频率取样法从频域出发,把理想的滤波器等间隔采样得到,将作为实际设计滤波器的。
(8-1)
得到以后可以由来确定唯一确定滤波器的单位脉冲响应,可以由求得:
(8-2、3)
其中为内插函数
(8-4)
由求得的频率响应将逼近
如果我们设计的是线性相位FIR滤波器,则的幅度和相位满足线性相位滤波器的约束条件。
我们将表示为如下形式:
(8-5)
当为实数,则
由此得到
(8-6)
即为中心偶对称。在利用线性相位条件可知,对于1型和2型线性相位滤波器
(8-7)
对于3型和4型线性相位滤波器
(8-8)
其中,x表示取小于该数的最大的整数。
设计步骤
(1)由给定的理想滤波器给出和。
(2)由求得
(3) 根据求得或
三、实验题目
1. 设计一个数字低通FIR滤波器,其技术指标如下:
ω_p=0.2π,R_p=0.25dB
ω_st=0.3π,A_s=50dB
分别采用矩形窗、汉宁窗、海明窗、布莱克曼窗、凯瑟窗设计该滤波器。结合实验结果分别讨论上述方法设计的数字滤波器是否符合指标。
2. 设计一个数字带通FIR滤波器,其技术指标如下:
3. 采用频率取样设计法设计FIR数字低通滤波器,满足以下指标
ω_p=0.2π,R_p=0.25dB
ω_st=0.3π,A_s=50dB
(1)取N=20,过渡带没有样本。
(2)取N=40,过渡带有一个样本,T=0.39。
(3)取N=60,过渡带有两个样本,T1=0.5925, T2=0.1099。
(4)分别采用上述方法设计的数字滤波器是否都能满足给定的指标要求。
4. 采用频率取样技术设计下面的高通滤波器
ω_st=0.6π,A_s=50dB
ω_p=0.8π,R_p=1dB
对于高通滤波器,N必须为奇数(或1型滤波器)。选择N=33,过渡带有两个样本,过渡带样本最优值为T1=0.1095,T2=0.598。
四、实验代码、实验结果及分析
1.
【矩形窗】
>> wp=0.2*pi;
>> wst=0.3*pi;
>> tr_width=wst-wp;
>> N=ceil(1.8*pi/tr_width)+1;
>> n=0:N-1;wc=(wp + wst)/2;
>> alpha=(N-1)/2;
>> hd=(wc/pi)*sinc((wc/pi)*(n-alpha));
>> w_boxcar=boxcar(N)';
>> h=hd .*w_boxcar;
>> subplot(221);stem(n, hd,'filled');
>> axis tight; xlabel('n'); ylabel('hd(n)');
>> [Hr,w1] = zerophase(h);
>> subplot(222); plot(w1/pi, Hr);
>> axis tight; xlabel('\omega/\pi'); ylabel('H(\omega)');
>> subplot(223); stem(n, h,'filled');
>> axis tight; xlabel('n'); ylabel('h(n)');
>> [H,w]=freqz(h,1);
>> subplot(224); plot(w/pi,20*log10(abs(H)/max(abs(H))));
>> xlabel('\omega/\pi'); ylabel('dB');
>> grid on;
显然,矩形窗组带衰减不满足指标
【汉宁窗】
>> wp=0.2*pi;
>> wst=0.3*pi;
>> tr_width=wst-wp;
>> N=ceil(6.2*pi/tr_width)+1;
>> n=0:N-1;wc=(wp + wst)/2;
>> alpha=(N-1)/2;
>> hd=(wc/pi)*sinc((wc/pi)*(n-alpha));
>> w_hanning= hanning (N)';
>> h=hd .*w_hanning;
>> subplot(221);stem(n, hd,'filled');
>> axis tight; xlabel('n'); ylabel('hd(n)');
>> [Hr,w1] = zerophase(h);
>> subplot(222); plot(w1/pi, Hr);
>> axis tight; xlabel('\omega/\pi'); ylabel('H(\omega)');
>> subplot(223); stem(n, h,'filled');
>> axis tight; xlabel('n'); ylabel('h(n)');
>> [H,w]=freqz(h,1);
>> subplot(224); plot(w/pi,20*log10(abs(H)/max(abs(H))));
>> xlabel('\omega/\pi'); ylabel('dB');
>> grid on;
显然,汉宁窗组带衰减不
展开阅读全文