FFT_频谱分析(数字信号处理)

简介: 用FFT对信号作频谱分析是学习数字信号处理的重要内容。经常需要进行谱分析的信号是模拟信号和时域离散信号。对信号进行谱分析的重点在于频谱分辨率及分析误差。频谱分辨率D和频谱分析的点数N直接相关,其分辨率为2π/N 。因此2π/N≤D,可以据这个公式确定频率的分辨率。FFT分析频谱的误差在于得到的是离散谱,而信号(非周期信号)是连续谱,只有当N较大时,离散谱的包络才能逼近于连续谱。因此N要适当选择大一些。周期信号的频谱是离散谱,只有用整数倍周期的长度作FFT,得到的离散谱才能代表周期信号的频谱。如果不知道信号周期,可以尽量选择信号的观察时间长一些。对模拟信号进行谱分析时,首先要按照

           FFT_频谱分析(数字信号处理)

(一)实验原理

用FFT对信号作频谱分析是学习数字信号处理的重要内容。经常需要进行谱分析的信号是模拟信号和时域离散信号。对信号进行谱分析的重点在于频谱分辨率及分析误差。频谱分辨率D和频谱分析的点数N直接相关,其分辨率为2π/N 。因此2π/N≤D,可以据这个公式确定频率的分辨率。

FFT分析频谱的误差在于得到的是离散谱,而信号(非周期信号)是连续谱,只有当N较大时,离散谱的包络才能逼近于连续谱。因此N要适当选择大一些。

周期信号的频谱是离散谱,只有用整数倍周期的长度作FFT,得到的离散谱才能代表周期信号的频谱。如果不知道信号周期,可以尽量选择信号的观察时间长一些。

对模拟信号进行谱分析时,首先要按照采样定理将其变成时域离散信号。如果是模拟周期信号,也应该选取整数倍周期的长度,经过采样后形成周期序列,按照周期序列的谱分析进行。

(二)实验步骤

1.对以下序列进行频谱分析

                           image.gif                          

上三角有限长序列,序列长度为8; 为下三角有限长序列,序列长度为8。选择FFT变换点数N分别为8和16两种情况进行频谱分析,打印出频谱特性曲线,观察不同N值, 和 的频谱特性曲线是否相同,进行讨论分析并得出结论。整个频谱分析过程通过Matlab软件进行程序设计实现。以下为Matlab的程序实现:

function e_6_1
M=8;xa=1:(M/2);xb=(M/2):-1:1;x1n=[xa,xb]; x2n=[xb,xa];%产生长度为M的上下三角序列
subplot(321);stem([0:M-1],x1n),title('X_1(n)');xlim([-1,M]);%打印序列X_1(n)
subplot(322);stem([0:M-1],x2n),title('X_2(n)');xlim([-1,M]);%打印序列X_2(n)
subplot(323);fft_stem(x1n,8,1);%打印N=8点X_1(n)DFT幅频特性
subplot(324);fft_stem(x2n,8,2);%打印N=8点X_2(n)DFT幅频特性
subplot(325);fft_stem(x1n,16,1);%打印N=16点X_1(n)DFT幅频特性
subplot(326);fft_stem(x2n,16,2);%打印N=16点X_2(n)DFT幅频特性
end
function fft_stem(A,N,name) % 计算FFT并打印子函数
stem([2/N*(0:(N-1))],abs(fft(A,N)));ylabel('幅度');xlabel('w/π');
title([num2str(N),'点DFT[X_',num2str(name),'(n)]']);xlim([-(2/N),2]);%横坐标范围
end

image.gif

2.对下列模拟信号进行频谱分析

image.gif

这是一个含有三个频率成分的模拟信号,频率分别为选择采样频率Fs=64Hz,对DFT变换点数N分别为:16、32、64这三种情况进行频谱分析,分别打印频谱特性曲线。对三种点数的频谱分析结果进行讨论分析。整个频谱分析过程通过Matlab软件进行程序设计实现。以下为Matlab的程序实现:

function e_6_2
global T;%全局变量 采样周期
Fs=64;T=1/Fs;%Fs采样频率
n=0:64-1;nT=n*T;%采样点数
X3n=cos(8*pi*nT)+cos(16*pi*nT)+cos(20*pi*nT);%采样
subplot(311);fft_stem(X3n,16);%对N=16的频谱分析
subplot(312);fft_stem(X3n,32);%对N=32的频谱分析
subplot(313);fft_stem(X3n,64);%对N=64的频谱分析
end
function fft_stem(A,N) % 计算FFT并打印子函数
global T;Tp=N*T;F=1/Tp;%Tp 观察时间 F 频率分辨率
stem([-N/2:N/2-1]*F,abs(fftshift(fft(A,N))));xlabel('f(Hz)');
 %[-N/2:N/2-1]*F产生DFT对应采样点频率(fftshift()零点居中,关于中心反转)
ylabel('幅度');title([num2str(N),'点DFT[X_3(n)]']);xlim([-N*F/2,N*F/2-1]);%x范围
end

image.gif

三、实验结果分析

