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

article/2025/10/14 6:22:05

~~ 如果有什么问题可以在我的个人博客留言 ,我会及时回复。欢迎来访交流 ~~


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

(一)实验原理

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

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

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

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

(二)实验步骤

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

                                                         

 上三角有限长序列,序列长度为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

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

这是一个含有三个频率成分的模拟信号,频率分别为选择采样频率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

三、实验结果分析

(一)序列结果分析

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

(二)模拟信号结果分析

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对中期序列谱分析的理论。

点击下载资源


http://chatgpt.dhexx.cn/article/AJby6FH1.shtml

相关文章

数字信号处理(matlab)——FFT对信号频谱分析

FFT频谱分析法 频谱分辨率D FFT能够实现的频率分辨率是2pi/N 要求2pi/N≤D 误差主要来自于用FFT做频谱分析时,得到的是离散谱,但是信号是连续谱,只有当N较大时,离散谱的包络才能逼近离散谱,因此N要大一些。 为了方便读…

matlab信号频谱分析FFT详解

前言 做OFDM通信少不了频谱分析,基带信号DA后的频谱,以及基带数字上变频后的DA信号都要频谱分析。我觉得其实做任何工程都是这样,先规定实施方案,然后仿真成功,再实际开发,不过也可以一边开发,…

信号与频谱

身为一名通信专业出生的我,居然淡忘了信号的基本知识,今天带大家回顾一下,通俗易懂。 信号(singal)简介 我们在生活中经常遇到信号。比如说,股票的走势图,心跳的脉冲图等等。在通信领域,无论是的GPS、手机…

【信号与系统】笔记(3-2)信号的频谱与傅里叶变换(一图看懂傅里叶变换)

Author:AXYZdong 自动化专业 工科男 有一点思考,有一点想法,有一点理性! 文章目录 一图看懂傅里叶变换前言一、周期信号的频谱1、周期信号频谱的相关概念2、周期信号频谱的特点3、谱线的结构与波形参数的关系 二、非周期信号的频谱…

信号频谱

2019独角兽企业重金招聘Python工程师标准>>> 频谱是指一个时域的信号在频域下的表示方式,可以针对信号进行傅里叶变换而得,所得的结果会是以分别以幅度及相位为纵轴,频率为横轴的两张图,不过有时也会省略相位的信息&am…

晋南讲堂之持久层框架ORM简介

1. 什么是ORM? ORM全称 Object/Relation Mapping,即对象/关系映射,它完成了面向对象语言到关系型数据库的映射,作用是把对持久化对象(POJO,Plain Old Java Object)的保存、修改、删除等操作转换成对数据库的操作,是两者…

持久层框架的比较Hibernate与 MyBatis 胡俊铭

最近网上 看到很多人质疑....现在好多Web项目用了MyBatis,没感觉MyBatis好到哪里了,从开发效率上讲,不管是Hibernate的反向工程,还是自动建表,关联映射都比MyBatis方便得多。难道仅仅是因为运行速度,Hibernate也有缓存啊。或者,二者适用场合不同,再或者,MyBatis就是比…

一起来学SpringBoot(七)持久层框架

springboot具有非常棒的持久层框架支持,下面我将介绍我用过的三种持久层框架进行简述使用。 由于这里操作的都是一张表,这里贴出通用的yml和建表语句 切记这里使用的是mysql8 ,5.8之前的朋友请修改后缀去掉com.mysql.cj.jdbc.Driver 中的cj。…

MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架

MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Obje…

Mysql的持久层_持久层(数据层,Dao层) MyBatis框架

所谓的持久层就是把数据可以永久保持的存储到设备中,不像放到内存中那样断电就消失,一般来说,持久层为直接的理解就是对数据库的各种操作,如CRUD(增加,删除,修改,查询),更新等操作 持久层,就是把持久的动作封装成一个独立的层,这是为了降低功能代码之间的关联.创建一个更清晰的…

Spring 从入门到精通 (二十) 持久层框架 MyBatis

关键词:Spring | 整合 | 持久层 | MyBatis 本专栏通过理论和实践相结合,系统学习框架核心思想及简单原理,原创不易,如果觉得文章对你有帮助,点赞收藏支持博主 ✨ 目录 一、MyBatis开发步骤1.1、创建实体类1.2、实体别名…

持久层框架:Mybatis快速入门

Mybatis/Hibernate/JPA作为持久层使用广泛的框架,在实际的项目中有很多的追随者。这篇文章将会通过简单的实例让完全不知道Mybatis为何物的入门者迅速Catchup,对于有一些Java基础的入门者应该能够很快学会如何使用Mybatis进行CRUD(增查改删&a…

持久层框架JPA与Mybatis该如何选型

一、现状描述 目前java 持久层ORM框架应用最广泛的就是JPA和Mybatis。JPA只是一个ORM框架的规范, 对该规范的实现比较完整就是Spring Data JPA(底层基于Hibernate实现),是基于Spring的数据持久层框架,也就是说它只能用在Spring环…

Java持久层框架之mybatis使用

一.什么是框架,框架从何而来,为什么使用框架? 框架(framework): 1.是一系列jar包,其本质是对JDK功能的拓展.(jar包,jar:class文件的压缩包) 2.框架是一组程序的集合,包含了一系列的最佳实践,作用是解决某一个领域的问题. 最佳实践(Best Practice):实际上是无数程序员经历过无数…

数据持久层框架Mybatis

目录 1.软件开发3层架构 2.什么是框架? 3.传统JDBC开发的不足? 4.什么是Mybatis? 5.Mybatis入门案例? 6.Mybatis增删改查案例? 7.Mybatis代理实现DAO开发? 8.Mybatis高级映射 1.软件开发3层架构 软…

常见持久层框架赏析,到底是什么让你选择 MyBatis?

在绝大多数在线应用场景中,数据是存储在关系型数据库中的,当然,有特殊要求的场景中,我们也会将其他持久化存储(如 ElasticSearch、HBase、MongoDB 等)作为辅助存储。但不可否认的是,关系型数据库…

Java持久层框架

一、ORM框架 ORM:对象关系映射(英语:(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换 。从效果上说,它其实是创建了一…

17-Spring持久层框架整合

上一篇:16-Spring 基于注解的AOP编程、AOP总结https://blog.csdn.net/fsjwin/article/details/109482768 1.为什么Spring要与持久层框架进行整合 spring是一个优秀的框架,他的优秀支持就是能整合所有程序员想要让他整合的框架,这里所说的持…

MyBatis持久层框架

文章目录 一、Maven搭建1、本地maven仓库以及本地依赖2、idea搭建maven环境3、配置Product实体类4、配置Product接口5、配置db.properties文件6、配置SqlMapperConfig.xml文件7、配置ProductMapper.xml8、配置测试类9、运行 一、Maven搭建 1、本地maven仓库以及本地依赖 2、id…

Java数据持久层框架

一、前言 1.持久层 Java数据持久层,其本身是为了实现与数据源进行数据交互的存在,其目的是通过分层架构风格,进行应用&数据的解耦。 我从整体角度,依次阐述JDBC、Mybatis、MybatisPlus。 前者总是后者的依赖。只有在了解前…