Matlab的信号频谱分析——FFT变换

Matlab的信号频谱分析——FFT变换

Matlab的信号频谱分析

FFT是离散傅立叶变换的快速算法,可以将一个时域信号变换到频域。

有些信号在时域上是很难看出什么特征的。但是如果变换到频域之后,就很容易看出特征了。

这就是很多信号分析采用FFT变换的原因。

另外,FFT可以将一个信号的频谱提取出来,这在频谱分析方面也是经常用的。

通俗点说FFT就是将一个信号解析成是由不同频率、幅值,相位的正弦波叠加而成的。

FFT变换的步骤:

1、对模拟信号离散化

一个模拟信号,经过ADC采样之后,就变成了离散的数字信号。

2、采样频率(Fs)的选取

根据采样定理,采样频率需大于信号频率的两倍。

3、采样点数( N )的选取

在FFT变换中,输入N个采样点,就有N个变换结果,每个结果都是一个复数。

每个结果都和上面所说的一个正弦信号的频率、幅值,相位对应。

复数的幅值和正弦信号的幅值对应,相位和相位对应。

而其频率的对应关系为:假设第n个结果,则其对应的频率为 Fn = (n-1)*Fs/N 。

Fs/N为分辨率,例如采样频率Fs为1024Hz,采样点数为1024点,

则每个结果以1HZ的频率步长递增。如果采样频率Fs为1024Hz,采样点数为2048点,

则每个结果以0.5HZ的频率步长递增。我们讲其分辨率为0.5HZ。

如果要提高频率分辨力,则必须增加采样点数,也即采样时间。

频率分辨率和采样时间是倒数关系。

注意:为了方便进行FFT运算,通常N取2的整数次方。

例:假设我们有一个信号,它含有一个2V的直流分量,一个频率为50Hz、相位为-30度、幅度为3V的交流信号,以及一个频率为75Hz、相位为90度、幅度为1.5V的交流信号。

用数学表达式就是如下:S=2+3cos(2pi50t-pi30/180)+1.5cos(2pi75t+pi90/180)。

我们以256Hz的采样率对这个信号进行采样,总共采样256点。

按照我们上面的分析,Fn=(n-1)*Fs/N,我们可以知道,每两个点之间的间距就是1Hz,第n个点的频率就是n-1。我们的信号有3个频率:0Hz、50Hz、75Hz,应该分别在第1个点、第51个点、第76个点上出现峰值,其它各点应该接近0。

实际情况如何呢?我们来看看FFT的结果:

% 假设我们有一个信号,它含有一个2V的直流分量,一个频率为50Hz、相位为-30度、幅度为3V的交流信号,
% 以及一个频率为75Hz、相位为90度、幅度为1.5V的交流信号。
% 用数学表达式就是如下:S=2+3cos(2pi50t-pi30/180)+1.5cos(2pi75t+pi90/180)。
% 我们以256Hz的采样率对这个信号进行采样,总共采样256点。
% 按照我们上面的分析,Fn=(n-1)*Fs/N,我们可以知道,每两个点之间的间距就是1Hz,
% 第n个点的频率就是n-1。
% 我们的信号有3个频率:0Hz、50Hz、75Hz,应该分别在第1个点、第51个点、第76个点上出现峰值,
% 其它各点应该接近0。
% 实际情况如何呢?我们来看看FFT的结果:

clc; clear; close all;

t = 0:1/255:1; %采样步长
% s1 = 2; % 一个2V的直流
% s2 = 3*cos(2*pi*50*t-pi*30/180);   % 一个频率为50Hz、相位为-30度、幅度为3V的交流信号
% s3 = 1.5*cos(2*pi*75*t+pi*90/180); % 一个频率为75Hz、相位为90度、幅度为1.5V的交流信号
y = 2 + 3*cos(2*pi*50*t-pi*30/180) + 1.5*cos(2*pi*75*t+pi*90/180); % 信号叠加
N = length(t); %样点个数
plot(t,y);
xlabel('时间/s'); ylabel('幅值');
title('时域信号time domain signal');
% 采样
fs = 255; %采样频率
df = fs/(N-1); %分辨率
Y = fft(y(1:N)); %真实的幅值
figure(2)
plot((1:N/2),abs(Y(1:N/2))); %由于傅里叶算法转换得到的是对称图,而常用的只需要一半就可以了。
xlabel('Hz'); ylabel('幅值');
title('幅频响应');
% 
% FFT结果的幅值和信号真实幅值对应的关系:除第一个点外,
% FFT结果的其他点的幅值是真实信号幅值N/2倍,而第一个点是真实值的N倍。
% 
% FFT结果的相位和真实信号相位对比:由于是第51个点对应的是50Hz,有个错位关系,
% 还有就是FFT的幅值和真实值也有个转换关系,下面我们通过算法让其完全对应起来。
% 