(一)序列结果分析

    通过对 和 频谱特性曲线结果的比较与分析(为了便于观察频谱和读取频率值对数据进行归一化处理,即分析以为横坐标),可以得出当FFT变换点数N为8 时, 和 频谱特性相同(见图3中的b1与b2),而N为16时, 和 频谱特性曲线不相同(见图3中的c1与c2)。出现这两种不同情况的原因为 和 为序列为8的有限长序列(如图3的a1和a2)当取N为8时,将两个序列做周期延拓后发现 两个周期序列的波形仅存在相位上的差别,将 向右移动4个单位长度即可得到 ,即,因而两序列的频谱特性相等,而当取N为16时,原 和 序列通过补零的方式变为序列长度为16的序列。此时序列波形完全不同,所以频谱特性必然不同。

image.gif编辑

(二)模拟信号结果分析

x_3(n) 共有3个频率成分,f1=4Hz, f2 =8Hz, f3=10Hz。所以x_3(n)的周期为0.5s。采样的频率为 Fs=64Hz=16f1=8f2=6.4f3。N为16时,观察时间Tp=16T=0.25s,T为Fs的倒数。不是x_3(n)周期的整数倍,出现混叠现象,严重失真,所以得到的频谱不正确(如图4中a3)。当N=32或64时,观察时间Tp=0.5s或1s, 是周期的整数倍,所以会得到正确的频谱(如图4中b3和c3),频谱中有3根谱线正好对应位于4Hz,8Hz和10Hz。而N为64时的频谱幅度为40正好为N为32时频谱幅度为20的两倍,即验证DFT对中期序列谱分析的理论。

image.gif编辑


目录
相关文章
|
机器学习/深度学习 资源调度
【机器学习】最小二乘法MSE
【1月更文挑战第24天】【机器学习】最小二乘法MSE
|
7月前
|
存储 JSON API
搜索商品ID获取商品详情接口
本文介绍如何基于RESTful API设计商品详情查询接口,使用Python+Flask实现。涵盖接口设计、错误处理、性能优化与安全措施,支持通过商品ID快速获取名称、价格、库存等信息,适用于电商与库存系统,兼顾高效性与可扩展性。(238字)
272 0
|
11月前
|
存储 Java 数据安全/隐私保护
Java技术栈揭秘:Base64加密和解密文件的实战案例
以上就是我们今天关于Java实现Base64编码和解码的实战案例介绍。希望能对你有所帮助。还有更多知识等待你去探索和学习,让我们一同努力,继续前行!
670 5
|
12月前
|
人工智能 自然语言处理 JavaScript
受够垃圾翻译!CodeBuddy 8 分钟造神器,划词秒翻 + 自动适配所有网页
本文介绍如何使用CodeBuddy结合蓝耘API开发一款高效翻译插件。通过CodeBuddy的智能代码生成功能与蓝耘API的强大翻译能力,解决了现有翻译工具质量差、速度慢、定制难等问题。具体步骤包括获取蓝耘API、安装CodeBuddy插件、生成README文件及代码、测试与优化插件功能。最终实现划词秒翻、自动适配网页的翻译工具,适用于GitHub等技术场景。项目代码已开源,用户可通过链接注册并体验。
1108 1
|
关系型数据库 PostgreSQL Docker
|
机器学习/深度学习 人工智能 搜索推荐
智能CRM系统排名2024:AI技术如何提升客户管理
在数字化时代,人工智能(AI)技术正逐渐成为企业提升客户管理能力的关键因素。智能CRM系统通过集成AI技术,不仅能够自动化日常任务,还能提供深入的客户洞察,从而帮助企业实现更高效的销售和更个性化的客户服务。AI技术在CRM系统中的应用包括:24/7的自动化客户服务、客户行为分析、个性化推荐以及销售预测和管道管理。根据2024年市场表现和用户反馈,纷享销客、用友CRM、金蝶CRM、悟空CRM、普华基石CRM、珍客CRM、八百客CRM和销帮帮CRM等智能CRM系统表现出色。其中,纷享销客凭借先进的AI技术成为行业领导者。企业应积极探索AI与CRM的集成,实现客户管理的数字化转型。
|
XML 存储 安全
doc 和 docx 文件的区别
doc 和 docx 文件的区别
2115 5
|
图形学 开发者
【Unity小技巧】unity移动物体的探究——使用8个不同方法
【Unity小技巧】unity移动物体的探究——使用8个不同方法
2064 1
|
消息中间件 JSON 自然语言处理
python多进程日志以及分布式日志的实现方式
python日志在多进程环境下的问题 python日志模块logging支持多线程,但是在多进程下写入日志文件容易出现下面的问题: PermissionError: [WinError 32] 另一个程序正在使用此文件,进程无法访问。 也就是日志文件被占用的情况,原因是多个进程的文件handler对日志文件进行操作产生的。
|
人工智能 JSON 计算机视觉
AI工具-标注工具labelme
Labelme是一款Python开源图像标注工具,支持图像分类、目标检测、语义分割和实例分割等任务。它提供了一个GUI界面,用户可绘制圆形、方形和多边形进行标注。安装通过`pip install labelme`和`lxml`,使用时可导入预定义标签列表。标注结果保存为json文件,包含类别、边界框信息和形状类型。Labelme还支持格式转换,如转换为VOC或COCO格式。这款工具对视频标注也兼容。5月更文挑战第9天
2145 5