本科实验报告
实验名称:信号与信息处理实验(Ⅱ)
2018-2019-2
第 9,11 周 周一 3-5 节
第 15 周 周五 3-5 节
良乡图书馆
四层一号机房
√ 原理验证
□ 综合设计
□ 自主创新
课程名称:
任课教师:
数字信号处理
实验时间:
林艳飞
实验地点:
实验教师:
林艳飞/何冰松
学生姓名:
学号/班级:
学 院:
专 业:
实验类型:
组 号:
信息与电子学院
同组搭档:
电子信息工程
成 绩:
目 录
实验 1 利用 DFT 分析信号频谱 ······································································ 1
一、 实验目的 ·············································································································· 1
二、 实验原理 ·············································································································· 1
1. DFT 与 DTFT 的关系 ······················································································ 1
2. 利用 DFT 求 DTFT ·························································································· 1
3. 利用 DFT 分析连续时间信号的频谱 ······························································ 1
4. 可能用到的 MATLAB 函数与代码 ································································· 2
三、 实验内容 ·············································································································· 2
实验 2 利用 FFT 计算线性卷积 ······································································ 9
一、 实验目的 ·············································································································· 9
二、 实验原理 ·············································································································· 9
1. 线性卷积与圆周卷积 ·············································································· 9
2. 快速卷积 ································································································ 9
3. 分段卷积 ································································································ 9
4. 可能用到的 MATLAB 函数 ·································································· 10
三、 实验内容 ············································································································· 11
实验 3 IIR 数字滤波器设计 ··········································································· 16
一、 实验目的 ············································································································· 16
二、 实验原理 ············································································································· 16
1. 数字滤波器和模拟滤波器的一些指标 ··················································· 16
2. 模拟原型滤波器 ··················································································· 16
3. 模拟滤波器到数字滤波器的变换 ·························································· 21
4. 直接利用 MATLAB 函数设计设计 IIR 数字滤波器 ······························ 23
三、 实验内容 ············································································································· 24
实验 4 FIR 数字滤波器设计 ·········································································· 32
一、 实验目的 ············································································································· 32
二、 实验原理 ············································································································· 32
1. 线性相位 FIR 数字滤波器 ···································································· 32
2. 窗函数法设计 FIR 数字滤波器 ···························································· 33
3. 频率取样法设计 FIR 数字滤波器 ························································· 34
4. 利用 MATLAB 设计 FIR 数字滤波器 ··················································· 35
三、 实验内容 ············································································································· 36
收获和体会 ······································································································ 51
i
一、实验目的
实验 1 利用 DFT 分析信号频谱
1. 加深对 DFT 原理的理解。
2. 应用 DFT 分析信号的频谱。
3. 深刻理解利用 DFT 分析信号频谱的原理,分析实现过程中出现的现象及解决方法。
二、实验原理
1. DFT 与 DTFT 的关系
有限长序列
的 点 DFT——
即序列
上的样本。
2. 利用 DFT 求 DTFT
方法 1:由
恢复出
由上图
进而有
其中内插函数
的 DTFT——
上的 个取样值可表示为
在频率区间
内的 个等间隔分布的点
(1-1)
即为序列
的 DTFT 在 个等间隔频率点
的方法如图 1-1 所示
图 1-1 由 N 点 DFT 恢复 DTFT 的流程
(1-2)
(1-3)
(1-4)
方法 2:(常用于 MATLAB 计算)由于 DFT 是 DTFT 的取样值,其相邻两个频率样本点的间距为
,所以
如果增加数据的长度 ,所得到的 DFT 谱线就更加精细,其包络就越接近 DTFT 的结果,这样就可以利用
DFT 来近似计算 DTFT。如果没有更多的数据,可以通过补零来增加数据长度。
3. 利用 DFT 分析连续时间信号的频谱
采用计算机分析连续时间信号的频谱,第一步就是把连续时间信号离散化,这里需要进行两个操作:一是
采样,二是截断。
对于连续时间非周期信号
,按采样间隔 进行采样,截取长度为 ,那么
对
进行 点频域采样,有
(1-5)
(1-6)
实验 1 利用 DFT 分析信号频谱
1
因此,用 DFT 分析连续时间非周期信号频谱的步骤为
1) 确定时域采样间隔 ,得到离散时间序列
2) 确定截取长度 ,得到 点离散序列
;
3) 确定频域采样点数 ,要求
4) 利用 FFT 计算离散序列的 点 DFT,得到
5) 根据式(1-6)由
计算
;
,这里
为窗函数;
;
采样点的近似值。
采用上述方法计算
的频谱,需要注意如下三个问题:
1) 频谱混叠。如果不满足采样定理的条件,频谱会出现混叠误差。对于频谱无限宽的信号,应考虑覆盖大部分
主要频率分量的范围。
2) 栅栏效应和频谱分辨率。使用 DFT 计算频谱,得到的结果只是 个频谱样本值,样本值之间的频谱是未知
的,像通过一个栅栏观察频谱,称为“栅栏效应”。频谱分辨率与记录长度成反比,要提高频谱分表率,就要
增加记录时间。
3) 频谱泄露。对信号截断会把窗函数的频谱引入信号频谱,照成频谱泄露。解决这个问题的主要办法是采用旁
瓣小的窗函数,频谱泄露和窗函数均会引起误差。
因此,要合理选取采样间隔和截取长度,必要时还需考虑加适当的窗。
对于连续时间周期信号,我们在采用计算机进行计算时,也总是要进行截断,序列总是有限长的,仍然可
以采用上述方法近似计算。
4. 可能用到的 MATLAB 函数与代码
①DFT 运算:可采用 MATLAB 中提供的 fft 函数来实现。
②DTFT 运算:可采用 MATLAB 矩阵运算的方法进行计算
三、实验内容
1. 已知
(1-7)
区间的波形。
①计算其 DTFT,并画出
②计算其 4 点 DFT,并把结果显示在①所画的图形中。
③对
④根据实验结果,分析是否可以由 DFT 计算 DTFT。如果可以,如何实现?
代码如下:
补零,计算 64 点 DFT,并显示结果。
x = [2 -1 1 1];n = 0:length(x)-1;
w = -1.5*pi:0.01:2.5*pi;X = x*exp(-j*n'*w);
%计算DFT
N = input('请输入DFT的点数:');
Xk = fft(x,N);
n1 = 0:N-1;
k = 2*pi*n1/N;
%构造序列x(n)
%计算DTFT
%计算x(n)的DFT,不足N位自动补零
%DFT中的k等于DTFT中的2*pi/N*n
实验 1 利用 DFT 分析信号频谱
2
%绘制图例并置于左下角
%绘制相位谱
%绘制DTFT的幅度谱
%绘制DFT的幅度谱
%绘制x=-π
%绘制x=π
subplot(211);
plot(w,abs(X));hold on;
stem(k,abs(Xk),'filled');hold on;
plot([-pi -pi],ylim,'--');hold on;
plot([pi pi],ylim,'--');hold off;
title (['DFT(when $N$=',num2str(N),') and DTFT Magnitude of $x(n)$'],...
'Interpreter','latex');
xlabel('$\omega (k=\frac{\omega N}{2\pi})$','Interpreter','latex');
ylabel('Magnitude','Interpreter','latex');
set(gca,'Fontname','Latin Modern Math');
xlim([-1.1*pi 2.1*pi]);
legend({'DTFT of $x(n)$','DFT of $x(n)$','$x=-\pi$','$x=\pi$'},...
'Location','southwest','Interpreter','latex');
subplot(212);
plot(w,angle(X));hold on;
stem(k,angle(Xk),'filled');hold on;
plot([-pi -pi],ylim,'--');hold on;
plot([pi pi],ylim,'--');hold off;
title (['DFT(when $N$=',num2str(N),') and DTFT Phase of $x(n)$'],...
'Interpreter','latex');
xlabel('$\omega (k=\frac{\omega N}{2\pi})$','Interpreter','latex');
ylabel('Phase','Interpreter','latex');
set(gca,'Fontname','Latin Modern Math');
xlim([-1.1*pi 2.1*pi]);
legend({'DTFT of $x(n)$','DFT of $x(n)$','$x=-\pi$','$x=\pi$'},...
'Location','southwest','Interpreter','latex');
%绘制幅度谱
%绘制DTFT的相位谱
%绘制DFT的相位谱
%绘制x=-π
%绘制x=π
%绘制图例并置于左下角
当分别从键盘键入
时的结果:
4
3
2
1
0
2
1
0
-1
-2
-3
-2
-1
-3
-2
-1
0
0
1
1
2
2
3
3
4
4
5
5
6
6
实验 1 利用 DFT 分析信号频谱
3
4
3
2
1
0
2
1
0
-1
-2
-3
-2
-1
-3
-2
-1
0
0
1
1
2
2
分析是否可以由 DFT 计算 DTFT:
序列
的 4 点 DFT
64 点 DFT(通过对
补零得 64 位长度)
6
6
3
3
4
4
5
5
由
的 4 点、64 点 DFT 和
的 DTFT 的在 MATLAB 中显示的结果可以看出,
是
的取样。
且随着
的长度 通过补零增长,DFT 的点数 在变多,采样间隔
特征点越来越多,栅栏效应随之减弱,这样就可以很好地保留
DTFT。
在变小,
的
的更多关键信息,因此可以由 DFT 计算
保留
此外,序列的 DFT 可以看成是将序列
做周期延拓后求 DFS 取主周期后的结果,随着
的长度通
过补零增长,周期延拓后的序列
的周期性降低。由于在域变换中,周期性和离散性互为对应,
的周期
的离散性也在减弱。当 趋于无穷时,
性减弱,
故可以由 DFT 计算 DTFT。
就趋于连续,即
2. 考察序列
①
时,用 DFT 估计
的频谱;将
补零加长到长度为 100 点序列,用 DFT 估计
的频谱。
要求画出相应波形。
时,用 DFT 估计
②
③根据实验结果,分析怎样提高频谱分辨率。
问题分析:
由序列
的频谱,并画出波形。
知其最高频率
。考虑频谱混叠,由
Shannon 采样定理,采样频率
时不会出现频谱混叠。离散时间信号
可以看成是对
以采样频率
进行 n 点采样后得到的。考虑频谱泄露,当信号
的
频率 是
的整数倍(N 为采样点数,在程序中以 n 表征),即
实验 1 利用 DFT 分析信号频谱
4
也即
时不会发生频谱泄露。故对①,取
最小记录长度
代码如下:
;对②,取
。
n = 0:input('请输入采样点数 n=')-1;
N = input('请输入 DFT 的点数 N=');
k = 0:N-1;
x = cos(0.48*pi*n)+cos(0.52*pi*n);
Xk = fft(x,N);
stem(abs(Xk),'filled');
title (['DFT Magnitude of $x(n)(0\leq n\leq$',num2str(max(n)),...
') when $N=$',num2str(N)],'Interpreter','latex');
xlabel('$k$','Interpreter','latex');ylabel('Magnitude','Interpreter','latex');
set(gca,'Fontname','Latin Modern Math');
%计算 x(n)的 DFT,不足 N 位自动补零
%绘制幅度谱
当分别从键盘键入
时的结果:
0
20
40
60
80
100
10
8
6
4
2
0
60
50
40
30
20
10
0
0
50
100
150
分析怎样提高频谱分辨率:
当
时,取样率不够高,记录长度小于最小记录长度 ,导致信号的频谱发生混叠。当
时,保
证了不发生频谱混叠,所得的频谱比较完美。并且通过补零后,频谱更多的分量被展现了出来。
综上,提高频谱分辨率的前提是采样频率满足 Shannon 采样定理,而后可以通过增加采样点数的方式提高
频谱分辨率,但补零只能细化频谱间隔,提高频谱密度,不能提高频谱分辨率。
实验 1 利用 DFT 分析信号频谱
5
3. 已知信号
,其中
。从 的表达式可以看出,它包含三
个频率的正弦波。但是,从其时域波形(图 E1-1)来看,似乎是一个正
弦信号。利用 DFT 做频谱分析,确定适合的参数,使得到的频谱的
频率分辨率符合需要。
问题分析:
由信号
最高频率
样频率
的频率 是
知其
。考虑频谱混叠,由 Shannon 采样定理,采
时不会出现频谱混叠。考虑频谱泄露,当信号
的整数倍,即
也即
时不会发生频谱泄露。
最小记录长度
代码如下:
图 E1- 1
n = 0:input('请输入采样点数 n=')-1;k = n;
fs = input('请输入采样频率 fs=');
[f1,f2,f3] = deal(1,2,3);
x = 0.15*sin(2*pi*f1*n/fs)+sin(2*pi*f2*n/fs)-0.1*sin(2*pi*f3*n/fs);
Xk = fft(x);
stem(k,abs(Xk),'filled');
title (['DFT Magnitude of $x(n)(0\leq n\leq$',num2str(max(n)),')',newline,...
'when $N=$',num2str(max(n)+1),',$f_s$=',num2str(fs)],'Interpreter','latex');
xlabel('$k$','Interpreter','latex');
ylabel('Magnitude','Interpreter','latex');
set(gca,'Fontname','Latin Modern Math');
%计算 x(n)的 N 点 DFT,不足 N 位自动补零
%绘制幅度谱
当从键盘键入
时的结果:
MATLAB 运行结果
结果分析
X 2
Y 10
X 3
Y 1
10
8
6
4
X 1
2
Y 1.5
0
0
5
10
15
20
从频谱分析的结果来看,
的主要频
率分量分别在
的采样频率
的时候取到。此时
,则对应的时域频率由
求出分别为
知 确实含有
但由于
。故由频谱分析
三个频率分量。
的分量较大,因此
的时域波形是类似
正弦波的形式。并且
注意到 的时域波形的峰值在 1 附近波动,
这些波动就是由两外两个频率分量引起的。
实验 1 利用 DFT 分析信号频谱
6