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

article/2025/10/14 7:15:46

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

例1

x(n)=R4(n)
选择FFT的变换区间N为8和16进行频谱分析

clc
close all;
clear all;xn=[ones(1,4)];
X8k=fft(xn,8);n=0:7;
wk=2*n/8;
subplot(1,2,1);
stem(wk,abs(X8k),'.','r');
title('8 point DFT[x(n)]');
xlabel('\omega/\pi');
ylabel('amplitude');
axis([0,2,0,1.2*max(abs(X8k))]);n=0:15;
wk=2*n/16;
X16k=fft(xn,16);
subplot(1,2,2);
stem(wk,abs(X16k),'.','r');
title('16 point DFT[x(n)]');
xlabel('\omega/\pi');
ylabel('amplitude');
axis([0,2,0,1.2*max(abs(X16k))]);

在这里插入图片描述
x(n)的频谱函数8点和16点采样(8点DFT和16点DFT)

例2

在这里插入图片描述
选择FFT的变换区间N为8和16进行频谱分析

clc
close all;
clear all;
xa=1:4;
xb=4:-1:1;
xn=[xa,xb];
X8k=fft(xn,8);n=0:7;
wk=2*n/8;
subplot(1,2,1);
stem(wk,abs(X8k),'.','r');
title('8 point DFT[x(n)]');
xlabel('\omega/\pi');
ylabel('amplitude');
axis([0,2,0,1.2*max(abs(X8k))]);n=0:15;
wk=2*n/16;
X16k=fft(xn,16);
subplot(1,2,2);
stem(wk,abs(X16k),'.','r');
title('16 point DFT[x(n)]');
xlabel('\omega/\pi');
ylabel('amplitude');
axis([0,2,0,1.2*max(abs(X16k))]);

在这里插入图片描述

例3

在这里插入图片描述
选择FFT的变换区间N为8和16进行频谱分析

clc
close all;
clear all;xa=4:-1:1;
xb=1:4;
xn=[xa,xb];
X8k=fft(xn,8);n=0:7;
wk=2*n/8;
subplot(1,2,1);
stem(wk,abs(X8k),'.','r');
title('8 point DFT[x(n)]');
xlabel('\omega/\pi');
ylabel('amplitude');
axis([0,2,0,1.2*max(abs(X8k))]);n=0:15;
wk=2*n/16;
X16k=fft(xn,16);
subplot(1,2,2);
stem(wk,abs(X16k),'.','r');
title('16 point DFT[x(n)]');
xlabel('\omega/\pi');
ylabel('amplitude');
axis([0,2,0,1.2*max(abs(X16k))]);

在这里插入图片描述
x3(n)和x2(n)的8点DFT的模相等,所以图示相同;但是16点不满足循环移位关系,模不同

例4

x(n)=cos(pi*n/4)
选择FFT的变换区间N为8和16进行频谱分析

clc
close all;
clear all;n=0:7;
xn=cos(pi*n/4);
X8k=fft(xn,8);
wk=2*n/8;
subplot(1,2,1);
stem(wk,abs(X8k),'.','r');
title('8 point DFT[x(n)]');
xlabel('\omega/\pi');
ylabel('amplitude');
axis([0,2,0,1.2*max(abs(X8k))]);n=0:15;
xn=cos(pi*n/4);
X16k=fft(xn,16);
wk=2*n/16;
subplot(1,2,2);
stem(wk,abs(X16k),'.','r');
title('16 point DFT[x(n)]');
xlabel('\omega/\pi');
ylabel('amplitude');
axis([0,2,0,1.2*max(abs(X16k))]);

在这里插入图片描述
N=8和N=16均是周期的整数倍,只在±0.25pi有1根单一谱线

例5

xn=cos(pin/4)+cos(pin/8)
选择FFT的变换区间N为8和16进行频谱分析

