大家好,又见面了,我是你们的朋友全栈君。
-
问题重述
DSP课程实验
- 计算机模拟产生多频率信号:
- 编写通用的FFT子程序
- 设置参数,对信号进行频谱分析
- 对信号分别以满足和不满足奈奎斯特采样定理的采样率进行采样,观察其频谱变化
- 设计低通、高通、带通和带阻滤波器,对多频率信号进行滤波处理
- 撰写实验报告,内容包括实验步骤、流程图、源程序、设置参数、输出结果(图)、结果分析(结合原理)
例如:模拟信号:
用一个FFT处理器对其进行频谱分析,要求能分辨所有的频率分量,则
- 1)最小信号记录长度应为多少?
- 2)采样频率至少为多少?
- 3)若采样频率为100Hz,则采样点数应取几点;
- 4)若采样频率为50Hz,则频谱分析得到的信号频率分量有哪些?是否与信号实际频率分量一致?为什么?
-
实验目的
- 实验所需知识覆盖离散傅里叶变换、数字滤波器设计、信号抽取与插值恢复、奈奎斯特定理等内容,通过实验加深对DSP课程内容的理解,巩固所学知识。
- 学会利用计算机编写通用FFT程序,对连续信号频谱波形进行分析。
- 学会应用DFT分析数字信号处理中常见问题及探寻解决方法。
- 熟悉高级程序语言的使用方法,包括常见函数的使用,图形绘制,多种库的调用和参数的调节。
- 增强在DSP方面的动手能力和自学能力。
-
问题分析
按照题目要求,首先应利用计算机生成一个由多个频率叠加而成的信号。之后在不通风抽样频率之下对信号进行采样。编写FFT程序对信号进行DFT变换,应能观察出在满足和不满足奈奎斯特采样定理的情况下信号频谱分别处于不混叠和混叠状态。然后需要对信号进行恢复以观察满足或不满足奈奎斯特采样定理的情况下,频域的频谱混叠对时域恢复信号的影响。在频谱混叠时,观察其时域信号的失真。
在满足奈奎斯特采样定理的情况下,分别用数字低通、高通、带通和带阻滤波器对要求信号进行滤波处理,观察其频域的变化和时域波形变化。
本实验主要实现对时域信号的采样(A/D转换),滤波(数字信号处理),以及信号的插值恢复(D/A转换)等步骤。
-
实验原理
数字信号的傅里叶变换,通常采用离散傅里叶变换(DFT)方法。但是DFT存在的不足就是计算量太大,很难进行实时处理。计算一个N点的DFT,一般需要N²次复数乘法和N(N-1)次复数加法运算。因此,当N较大或要求对信号进行实时处理时,往往难以实现所需运算速度。FFT是一种DFT的高效算法,它根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。
DFT的运算为:
由这种方法计算DFT对于 的每个K值,需要进行4N次实数相乘和(4N-2)次相加,对于N个k值,共需4N*N次实数相乘和(4N-2)*N次实数相加。改进DFT算法,减小它的运算量,利用DFT中 的周期性和对称性,使整个DFT的计算变成一系列迭代运算,可大幅度提高运算过程和运算量,这就是FFT的基本思想。FFT对于在计算机系统或者说数字系统中应用离散傅立叶变换,是很大改进。
有限长离散信号x(n),n=0,1,…,N-1的DFT定义为:
可以看出,DFT需要计算大约N2次乘法和N2次加法。当N较大时,这个计算量是很大的。利用WN的对称性和周期性,将N点DFT分解为两个N/2点的 DFT,这样两个N/2点DFT总的计算量只是原来的一半,即(N/2)2+(N/2)2=N2/2,这样可以继续分解下去,将N/2再分解为N/4点 DFT等。对于N=2m 点的DFT都可以分解为2点的DFT,这样其计算量可以减少为(N/2)log2N次乘法和Nlog2N次加法。图为FFT与DFT-所需运算量与计算点数的关系曲线。由图可以明显看出FFT算法的优越性。
将x(n)分解为偶数与奇数的两个序列之和,即
x1(n)和x2(n)的长度都是N/2,x1(n)是偶数序列,x2(n)是奇数序列,则
其中X1(k)和X2(k)分别为x1(n)和x2(n)的N/2点DFT。由于X1(k)和X2(k)均以N/2为周期,且WN k+N/2=-WN k,所以X(k)又可表示为:
上式的运算可以用图2表示,根据其形状称之为蝶形运算。依此类推,经过m-1次分解,最后将N点DFT分解为N/2个两点DFT。图3为8点FFT的分解流程。
FFT算法的原理是通过许多小的更加容易进行的变换去实现大规模的变换,降低了运算要求,提高了与运算速度。FFT不是DFT的近似运算,它们完全是等效的。
-
流程图
DSP系统的基本组成
实验主要步骤流程图
-
实验步骤
-
计算机模拟产生多频率信号,取五个周期图像
以两倍奈奎斯特频率抽样
对采样信号进行FFT运算
取低频观察频谱特性
对离散频域进行傅里叶反变换得到时域抽样信号并与愿信号比较
为了得到原不失真信号,对反变换得到的信号进行零值插入(每两个取样值之间插入7个零)
进行傅里叶变换获得周期延拓的频谱
通过截至频率为抽样点N一半N/2的理想低通滤波器
显示1/16观察低频
进行傅里叶反变换得到还原的时域波形
通过数字低通butterworth滤波器(截止频率10HZ)
通过数字高通butterworth滤波器(截至频率30HZ)
通过数字带通butterworth滤波器(截止频率(10HZ、30HZ)
通过数字带阻butterworth滤波器(截止频率(10HZ、30HZ)
-
组别参数
奈奎斯特定理验证与信号恢复
组别 |
频率(f1,f2,f3) |
振幅(A1,A2,A3) |
信号记录长度(NT) |
抽样频率 |
通过滤波器类型 |
第一组 |
(5,20,40) |
(1.5,2,-1) |
5 |
160HZ |
无 |
第二组 |
(5,20,40) |
(1.5,2,-1) |
3 |
160HZ |
无 |
第三组 |
(5,20,40) |
(1.5,2,-1) |
3 |
50HZ |
无 |
第四组 |
(5,20,40) |
(1.5,2,-1) |
3 |
80HZ |
无 |
第五组 |
(5,20,40) |
(1.5,2,-1) |
3 |
100HZ |
无 |
第六组 |
(5,20,40) |
(1.5,2,-1) |
3 |
320HZ |
无 |
信号通过理想滤波器
组别 |
频率(f1,f2,f3) |
振幅(A1,A2,A3) |
信号记录长度(NT) |
抽样频率 |
通过滤波器类型 |
|
|||||
第七组 |
(5,20,40) |
(1.5,2,-1) |
3 |
160HZ |
低通(f<10HZ) |
||||||
第八组 |
(5,20,40) |
(1.5,2,-1) |
3 |
160HZ |
高通 (f>30HZ) |
||||||
第九组 |
(5,20,40) |
(1.5,2,-1) |
3 |
160HZ |
带通 (10HZ<f<30HZ) |
||||||
第十组 |
(5,20,40) |
(1.5,2,-1) |
3 |
160HZ |
带阻 (f<10HZ|f>30HZ) |
||||||
信号通过butterworth滤波器
组别 |
频率(f1,f2,f3) |
振幅(A1,A2,A3) |
信号记录长度(NT) |
抽样频率 |
通过滤波器类型 |
|
||||
第十一组 |
(5,20,40) |
(1.5,2,-1) |
3 |
160HZ |
低通(f<10HZ) |
|||||
第十二组 |
(5,20,40) |
(1.5,2,-1) |
3 |
160HZ |
高通 (f>30HZ) |
|||||
第十三组 |
(5,20,40) |
(1.5,2,-1) |
3 |
160HZ |
带通 (10HZ<f<30HZ) |
|||||
第十四组 |
(5,20,40) |
(1.5,2,-1) |
3 |
160HZ |
带阻 (f<10HZ|f>30HZ) |
|||||
-
输出结果(图)
第一组输出结果图(实验步骤例):
第二组输出结果图
第三组输出结果图
第四组输出结果图
第五组输出结果图
第六组输出结果图
第七组输出结果图(通过理想低通滤波器)
第八组输出结果图(通过理想高通滤波器)
第九组输出结果图(通过理想带通滤波器10HZ~30HZ)
第十组输出结果图(通过理想带阻滤波器,阻带10~30hz)
第十一组输出结果图(通过10HZ butterworth低通滤波器)
第十二组输出结果图(通过30HZ butterworth高通滤波器)
第十三组输出结果图(通过10~30HZ butterworth带通滤波器)
第十四组输出结果图(通过10~30HZ butterworth带阻滤波器)
-
结果分析
组别 |
频率(f1,f2,f3) |
振幅(A1,A2,A3) |
信号记录长度(NT) |
抽样频率 |
是否混叠失真 |
第一组 |
(5,20,40) |
(1.5,2,-1) |
5 |
160HZ |
否 |
第二组 |
(5,20,40) |
(1.5,2,-1) |
3 |
160HZ |
否 |
第三组 |
(5,20,40) |
(1.5,2,-1) |
3 |
50HZ |
是 |
第四组 |
(5,20,40) |
(1.5,2,-1) |
3 |
80HZ |
是 |
第五组 |
(5,20,40) |
(1.5,2,-1) |
3 |
100HZ |
否 |
第六组 |
(5,20,40) |
(1.5,2,-1) |
3 |
320HZ |
否 |
对前六组实验结果图像的对比分析可得,抽样频率不大于奈奎斯特抽样频率,即两倍最高频率分量时,频谱发生混叠,产生混叠失真。由第三组,第四组可以看出,频域产生混叠,重建信号时域波形发生严重失真。其他各组无失真。即验证了奈奎斯特抽样定理。
组别 |
频率(f1,f2,f3) |
振幅(A1,A2,A3) |
抽样频率 |
通过滤波器类型 |
第一组 |
(5,20,40) |
(1.5,2,-1) |
160HZ |
无 |
第七组 |
(5,20,40) |
(1.5,2,-1) |
160HZ |
理想低通 (f<10HZ) |
第十一组 |
(5,20,40) |
(1.5,2,-1) |
160HZ |
butterworth低通 (f<10HZ) |
第八组 |
(5,20,40) |
(1.5,2,-1) |
160HZ |
理想高通 (f>30HZ) |
第十二组 |
(5,20,40) |
(1.5,2,-1) |
160HZ |
butterworth高通 (f>30HZ) |
第九组 |
(5,20,40) |
(1.5,2,-1) |
160HZ |
理想带通 (10HZ<f<30HZ) |
第十三组 |
(5,20,40) |
(1.5,2,-1) |
160HZ |
butterworth带通 (10HZ<f<30HZ) |
第十组 |
(5,20,40) |
(1.5,2,-1) |
160HZ |
理想带阻 (f<10HZ|f>30HZ) |
第十四组 |
(5,20,40) |
(1.5,2,-1) |
160HZ |
butterworth带阻 (f<10HZ|f>30HZ) |
对于经过滤波器的组别和第一组比较,可以看出信号通过各个滤波器之后频域的变化,同时观测重建信号的时域可以看出信号通过高通、低通、带通、带阻滤波器后信号波形变化。可以依此看出,对于不同需求、可采用不同形式滤波器。对比理想滤波器和5阶butterworth滤波器的输出结果可已看出butterworth滤波器的滤波结果与理想滤波器的输出结果存在不同,其频谱变化较理想滤波器而言有一个过渡带宽,且阻带衰减不是理想值。与所学内容相吻合,验证了数字滤波器的内容。
-
题目解答
模拟信号:
用一个FFT处理器对其进行频谱分析,要求能分辨所有的频率分量,则
- 1)最小信号记录长度应为多少?
- 2)采样频率至少为多少?
- 3)若采样频率为100Hz,则采样点数应取几点;
- 4)若采样频率为50Hz,则频谱分析得到的信号频率分量有哪些?是否与信号实际频率分量一致?为什么?
答:
- 最小信号记录长度应至少包含一个信号周期,xa(t)中三个信号分量频率分别为5HZ、20HZ、40HZ,故频率分辨率为5HZ,则xa(t)的最小周期T0为0.20s。即最小信号记录长度应为0.20s。
- 采样频率应大于奈奎斯特频率,xa(t)中三个信号分量频率分别为5HZ、20HZ、40HZ,则xa(t)的信号分量的最大频率为40HZ,即采样频率fs至少为80HZ。
- 采样点数N = T0/T,T0 = 0.2s,若频率为100HZ则T = 1/fs = 0.01s。则N = 20,由N = 2^L,则L取5时N取最小值32。即,采样点数应取32点。
- 若采样频率为50HZ,则信号频率分量有5HZ、10HZ、20HZ,因不满足奈奎斯特定理,频谱发生混叠,产生了新的频率分量10HZ,其为周期延拓吼-40HZ的频率分量出现在折叠频率(25HZ)范围内的误检分量。如实验第三组数据频谱图像所示。频谱混叠,对应的波形图发生失真。50HZ抽样对应结果如下图所示。
-
实验源码及实验详细步骤
实验平台 Jupyter Notebook
实验语言 Python
实验所运用科学计算库 numpy scipy signal
实验所运用绘图库matplotlib seaborn
实验源码:
见我的下载区
https://download.csdn.net/download/weixin_42733218/10942392
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/128937.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...