f = (0:N-1)*df; %其中每点的频率,第一个点对应的频率为0
Y1 = fft(y(1:N))/(N/2); %真实的幅值
figure(3)
plot(f(1:N/2),abs(Y1(1:N/2))); %由于傅里叶算法转换得到的是对称图,而常用的只需要一半就可以了.
xlabel('Hz'); ylabel('幅值');
title('幅频响应');

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/59452.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

企业微信小程序在调用wx.qy.login时返回错误信息qy.login:fail

原因是大概是绑定了多个企业但是在开发者工具中没有选择正确的企业 解决方法: 重新选择企业后即可成功获取code

媒介易讲解体育冠军助力品牌解锁市场营销新玩法

在当今竞争激烈的市场中,品牌推广成为企业取得商业成功的重要一环。然而,随着传统市场推广方式的日益饱和,企业急需创新的市场营销策略来吸引消费者的关注和认可。在这样的背景下,体育冠军助力品牌成为了一种备受瞩目的市场营销新…

Android Jetpack

Jetpack 是一个由多个库组成的套件,可帮助开发者遵循最佳实践、减少样板代码并编写可在各种 Android 版本和设备中一致运行的代码,让开发者可将精力集中于真正重要的编码工作。 1.基础组件 (1)AppCompat:使得支持较低…

SharpShooter Gauges.Professional Crack

SharpShooter Gauges.Professional Crack 将真实仪器硬件的外观添加到.NET应用程序中。 SharpShooter Gauges旨在创建和使用任何行业特定的KPI、计算机辅助培训系统、SCADA系统、数字仪表板和任何其他用于显示和监控关键任务数据的应用程序。为了实现所有这些目的,一…

概率论与数理统计:第一章:随机事件及其概率