clc
close all;
clear all;n=0:7;
xn=cos(pi*n/4)+cos(pi*n/8);
X8k=fft(xn,8);
wk=2*n/8;
subplot(1,2,1);
stem(wk,abs(X8k),'.','r');
title('8 point DFT[x(n)]');
xlabel('\omega/\pi');
ylabel('amplitude');
axis([0,2,0,1.2*max(abs(X8k))]);n=0:15;
xn=cos(pi*n/4)+cos(pi*n/8);
X16k=fft(xn,16);
wk=2*n/16;
subplot(1,2,2);
stem(wk,abs(X16k),'.','r');
title('16 point DFT[x(n)]');
xlabel('\omega/\pi');
ylabel('amplitude');
axis([0,2,0,1.2*max(abs(X16k))]);

在这里插入图片描述
周期为16,N=8不是周期整数倍,所以频谱不正确;N=16是周期,得到正确频谱,仅在±0.25pi和±0.125pi处有两根谱线

例6

x(t)=cos(8pit)+cos(16pit)+cos(20pit)
采样频率Fs=64Hz,变换区间N=16 32 64进行谱分析

clc
clear all;
close all;
Fs=64;
T=1/Fs;subplot(3,1,1)
N=16;
n=0:N-1;
xnT=cos(8*pi*n*T)+cos(16*pi*n*T)+cos(20*pi*n*T);
X16k=fft(xnT);
X16k=fftshift(X16k);
Tp=N*T;
F=1/Tp;
k=-N/2:N/2-1;
fk=k*F; %频率分辨率F
stem(fk,abs(X16k),'.');
box on
title('16 point |DFT[x(nT)]|');
xlabel('f(Hz)');
ylabel('amplitude');
axis([-N*F/2-1,N*F/2-1,0,1.2*max(abs(X16k))]);subplot(3,1,2)
N=32;
n=0:N-1;
xnT=cos(8*pi*n*T)+cos(16*pi*n*T)+cos(20*pi*n*T);
X32k=fft(xnT);
X32k=fftshift(X32k);
Tp=N*T;
F=1/Tp;
k=-N/2:N/2-1;
fk=k*F; %频率分辨率F
stem(fk,abs(X32k),'.');
box on
title('32 point |DFT[x(nT)]|');
xlabel('f(Hz)');
ylabel('amplitude');
axis([-N*F/2-1,N*F/2-1,0,1.2*max(abs(X32k))]);subplot(3,1,3)
N=64;
n=0:N-1;
xnT=cos(8*pi*n*T)+cos(16*pi*n*T)+cos(20*pi*n*T);
X64k=fft(xnT);
X64k=fftshift(X64k);
Tp=N*T;
F=1/Tp;
k=-N/2:N/2-1;
fk=k*F; %频率分辨率F
stem(fk,abs(X64k),'.');
box on
title('64 point |DFT[x(nT)]|');
xlabel('f(Hz)');
ylabel('amplitude');
axis([-N*F/2-1,N*F/2-1,0,1.2*max(abs(X64k))]);

在这里插入图片描述
x(t)=cos(8pit)+cos(16pit)+cos(20pit)有3个成分f1=4hz,f2=8hz,f3=10hz,所以周期是0.5s
1.采样频率Fs=64hz,变换区间N=16时,观察时间Tp=16T=0.25s,不是周期整数倍
2.N=32,64时观察时间Tp=0.5s和1s,是周期整数倍,
频谱正确
在这里插入图片描述


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

相关文章

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。 前者总是后者的依赖。只有在了解前…

三大框架 —— 持久层框架MyBatis

持久层框架MyBatis 1. mybatis介绍2. 执行流程3. 使用步骤代码实现举例:商品分类CRUD操作 4. 关联关系4.1 一对一4.2 一对多 5. 参数占位符6. 复杂搜索6.1 动态SQL语句6.2 集合参数 1. mybatis介绍 传统框架的缺点: 使用jdbc需要程序员创建连接&#xff…