南京邮电大学
实 验 报 告
实验名称:离散时间信号与系统的时、频域表示
离散傅立叶变换和z变换
数字滤波器的频域分析和实现
数字滤波器的设计
课程名称 数字信号处理A(双语)
班级学号 B13011025
姓 名 陈志豪
开课时间 2015/2016学年,第1学期
实验名称:离散时间信号与系统的时、频域表示
实验目的和任务:
熟悉Matlab基本命令,理解和掌握离散时间信号与系统的时、频域表示及简单应用。在Matlab环境中,按照要求产生序列,对序列进行基本运算;对简单离散时间系统进行仿真,计算线性时不变(LTI)系统的冲激响应和卷积输出;计算和观察序列的离散时间傅立叶变换(DTFT)幅度谱和相位谱。 实验内容:
基本序列产生和运算: Q1.1~1.3,Q1.23,Q1.30~1.33 离散时间系统仿真: Q2.1~2.3 LTI系统:Q2.19,Q2.21,Q2.28 DTFT:Q3.1,Q3.2,Q3.4 实验过程与结果分析:
Q1.1运行程序P1.1,以产生单位样本序列u[n]并显示它。 clf;
n = -10:20;
u = [zeros(1,10) 1 zeros(1,20)]; stem(n,u);
xlabel('Time index n'); ylabel('Amplitude');
title('Unit Sample Sequence'); axis([-10 20 0 1.2]);
Q1.2 命令clf,axis,title,xlabel和ylabel 命令的作用是什么? 答:clf命令的作用:清除图形窗口上的图形; axis命令的作用:设置坐标轴的范围和显示方式; title命令的作用:给当前图片命名; xlabel命令的作用:添加x坐标标注; ylabel c命令的作用:添加y坐标标注;
Q1.3修改程序P1.1,以产生带有延时11个样本的延迟单位样本序列ud[n]。运行修改的程序并显示产生的序列。 clf;
n = -10:20;
u = [zeros(1,21) 1 zeros(1,9)]; stem(n,u);
xlabel('Time index n'); ylabel('Amplitude');
title('Unit Sample Sequence'); axis([-10 20 0 1.2]);
Q1.23修改上述程序,以产生长度为50、频率为0.08、振幅为2.5、相移为90度的一个正弦序列并显示它。该序列的周期是多少? n = 0:50;
f = 0.08;
phase = 90; A = 2.5; arg = 2*pi*f*n - phase; x = A*cos(arg); clf; stem(n,x); axis([0 50 -3 3]); grid;
title('Sinusoidal Sequence'); xlabel('Time index n'); ylabel('Amplitude'); axis;
答:周期为:T=
2??=
11==22.5。 f0.08Q1.30未污染的信号s[n]是什么样的形式?加性噪声d[n]是什么样的形式? 答:未污染的信号:s[n]=2×0.9。
加性噪声d[n]是均匀分布在-04到+0.4之间的随机序列。
Q1.31使用语句x=s+d能产生被噪声污染的信号吗?若不能,为什么? 答:不能,因为d是列向量,s是行向量。
Q1.32信号x1,x2和x3与信号x之间的关系是什么?
答:X1是x的延时一个单位,x2和x相等,x3超前于x一个单位。
nnQ1.33legend命令的作用是什么? 答:产生图例说明。
Q2.1对M = 2 ,运行上述程序,生成输入 x[n] = s1[n]+s2[n]的输出信号。输出x[n]的哪个分量被该离散时间系统抑制?
答:输入 x[n] 被该离散时间系统抑制的分量为Signal2的高频分量。
Q2.2若线性时不变系统由y[n] = 0.5(x[n]+x[n–1])变成y[n] = 0.5(x[n]–x[n–1]),输入 x[n] = s1[n]+s2[n]的影响是什么? n = 0:100;
s1 = cos(2*pi*0.05*n);
s2 = cos(2*pi*0.47*n); x = s1+s2;
M = input('Desired length of the filter = '); num = (-1).^[0:M-1]; y = filter(num,1,x)/M; clf;
subplot(2,2,1); plot(n, s1);
axis([0, 100, -2, 2]); xlabel('Time index n'); ylabel('Amplitude'); title('Signal #1'); subplot(2,2,2); plot(n, s2);
对 axis([0, 100, -2, 2]); xlabel('Time index n'); ylabel('Amplitude'); title('Signal #2'); subplot(2,2,3); plot(n, x);
axis([0, 100, -2, 2]); xlabel('Time index n'); ylabel('Amplitude'); title('Input Signal'); subplot(2,2,4); plot(n, y);
axis([0, 100, -2, 2]); xlabel('Time index n'); ylabel('Amplitude');
title('Output Signal'); axis;
答:对于输入的影响是- 该系统是一个高通滤波器,它通过高频率的输入分量S2,而不是低频的输入分量S1。
Q2.3对滤波器长度M和正弦信号s1[n]和s2[n]的频率取其他值,运行程序P2.1,算出结果。
M=3,f1=0.1,f2=0.2
M=8,f1=0.25,f2=0.5
Q2.19运行 P2_5,生成式(2.15)所给离散时间系统的冲激响应。
Q2.21利用filter命令编写一个MATLAB程序,生成式(2.17)给出的因果线性时不变系统的冲激响应,计算并画出前40个样本。把你的结果和习题Q2.20中得到的结果相比较。 clf; N = 40;
num = [0.9 -0.45 0.35 0.002]; den = [1.0 0.71 -0.46 -0.62]; x = [1 zeros(1,N-1)]; y = filter(num,den,x); stem(y);
xlabel('Time index n'); ylabel('Amplitude');
title('Impulse Response'); grid;
程序产生的40个样本如下所示:
Q2.28运行程序P2.7,对序列h[n]和x[n]求卷积,生成y[n],并用FIR滤波器h[n]对输入x[n]滤波,求得y1[n]。y[n]和y1[n]有差别吗?为什么要使用对x[n]补零后得到的x1[n]作为输入来产生y1[n]?
答:y[n] 和 y1[n] 的差别为 - 没有差别
将x[n]补零后得到 x1[n]作为输入,产生y1[n]的原因是 – 对于长度N1和N2的两个序列,转化率返回得到的序列长度N1+N2-1。与此相反,滤波器接收一个输入信号和系统规范,返回的结果是相同的长度作为输入信号。因此,为了从转化率和滤波器得到直接比较的结果,有必要供应滤波器的输入已经填充为长度L(x)+L(h)-1。
Q3.1在程序P3.1中,计算离散时间傅里叶变换的原始序列是什么?MATLAB命令pause的作用是什么?
2?z?1答:离散时间傅里叶变换的原始序列:; ?11?0.6zpause 命令的作用:暂停程序,直至用户按任意键,程序才可以开始。
Q3.2运行程序 P3.1,求离散时间傅里叶变换的实部、虚部以及幅度和相位谱。离散时间傅里叶变换是?的周期函数吗?若是,周期是多少?描述这四个图表示的对称性。
答:DTFT 是关于 ?的周期函数么?是周期函数 周期是 - 2π
四个图形的对称性为:实部是偶对称,虚部是奇对称,幅度谱是偶对称相位谱是奇对称。 Q3.4修改程序 P3_1 重做Q3.2的程序如下: clf;
w = -4*pi:8*pi/511:4*pi;
num = [1 3 5 7 9 11 13 15 17];den = [1]; h = freqz(num, den, w); subplot(2,1,1)
plot(w/pi,real(h));grid
title('Real part of H(e^{j\\omega})') xlabel('\\omega /\\pi'); ylabel('Amplitude'); subplot(2,1,2)
plot(w/pi,imag(h));grid
title('Imaginary part of H(e^{j\\omega})') xlabel('\\omega /\\pi'); ylabel('Amplitude'); pause
subplot(2,1,1)
plot(w/pi,abs(h));grid
title('Magnitude Spectrum |H(e^{j\\omega})|') xlabel('\\omega /\\pi'); ylabel('Amplitude'); subplot(2,1,2)
plot(w/pi,angle(h));grid
title('Phase Spectrum arg[H(e^{j\\omega})]') xlabel('\\omega /\\pi');
ylabel('Phase in radians'); 修改程序后的运行结果为:
答:DTFT 是关于 ?的周期函数么?是周期函数 周期是 - 2π
相位谱中跳变的原因是 - 对相位进行归一化。
实验名称:离散傅立叶变换和z变换
实验目的和任务:
掌握离散傅立叶变换(DFT)及逆变换(IDFT)、z变换及逆变换的计算和分析。利用Matlab语言,完成DFT和IDFT的计算及常用性质的验证,用DFT实现线性卷积,实现z变换的零极点分析,求有理逆z变换。 实验内容:
DFT和IDFT计算: Q3.23~3.24
DFT的性质: Q3.26~3.29,Q3.36,Q3.38,Q3.40 z变换分析:Q3.46~3.48 逆z变换:Q3.50
实验过程与结果分析:?参见实验一格式?
Q3.23编写一个MATLAB程序,计算并画出长度为N的L点离散傅里叶变换X[k]的值, 其中L≥N,然后计算并画出L点离散傅里叶逆变换X[k]。对不同长度N和不同的离散傅里叶变换长度L,运行程序。讨论你的结果。
clf; N=200; L=256; nn=[0:N-1];
kk=[0:L-1];
xR=[0.1*(1:100) zeros(1,N-100)]; xI=[zeros(1,N)]; x=xR+i*xI; XF=fft(x,L); subplot(3,2,1); grid; plot(nn,xR); grid;
title('Re\\{x[n]\\}'); xlabel('Time index n'); ylabel('Amplitude'); subplot(3,2,2); plot(nn,xI); grid;
title('Im\\{x[n]\\}'); xlabel('Time index n'); ylabel('Amplitude'); subplot(3,2,3); plot(kk,real(XF)); grid;
title('Re\\{x[n]\\}'); xlabel('Frequency index k'); ylabel('Amplitude'); subplot(3,2,4); plot(kk,imag(XF)); grid;
title('Im\\{x[n]\\}'); xlabel('Frequency index k'); ylabel('Amplitude'); xx=ifft(XF,L); subplot(3,2,5); plot(kk,real(xx)); grid;
title('Real part of IDFT\\{x[n]\\}'); xlabel('Time index n'); ylabel('Amplitude'); subplot(3,2,6); plot(kk,imag(xx)); grid;
title('Imag part of IDFT\\{x[n]\\}'); xlabel('Time index n'); ylabel('Amplitude');
Q3.26在函数circshift中,命令rem的作用是什么? 答:Rem(x,y)是用y对x求余数函数。
Q3.27 解释函数circshift怎样实现圆周移位运算。
答:在输入序列x由M的位置开始被循环移位,如果M>0,则circlshift删除从矢量x最左边开始的M个元素和它们附加在右侧的剩余元素,以获得循环移位序列。如果M<0,则circlshift首先通过x的长度来弥补M,即序列x最右边的长度的M样本从x中删除和附加在其余的M个样本的右侧,以获得循环移位序列。 Q3.28在函数circonv中,运算符~=的作用是什么? 答:“~=”表示不等于。
Q3.29解释函数circonv怎样实现圆周卷积运算。
答:输入时两个长度都为L的向量x1和x2,它是非常有用的定期延长X2的函数。让x2p成为x2延长无限长的周期的序列。从概念上讲,在定点时间上通过时序交换后的x2p的长度L交换x2p序列和x2tr等于1的元素。然后元素1至L的输出向量y是通过取x1和获得的长度为L的sh矢量之间的内积得到通过循环右移的时间反转向量x2tr。对于输出样本Y[n]的1≤N≤L时,右循环移位的量为n-1个位置上。
Q3.30通过加入合适的注释语句和程序语句,修改程序P3.7,对程序生成的图形中的两个轴加标记。哪一个参数决定时移量?若时移量大于序列长度,将会发生什么?
function y = circshift(x,M) if abs(M) > length(x) M = rem(M,length(x)); end if M < 0
M = M + length(x); end
y = [x(M+1:length(x)) x(1:M)];
clf; M = 6;
a = [0 1 2 3 4 5 6 7 8 9]; b = circshift(a,M); L = length(a)-1; n = 0:L; subplot(2,1,1);
stem(n,a);axis([0,L,min(a),max(a)]); title('Original Sequence'); xlabel('time index k'); ylabel('a[n]'); subplot(2,1,2);
stem(n,b);axis([0,L,min(a),max(a)]);
title(['Sequence Obtained by Circularly Shifting by',num2str(M),'Samples']); xlabel('time index n'); ylabel('b[n]');
D决定时移量,左移M位。
Q3.31运行修改后的程序并验证圆周时移运算。 修改后的程序如下:
Q3.32通过加入合适的注释语句和程序语句,修改程序P3.8,对程序生成的图形中的两个轴加标记。时移量是多少?
clf;
x = [0 2 4 6 8 10 12 14 16]; N = length(x)-1; n = 0:N; y = circshift(x,5); XF = fft(x); YF = fft(y); subplot(2,2,1) stem(n,abs(XF));grid
title('Magnitude of DFT of Original Sequence'); xlabel('Frequency index k'); ylabel('|X[k]|'); subplot(2,2,2) stem(n,abs(YF));grid
title('Magnitude of DFT of Circularly Shifted Sequence'); xlabel('Frequency index k'); ylabel('|Y[k]|'); subplot(2,2,3)
stem(n,angle(XF));grid
title('Phase of DFT of Original Sequence'); xlabel('Frequency index k'); ylabel('arg(X[k])'); subplot(2,2,4)
stem(n,angle(YF));grid
title('Phase of DFT of Circularly Shifted Sequence'); xlabel('Frequency index k'); ylabel('arg(Y[k])');
时移量是5。
Q3.33运行修改后的程序并验证离散傅里叶变换的圆周时移性质。
Q3.34选取两个不同的时移量,重做习题Q3.33。 (1)修改后的程序如下:
clf;
x = [0 2 4 6 8 10 12 14 16]; N = length(x)-1; n = 0:N; y = circshift(x,3); XF = fft(x); YF = fft(y); subplot(2,2,1) stem(n,abs(XF));grid
title('Magnitude of DFT of Original Sequence'); xlabel('Frequency index k'); ylabel('|X[k]|'); subplot(2,2,2) stem(n,abs(YF));grid
title('Magnitude of DFT of Circularly Shifted Sequence'); xlabel('Frequency index k'); ylabel('|Y[k]|'); subplot(2,2,3) stem(n,angle(XF));grid
title('Phase of DFT of Original Sequence'); xlabel('Frequency index k'); ylabel('arg(X[k])'); subplot(2,2,4) stem(n,angle(YF));grid
title('Phase of DFT of Circularly Shifted Sequence'); xlabel('Frequency index k'); ylabel('arg(Y[k])');
(2)修改后的程序如下:
clf;
x = [0 2 4 6 8 10 12 14 16]; N = length(x)-1; n = 0:N; y = circshift(x,6); XF = fft(x); YF = fft(y); subplot(2,2,1) stem(n,abs(XF));grid
title('Magnitude of DFT of Original Sequence'); xlabel('Frequency index k'); ylabel('|X[k]|'); subplot(2,2,2) stem(n,abs(YF));grid
title('Magnitude of DFT of Circularly Shifted Sequence'); xlabel('Frequency index k'); ylabel('|Y[k]|'); subplot(2,2,3)
stem(n,angle(XF));grid
title('Phase of DFT of Original Sequence'); xlabel('Frequency index k'); ylabel('arg(X[k])'); subplot(2,2,4)
stem(n,angle(YF));grid
title('Phase of DFT of Circularly Shifted Sequence'); xlabel('Frequency index k'); ylabel('arg(Y[k])');
Q3.35选取两个不同长度的序列,重做习题Q3.33。
修改后的程序如下:
clf;
x = [2 4 6 8 10 12 14 16]; N = length(x)-1; n = 0:N; y = circshift(x,5); XF = fft(x); YF = fft(y); subplot(2,2,1) stem(n,abs(XF));grid
title('Magnitude of DFT of Original Sequence'); xlabel('Frequency index k'); ylabel('|X[k]|'); subplot(2,2,2) stem(n,abs(YF));grid
title('Magnitude of DFT of Circularly Shifted Sequence'); xlabel('Frequency index k'); ylabel('|Y[k]|'); subplot(2,2,3) stem(n,angle(XF));grid
title('Phase of DFT of Original Sequence'); xlabel('Frequency index k'); ylabel('arg(X[k])'); subplot(2,2,4) stem(n,angle(YF));grid
title('Phase of DFT of Circularly Shifted Sequence'); xlabel('Frequency index k'); ylabel('arg(Y[k])');
修改后的程序如下:
clf;
x = [0 2 4 6 8 10 12]; N = length(x)-1; n = 0:N; y = circshift(x,5); XF = fft(x); YF = fft(y); subplot(2,2,1) stem(n,abs(XF));grid
title('Magnitude of DFT of Original Sequence'); xlabel('Frequency index k'); ylabel('|X[k]|'); subplot(2,2,2) stem(n,abs(YF));grid
title('Magnitude of DFT of Circularly Shifted Sequence'); xlabel('Frequency index k'); ylabel('|Y[k]|'); subplot(2,2,3) stem(n,angle(XF));grid
title('Phase of DFT of Original Sequence'); xlabel('Frequency index k'); ylabel('arg(X[k])'); subplot(2,2,4) stem(n,angle(YF));grid
title('Phase of DFT of Circularly Shifted Sequence'); xlabel('Frequency index k'); ylabel('arg(Y[k])');
Q3.36运行程序P3.9并验证离散傅里叶变换的圆周卷积性质
g1 = [1 2 3 4 5 6]; g2 = [1 -2 3 3 -2 1]; ycir = circonv(g1,g2);
disp('Result of circular convolution = ');disp(ycir) G1 = fft(g1); G2 = fft(g2); yc = real(ifft(G1.*G2));
disp('Result of IDFT of the DFT products = ');disp(yc)
结果:
x1 =
1 2 3 4 5 6 x2 =
1 -2 3 3 -2 1 Result of circular convolution = 12 28 14 0 16 14 Result of IDFT of the DFT products = 12 28 14 0 16 14
Q3.37选取另外两组等长序列重做习题Q3.36。 g1 = [2 3 7 1 6 -5]; g2 = [-4 6 7 0 2 9]; ycir = circonv(g1,g2);
disp('Result of circular convolution = ');disp(ycir) G1 = fft(g1); G2 = fft(g2); yc = real(ifft(G1.*G2));
disp('Result of IDFT of the DFT products = ');disp(yc) x1 =
2 3 7 1 6 -5 x2 =
-4 6 7 0 2 9 Result of circular convolution = 45 30 25 103 -10 87 Result of IDFT of the DFT products =
45.0000 30.0000 25.0000 103.0000 -10.0000 87.0000 Q3.38运行程序P3.10并验证线性卷积可通过圆周卷积得到。 g1 = [1 2 3 4 5];g2 = [2 2 0 1 1]; g1e = [g1 zeros(1,length(g2)-1)]; g2e = [g2 zeros(1,length(g1)-1)]; ylin = circonv(g1e,g2e);
disp('Linear convolution via circular convolution = ');disp(ylin); y = conv(g1, g2);
disp('Direct linear convolution = ');disp(y) x1 =
1 2 3 4 5 0 0 0 0 x2 =
2 2 0 1 1 0 0 0 0 Linear convolution via circular convolution =
2 6 10 15 21 15 7 9 5 Direct linear convolution =
2 6 10 15 21 15 7 9 5
Q3.39选取两组长的不等的序列重做习题Q3.38。 g1 = [1 2 3 4 5];g2 = [2 2 0 1 1 5]; g1e = [g1 zeros(1,length(g2)-1)]; g2e = [g2 zeros(1,length(g1)-1)]; ylin = circonv(g1e,g2e);
disp('Linear convolution via circular convolution = ');disp(ylin); y = conv(g1, g2);
disp('Direct linear convolution = ');disp(y) x1 =
1 2 3 4 5 0 0 0 0 0 x2 =
2 2 0 1 1 5 0 0 0 0 Linear convolution via circular convolution =
2 6 10 15 21 20 17 24 25 25 Direct linear convolution =
2 6 10 15 21 20 17 24 25 25
Q3.40编写一个MATLAB程序,对两个序列做离散傅里叶变换,以生成他们的线性卷积。用此程序验证习题Q3.38和习题Q3.39的结果。 验证Q3.38:
g1=[1 2 3 4 5]; g2=[2 2 0 1 1];
g1e = [g1 zeros(1,length(g2)-1)]; g2e = [g2 zeros(1,length(g1)-1)]; G1EF=fft(g1e); G2EF=fft(g2e);
ylin=real(ifft(G1EF.*G2EF));
disp('Linear convolution via DFT ='); disp(ylin);
Linear convolution via DFT =
2.0000 6.0000 10.0000 15.0000 21.0000 15.0000 7.0000 9.0000
5.0000 验证Q3.39:
g1=[1 2 3 4 5]; g2=[2 2 0 1 1 5];
g1e = [g1 zeros(1,length(g2)-1)]; g2e = [g2 zeros(1,length(g1)-1)]; G1EF=fft(g1e); G2EF=fft(g2e);
ylin=real(ifft(G1EF.*G2EF));
disp('Linear convolution via DFT ='); disp(ylin);
Linear convolution via DFT =
2.0000 6.0000 10.0000 15.0000 21.0000 20.0000 17.0000 24.0000 25.0000 25.0000
2?5z?1?9z?2?5z?3?3z?4Q3.46使用程序P3.1在单位圆生求下面的z变换:G(z)? ?1?2?3?45?45z?2z?z?zclf;
w = -4*pi:8*pi/511:4*pi;
num = [2 5 9 5 3];den = [5 45 2 1 1]; h = freqz(num, den, w); subplot(2,1,1)
plot(w/pi,real(h));grid
title('Real part of H(e^{j\\omega})') xlabel('\\omega /\\pi'); ylabel('Amplitude'); subplot(2,1,2)
plot(w/pi,imag(h));grid
title('Imaginary part of H(e^{j\\omega})') xlabel('\\omega /\\pi'); ylabel('Amplitude'); pause
subplot(2,1,1)
plot(w/pi,abs(h));grid
title('Magnitude Spectrum |H(e^{j\\omega})|') xlabel('\\omega /\\pi'); ylabel('Amplitude'); subplot(2,1,2)
plot(w/pi,angle(h));grid
title('Phase Spectrum arg[H(e^{j\\omega})]')
xlabel('\\omega /\\pi');
ylabel('Phase in radians');
Q3.47编写一个MATLAB程序,计算并显示零点和极点,计算并显示其因式形式,并产生以z的两个多项式之比的形式表示的z变换的零点图。使用该程序,分析式(3.32)的z变换G(z)。 ?1clf;
num=[2 5 9 5 3]; den=[5 45 2 1 1];
[z,p,k]=tf2zp(num,den); disp('Zeros:'); disp(z);
disp('Poles:'); disp(p);
input('Hit
input('Hit
-1.0000 + 1.4142i -1.0000 - 1.4142i -0.2500 + 0.6614i -0.2500 - 0.6614i Poles:
-8.9576 -0.2718 0.1147 + 0.2627i 0.1147 - 0.2627i Hit
1.0000 2.0000 3.0000 1.0000 1.0000 0.5000 0.5000 1.0000 k =
9.2293 -0.2293 2.4344 0.0822
0.4000
Hit
Q3.48通过习题Q3.47产生的极零点图,求出G(z)的收敛域的数目。清楚地显示所有的收敛域。由极零点图,说明离散时间傅里叶变换是否存在。 答:R1:|z|<0.2718(左边序列,不稳定) R2:0.2718<|z|<0.2866(双边序列,不稳定) R3:0.2866<|z|<8.9576(左边序列,稳定) R4:|z|>8.9576(右边序列,不稳定)
不能从极零点图肯定地说DTFT是否存在,因为其收敛域一定要指定,当收敛域在上述R3内所获得的序列确实证明了DTFT的存在,它是一个具有双面冲击响应的稳定系统。
Q3.50编写一个MATLAB程序,计算一个有理逆z变换的前L个样本,其中L的值由用户通过命令input提供。用该程序计算并画出式(3.32)中G(z)的逆变换的前50个样本。使用命令stem画出由逆变换产生的序列。 clf;
num=[2 5 9 5 3]; den=[5 45 2 1 1];
L=input('Enter the number of samples L:'); [g t]=impz(num,den,L); stem(t,g);
title(['First',num2str(L),'samples of impulse response']); xlabel('Time Index n'); ylabel('h[n]');
实验名称:数字滤波器的频域分析和实现
实验目的:
掌握滤波器的传输函数和频率响应的关系,能够从频率响应和零极点模式分析滤波器特性。掌握滤波器的常用结构。 实验任务:
求滤波器的幅度响应和相位响应,观察对称性,判断滤波器类型,判断稳定性。验证FIR线性相位滤波器的特点。实现数字滤波器的直接型、级联型和并联型结构。 实验内容:
传输函数和频率响应、滤波器稳定性:Q4.1~4.3,Q4.5,Q4.6,Q4.19 线性相位滤波器:Q4.19
数字滤波器结构:Q6.1,Q6.3,Q6.5
数字滤波器仿真:Q8.1,Q 8.3,Q 8.5,Q 8.9,Q 8.10,Q 8.14 实验过程与结果分析:?参见实验一格式?
Q4.1修改程序P3.1,取三个不同的M值,当0???2?时计算并画出式(2.13)所示滑动平均滤波器的幅度和相位谱。证明由幅度和相位谱表现出的对称类型。它表示了哪种类型的滤波器?你现在能解释Q2.1的结果吗? 答:
clf;
w = 0:8*pi/511:2*pi;
M=input('滤波器所需长度='); num = ones(1,M);
y = freqz(num, 1, w)/M; subplot(2,1,1)
plot(w/pi,abs(y));grid
title('Magnitude Spectrum |Y(e^{j\\omega})|') xlabel('\\omega /\\pi'); ylabel('Amplitude'); subplot(2,1,2)
plot(w/pi,angle(y));grid
title('Phase Spectrum arg[Y(e^{j\\omega})]') xlabel('\\omega /\\pi');
ylabel('Phase in radians'); M=2
M=5
M=8
它表示了Ⅱ型滤波器。
Q4.2使用修改后的程序P3.1,计算并画出当0????时传输函数
0.15(1?z?2) H(z)?1?0.5z?1?0.7z?2的因果线性时不变离散时间系统的频率响应。它表示哪种类型的滤波器? 答:clf;
w = 0:8*pi/511:pi;
M=input('滤波器所需长度='); num =[0.15 0 -0.15]; den=[1 -0.5 0.7];
y = freqz(num, den, w)/M; subplot(2,1,1)
plot(w/pi,abs(y));grid
title('Magnitude Spectrum |Y(e^{j\\omega})|') xlabel('\\omega /\\pi'); ylabel('Amplitude'); subplot(2,1,2)
plot(w/pi,angle(y));grid
title('Phase Spectrum arg[Y(e^{j\\omega})]') xlabel('\\omega /\\pi');
ylabel('Phase in radians'); 滤波器所需长度=1
它表示带通滤波器。
Q4.3对下面的传输函数重做习题Q4.2:
0.15(1?z?2) G(z)?0.7?0.5z?1?z?2式(4.36)和式(4.37)给出的两个滤波器之间的区别是什么?你将选择哪一个滤波器来滤波,为什么? clf;
w = 0:8*pi/511:pi;
M=input('滤波器所需长度='); num =[0.15 0 -0.15]; den=[0.7 -0.5 1];
y = freqz(num, den, w)/M; subplot(2,1,1)
plot(w/pi,abs(y));grid
title('Magnitude Spectrum |Y(e^{j\\omega})|') xlabel('\\omega /\\pi'); ylabel('Amplitude'); subplot(2,1,2)
plot(w/pi,angle(y));grid
title('Phase Spectrum arg[Y(e^{j\\omega})]') xlabel('\\omega /\\pi');
ylabel('Phase in radians'); 滤波器所需长度=1
区别在于相位谱,我会选择前者来滤波,因为前者的相位谱相对平缓,后者在通带内有较大的相位突变。
Q4.5使用习题Q3.50中编写的程序,分别计算并画出式(4.36)和式(4.37)确定的两个滤波器的冲激响应中的前100个样本。讨论你的结果。 式(4.36):
clf;
num=[0.15 0 -0.15]; den=[1 -0.5 0.7];
L=input('Enter the number of samples L:'); [g t]=impz(num,den,L); stem(t,g);
title(['First',num2str(L),'samples of impulse response']); xlabel('Time Index n'); ylabel('h[n]');
Enter the number of samples L:100
clf;
num=[0.15 0 -0.15]; den=[0.7 -0.5 1];
L=input('Enter the number of samples L:'); [g t]=impz(num,den,L); stem(t,g);
title(['First',num2str(L),'samples of impulse response']); xlabel('Time Index n'); ylabel('h[n]');
Enter the number of samples L:100
两者反转。
Q4.6使用zplane分别生成式(4.36)和式(4.37)确定的两个滤波器的极零点图。讨论你的结果。 式(4.36):num = [0.15 0 -1]; den = [1 -0.5 0.7]; zplane(num,den);
式(4.36):num = [0.15 0 -1]; den = [0.7 -0.5 1]; zplane(num,den);
两者的零点一样,极点前者在圆内,后者在圆外。 Q4.19运行程序P4.3,生成每一类线性相位有限冲激响应滤波器的冲激响应。每一个有限冲
激响应滤波器的长度是多少?验证冲激响应序列的对称性。接着验证这些滤波器的零点位置。使用MATLAB计算并绘制出这些滤波器的相位响应,验证它们的线性相位特性。这些滤波器的群延迟的多少? (1)
长度分别是9,10,9,10; (2)
Zeros of Type 1 FIR Filter are 2.9744 2.0888 0.9790 + 1.4110i 0.9790 - 1.4110i 0.3319 + 0.4784i 0.3319 - 0.4784i 0.4787 0.3362
Zeros of Type 2 FIR Filter are 3.7585 + 1.5147i 3.7585 - 1.5147i 0.6733 + 2.6623i 0.6733 - 2.6623i -1.0000 0.0893 + 0.3530i 0.0893 - 0.3530i 0.2289 + 0.0922i 0.2289 - 0.0922i
Zeros of Type 3 FIR Filter are 4.7627 1.6279 + 3.0565i
1.6279 - 3.0565i -1.0000 1.0000 0.1357 + 0.2549i 0.1357 - 0.2549i 0.2100
Zeros of Type 4 FIR Filter are 3.4139 1.6541 + 1.5813i 1.6541 - 1.5813i -0.0733 + 0.9973i -0.0733 - 0.9973i 1.0000 0.3159 + 0.3020i 0.3159 - 0.3020i 0.2929 (3) pause
w = -4*pi:8*pi/511:4*pi; h1=freqz(num1,1,w); h2=freqz(num2,1,w); h3=freqz(num3,1,w); h4=freqz(num4,1,w); subplot(2,2,1);
plot(w/pi,angle(h1));grid title('Phase Spectrum') xlabel('\\omega /\\pi');
ylabel('Phase in radians'); grid; title('Type 1 FIR Filter'); subplot(2,2,2);
plot(w/pi,angle(h2));grid title('Phase Spectrum') xlabel('\\omega /\\pi');
ylabel('Phase in radians'); grid; title('Type 2 FIR Filter'); subplot(2,2,3);
plot(w/pi,angle(h3));grid title('Phase Spectrum') xlabel('\\omega /\\pi');
ylabel('Phase in radians'); grid; title('Type 3 FIR Filter'); subplot(2,2,4);
plot(w/pi,angle(h4));grid
title('Phase Spectrum') xlabel('\\omega /\\pi');
ylabel('Phase in radians'); grid; title('Type 4 FIR Filter');
(4) pause
subplot(2,2,1); grpdelay(h1);
title('Type 1 FIR Filter'); subplot(2,2,2); grpdelay(h1);
title('Type 2 FIR Filter'); subplot(2,2,3); grpdelay(h1);
title('Type 3 FIR Filter'); subplot(2,2,4); grpdelay(h1);
title('Type 4 FIR Filter');
Q6.1使用程序P6.1,生成如下有限冲激响应传输函数的一个级联实现:
H1(z)?2?10z?1?23z?2?34z?3?31z?4?16z?5?4z?6
画出级联实现的框图。H1(z)是一个线性相位传输函数吗?
num = input('Numerator coefficient vector = '); den = input('Denominator coefficient vector = '); [z,p,k] = tf2zp(num,den); sos = zp2sos(z,p,k)
Numerator coefficient vector = [2 10 23 34 31 16 4] Denominator coefficient vector = [1 1 1 1 1 1 1] sos =
2.0000 6.0000 4.0000 1.0000 -1.2470 1.0000 1.0000 1.0000 0.5000 1.0000 1.8019 1.0000
1.0000 1.0000 2.0000 1.0000 0.4450 1.0000
Q6.3使用程序P6.1,生成如下因果无限冲激响应传输函数的级联实现:
3?8z?1?12z?2?7z?3?2z?4?2z?5 H1(z)?16?24z?1?24z?2?14z?3?5z?4?z?5画出级联实现的框图。
Numerator coefficient vector = [3 8 12 7 2 -2]
Denominator coefficient vector = [16 24 24 14 5 1] sos =
0.1875 -0.0625 0 1.0000 0.5000 0 1.0000 2.0000 2.0000 1.0000 0.5000 0.2500
1.0000 1.0000 1.0000 1.0000 0.5000 0.5000
Q6.5使用程序P6.2生成式(6.27)所示因果无限冲激响应传输函数的两种不同并联形式实现。画出两种实现的框图。
num = input('Numerator coefficient vector = '); den = input('Denominator coefficient vector = '); [r1,p1,k1] = residuez(num,den); [r2,p2,k2] = residue(num,den); disp('Parallel Form I') disp('Residues are');disp(r1); disp('Poles are at');disp(p1); disp('Constant value');disp(k1); disp('Parallel Form II') disp('Residues are');disp(r2); disp('Poles are at');disp(p2); disp('Constant value');disp(k2);
Numerator coefficient vector = [3 8 12 7 2 -2]
Denominator coefficient vector = [16 24 24 14 5 1] Parallel Form I Residues are
-0.4219 + 0.6201i -0.4219 - 0.6201i 2.3437 0.3437 - 2.5079i 0.3437 + 2.5079i Poles are at
-0.2500 + 0.6614i -0.2500 - 0.6614i
-0.5000 -0.2500 + 0.4330i -0.2500 - 0.4330i Constant value -2
Parallel Form II Residues are
-0.3047 - 0.4341i -0.3047 + 0.4341i -1.1719 1.0000 + 0.7758i 1.0000 - 0.7758i Poles are at
-0.2500 + 0.6614i -0.2500 - 0.6614i -0.5000 -0.2500 + 0.4330i -0.2500 - 0.4330i Constant value
0.1875
Q8.1程序P8.1设计了什么类型的滤波器?其指标是什么?滤波器的阶数是多少?为了验证仿真,需计算多少个冲激响应样本?仿真是正确的吗?
?s?[0.1?,0.8?],Rp?1dB,滤波器类型为IIR带阻滤波器,其指标为?p?[0.4?,0.5?],
Rs?30dB,滤波器阶数为4。需计算的冲激响应样本为2个。仿真正确。
Q8.3生成在习题Q8.1中产生的传输函数的一个级联实现,并编写出一个程序来仿真它,其
中每个单独的部分用一个直接Ⅱ型实现。验证仿真。
format short
num=input('Numerator coefficients='); den=input('Denominator coefficients='); Numfactors=factorize(num); Denfactors=factorize(den);
disp('Numerator Factor'),disp(Numfactors) disp('Denominator Factor'),disp(Denfactors)
Numerator coefficients=[0.0571 0 -0.1143 0 0.0571]
Denominator coefficients=[1 -0.5099 1.2862 -0.335 0.4479] Numerator Factors Columns 1 through 3 1.0000 1.0211 0 1.0000 0.9793 0 1.0000 -1.0211 0 1.0000 -0.9793 0 Denominator Factors Columns 1 through 3
1.0000 -0.5976 0.6785 1.0000 0.0877 0.6601
Q8.5生成在习题Q8.1中产生的传输函数的一个并联Ⅰ型实现,并编写出一个程序来仿真它,其中每个单独的部分用一个直接Ⅱ型实现。验证仿真。
num=input('Numerator coefficient vector='); den=input('Denominator coefficient vector='); [r1,p1,k1]=residuez(num,den); [r2,p2,k2]=residue(num,den); disp('Parallel Form 1') disp('Residues are');disp(r1); disp('Poles are at');disp(p1); disp('Constant value');disp(k1); disp('Parallel Form 2') disp('Residues are');disp(r2); disp('Poles are at');disp(p2); disp('Constant value');disp(k2); [b1,a1]=residuez(R1,P1,0); R1=[r1(1) r1(2) r1(3) r1(4)]; P1=[p1(1) p1(2) p1(3) p1(4)]; disp('b1=');disp(b1); disp('a1=');disp(a1);
Numerator coefficient vector=[0.0571 0 -0.1143 0 0.0571]
Denominator coefficient vector=[1 -0.5099 1.2862 -0.335 0.4479] Parallel Form 1 Residues are
-0.0235 + 0.1977i
-0.0235 - 0.1977i -0.0117 - 0.2130i -0.0117 + 0.2130i
Poles are at
0.2988 + 0.7676i 0.2988 - 0.7676i -0.0439 + 0.8113i -0.0439 - 0.8113i
Constant value 0.1275
Parallel Form 2 Residues are
-0.1588 + 0.0411i -0.1588 - 0.0411i 0.1734 - 0.0002i 0.1734 + 0.0002i
Poles are at
0.2988 + 0.7676i 0.2988 - 0.7676i -0.0439 + 0.8113i -0.0439 - 0.8113i
Constant value
0.0571 b1=
-0.0470 -0.2895 a1=
1.0000 -0.5976
Q8.9程序P8.3设计了什么类型的滤波器?其指标是什么?滤波器的阶数是多少?形成输入的正弦序列的频率是多少?
IIR低通椭圆滤波器,指标为?p?0.25?,?s?0.55?,Rp?0.5dB,Rs?50dB,阶数为8,输入的正弦序列的频率为f=0.7kHz。
Q8.10运行程序P8.3并产生两个图形。哪种输入成分会在滤波器输出出现?为什么输出序列的开始部分不是一种理想的正弦序列?修改程序P8.3,以便只过序列X2[n]。产生的输出序列和预料一样吗?证明你的答案。
Input Sequence420-2-4051015202530Time index nOutput Sequence35404550AmplitudeAmplitude420-2-4051015202530Time index n35404550
答:产生的输出序列和预料是不一样的。
Q8.14程序P8.4设计了什么类型的滤波器?其指标是什么?滤波器的阶数是多少?为了验证仿真,需计算多少个冲激响应样本?仿真是正确的吗?
FIR低通滤波器,指标为?p?[0,0.3?],?s?[0.5?,?],阶数为9,为了验证仿真需计算的冲激响应样本为10个。仿真正确。
实验名称:数字滤波器的设计
实验目的和任务:
(1)用窗口法设计满足指标的FIR数字滤波器。 (2)以模拟低通滤波器为原型设计IIR数字滤波器
(3)选定一个信号滤波问题,设计数字滤波器,验证滤波效果。
实验内容:
阅读Page 91-93相应的函数和程序P7.1,完成Q7.1, Q7.5,Q7.6 阅读Page 94-96相应的函数, 完成Q7.9,Q7.13,Q7.14,Q7.20 sinc函数的功能与使用,可通过help查询:
Matlab-Help-Search-Function Name-输入sinc 实验指导书Page 49有sinc函数使用实例
幅度响应的分析:
通过DTFT定义计算幅度响应 通过freqz函数分析
实验过程与结果分析:?参见实验一格式?
Q7.1用MATLAB确定一个数字无限冲击响应低通滤波器所有四种类型的最低阶数。指标如下:40kHz的抽样率,4kHz的通带边界频率,8kHz的阻带边界频率,0.5dB的通带波纹,40dB的最小阻带衰减。评论你的结果。
解:FT=40kHz,Fp=4kHz,Fs=8kHz,Rp=0.5dB,Rs=40dB。
?p?2?FpFT2??4?103??0.2? 340?10Wp??p?0.2 ?2?Fs2??8?103?s???0.4? 3FT40?10Ws??s?0.4 ?(1)巴特沃兹滤波器:
[N,Wn]=buttord(0.2,0.4,0.5,40)
运行结果: N = 8 Wn =
0.2469
答:最低阶数是8.
(2)切比雪夫1型滤波器:
[N,Wn]=cheb1ord(0.2,0.4,0.5,40)
运行结果: N =
5 Wn =
0.2000
答:最低阶数是5.
(3)切比雪夫2型滤波器:
[N,Wn]=cheb2ord(0.2,0.4,0.5,40)
运行结果: N = 5 Wn =
0.4000
答:最低阶数是5. (4)椭圆滤波器:
[N,Wn]=ellipord(0.2,0.4,0.5,40)
运行结果: N = 4 Wn =
0.2000
答:最低阶数是4.
Q7.5通过运行程序P7.1来设计巴特沃兹带阻滤波器。写出所产生的传输函数的准确表达式。滤波器的指标是什么?你的设计符合指标吗?使用MATLAB,计算并绘制滤波器的未畸变的相位响应及群延迟响应。 MATLAB程序:
Ws = [0.4 0.6]; Wp = [0.2 0.8]; Rp = 0.4; Rs = 50; [N1, Wn1] = buttord(Wp, Ws, Rp, Rs); [num,den] = butter(N1,Wn1,'stop');
disp('Numerator Coefficients are ');disp(num); disp('Denominator Coefficients are ');disp(den); [g, w] = gain(num,den); plot(w/pi,g);grid axis([0 1 -60 5]);
xlabel('\\omega /\\pi'); ylabel('Gain in dB');
title('Gain Response of a Butterworth Bandstop Filter');
运行结果:
Numerator Coefficients are
0.0493 0.0000 0.2465 0.0000 0.4930 0.0000 0.4930 0.0000 0.2465 0.0000 0.0493 Denominator Coefficients are
1.0000 0.0000 -0.0850 0.0000 0.6360 0.0000 -0.0288 0.0000 0.0561 0.0000 -0.0008
0.0493?0.2465z?2?0.493z?4?0.493z?6?0.2465z?8?0.0493z?10表达式:H(z)?
1?0.085z?2?0.636z?4?0.0288z?6?0.0561z?8?0.0008z?10指标:?p1?0.2?,?p2?0.8?,?s1?0.4?,?s2?0.6?,Rp?0.4dB,Rs?50dB。
编写的MATLAB程序如下(计算未畸变的相位响应及群延迟响应):
% Program Q7_6
Ws = [0.4 0.6]; Wp = [0.2 0.8]; Rp = 0.4; Rs = 50; % Estimate the Filter Order
[N1, Wn1] = buttord(Wp, Ws, Rp, Rs); % Design the Filter
[num,den] = butter(N1,Wn1,'stop');
% Find the frequency response; find and plot unwrapped phase wp = 0:pi/1023:pi; wg = 0:pi/511:pi; Hz = freqz(num,den,wp); Phase = unwrap(angle(Hz)); figure(1);
plot(wp/pi,Phase); grid;
% axis([0 1 a b]);
xlabel('\\omega /\\pi'); ylabel('Unwrapped Phase (rad)');
title('Unwrapped Phase Response of a Butterworth Bandstop Filter'); % Find and plot the group delay GR = grpdelay(num,den,wg); figure(2); plot(wg/pi,GR); grid;
%axis([0 1 a b]);
xlabel('\\omega /\\pi'); ylabel('Group Delay (sec)');
title('Group Delay of a Butterworth Bandstop Filter');
Q7.6修改程序P7.1来设计符合习题Q7.1所给指标的切比雪夫1型低通滤波器。写出所产生的传输函数的准确表达式。你的设计符合指标吗?使用MATLAB,计算并绘制滤波器的未畸变的相位响应及群延迟响应。
修改P7.1程序:
[N, Wn] = cheb1ord(0.2,0.4,0.5,40);Rp=0.5;
[num,den] = cheby1(N,Rp,Wn);[g, w] = Gain(num,den); % Plot the gain response figure(1);
plot(w/pi,g);grid; axis([0 1 -60 5]);
xlabel('\\omega /\\pi'); ylabel('Gain in dB');
title('Gain Response of a Type 1 Chebyshev Lowpass Filter'); figure(2);
w2 = 0:pi/511:pi;
Hz = freqz(num,den,w2); Phase = unwrap(angle(Hz)); plot(w2/pi,Phase);grid;
xlabel('\\omega /\\pi'); ylabel('Unwrapped Phase (rad)'); title('Unwrapped Phase Response of a Type 1 Chebyshev Lowpass Filter'); % Find and plot the group delay figure(3);
GR = grpdelay(num,den,w2); plot(w2/pi,GR);grid;
xlabel('\\omega /\\pi'); ylabel('Group Delay (sec)');
title('Group Delay of a Type 1 Chebyshev Lowpass Filter');
Gain Response of a Type 1 Chebyshev Lowpass Filter0-10-20Gain in dB-30-40-50-6000.10.20.30.40.5? /?0.60.70.80.91