文章目录 概率论Ch1. 随机事件及其概率1.基本概念(1)随机试验、随机事件、样本空间(2)事件的关系和运算①定义:互斥(互不相容)、对立②运算法则:德摩根率 (3)概率的定义(4)概率的性质(5)概率计算排列组合 2.等可能概型1.古典概型 (离散)2.几何概型 (连续…

glut太阳系源码修改和对cpu占用观察

#include <GL/glut.h> static int day 100; // day 的变化&#xff1a;从 0 到 359 void myDisplay(void) {//glEnable(GL_DEPTH_TEST);glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluPerspective(75, 1, 1, 40…

Docker-Compose编排与部署(lnmp实例)

第四阶段 时 间&#xff1a;2023年8月3日 参加人&#xff1a;全班人员 内 容&#xff1a; Docker-Compose编排与部署 目录 一、Docker Compose &#xff08;一&#xff09;概述 &#xff08;二&#xff09;Compose适用于所有环境&#xff1a; &#xff08;三&#xf…

Java阶段五Day16

Java阶段五Day16 文章目录 Java阶段五Day16问题解析启动servlet冲突问题nacos注册中心用户信息验证失败前端效果不对前端请求到后台服务的流转过程 远程dubbo调用业务需求dubbo配置xml配置domain层代码 补充远程调用 师傅详情接口抽象开发WorkderServerControllerWorkerServerS…

51单片机学习-AT24C02数据存储秒表(定时器扫描按键数码管)

首先编写I2C模块&#xff0c;根据下面的原理图进行位声明&#xff1a; sbit I2C_SCL P2^1; sbit I2C_SDA P2^0;再根据下面的时序结构图编写函数&#xff1a; /*** brief I2C开始* param 无* retval 无*/ void I2C_Start(void) {I2C_SDA 1; I2C_SCL 1; I2C_SDA 0;I2C_S…

redis原理 6:小道消息 —— PubSub

前面我们讲了 Redis 消息队列的使用方法&#xff0c;但是没有提到 Redis 消息队列的不足之处&#xff0c;那就是它不支持消息的多播机制。 img 消息多播 消息多播允许生产者生产一次消息&#xff0c;中间件负责将消息复制到多个消息队列&#xff0c;每个消息队列由相应的消费组…

【Leetcode刷题】位运算

本篇文章为 LeetCode 位运算模块的刷题笔记&#xff0c;仅供参考。 位运算的常用性质如下&#xff1a; a ^ a 0 a ^ 0 a a ^ 0xFFFFFFFF ~a目录 一. 基本位运算Leetcode29.两数相除Leetcode89.格雷编码 二. 位运算的性质Leetcode136.只出现一次的数字Leetcode137.只出现一…

好用的数据库管理软件之idea(idea也有数据库???)

1.建立maven项目&#xff08;maven项目添加依赖&#xff0c;对于后期连接数据库很方便&#xff09; 2.连接数据库。。。 这里一定注意端口号&#xff0c;不要搞错了 和上一张图片不一样哦 3.数据库测试代码。。。 然后你就可以在这里边写MySQL代码了&#xff0c;这个工具对于新…

RunnerGo条件控制器使用方法

在做性能测试时我们需要根据业务需求、业务场景来配置测试脚本&#xff0c;举个例子&#xff1a;在登录注册场景中&#xff0c;可能会有账号密码全部正确、账号格式错误、密码错误等多种情况&#xff0c;这里的“登录/注册”事件可以视为一个场景。一个真实业务中的场景&#x…

人工智能学习07--pytorch23--目标检测:Deformable-DETR训练自己的数据集

参考 https://blog.csdn.net/qq_44808827/article/details/125326909https://blog.csdn.net/dystsp/article/details/125949720?utm_mediumdistribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-125949720-blog-125326909.235^v38^pc_releva…

【Python】Web学习笔记_flask(3)——上传文件

用GET、POST请求上传图片并呈现出来 首先还是创建文件上传的模板 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>上传图片</title> </head> <body> <form action""…

MySQL 远程操作mysql

可以让别人在他们的电脑上操作我电脑上的数据库 create user admin identified with mysql_native_password by admin; //设置账号密码都为admingrant all on *.* to admin; //给admin账号授权 授权完成

直播课 | 大橡科技研发总监丁端尘博士“类器官芯片技术在新药研发中的应用”

从类器官到类器官芯片&#xff0c;正在生物科学领域大放异彩。 药物研发需要新方法 众所周知&#xff0c;一款新药是一个风险大、周期长、成本高的艰难历程&#xff0c;国际上有一个传统的“双十”说法——10年时间&#xff0c;10亿美金&#xff0c;才可能成功研发出一款新药…

【安全测试】Web应用安全之XSS跨站脚本攻击漏洞

目录 前言 XSS概念及分类 反射型XSS(非持久性XSS) 存储型XSS(持久型XSS) 如何测试XSS漏洞 方法一&#xff1a; 方法二&#xff1a; XSS漏洞修复 原则&#xff1a;不相信客户输入的数据 处理建议 资料获取方法 前言 以前都只是在各类文档中见到过XSS&#xff0c;也进…

微信小程序animation动画,微信小程序animation动画无限循环播放

需求是酱紫的&#xff1a; 页面顶部的喇叭通知&#xff0c;内容不固定&#xff0c;宽度不固定&#xff0c;就是做走马灯&#xff08;轮播&#xff09;效果&#xff0c;从左到右的走马灯&#xff08;轮播&#xff09;&#xff0c;每播放一遍暂停 1500ms &#xff5e; 2000ms 刚…

Python web实战之 Django 的模板语言详解

关键词&#xff1a; Python、web开发、Django、模板语言 概要 作为 Python Web 开发的框架之一&#xff0c;Django 提供了一套完整的 MVC 模式&#xff0c;其中的模板语言为开发者提供了强大的渲染和控制前端的能力。本文介绍 Django 的模板语言。 1. Django 模板语言入门 Dj…