news 2026/9/3 4:55:25

直接上干货,今天手把手教你在MATLAB里用FFT搞信号频谱分析。准备好你的MATLAB 2018b以上版本,咱们边写代码边唠嗑

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
直接上干货,今天手把手教你在MATLAB里用FFT搞信号频谱分析。准备好你的MATLAB 2018b以上版本,咱们边写代码边唠嗑

matlab fft 快速傅里叶变换 双边谱,单边谱,相位谱 基于matlab2018b及以上版本实现 对信号做fft,然后绘制其双边谱,单边谱,和对应的相位谱 有详细介绍并附带注释,保证可以运行 附带一份数据,可以查看数据格式来调整你的数据最后使用代码运行。

先来个实战案例:假设采样频率Fs=1000Hz,采样时间1秒。构造个含50Hz和120Hz的正弦波信号,加个随机噪声更有真实感:

Fs = 1000; % 采样率 T = 1/Fs; % 采样间隔 L = 1000; % 信号长度 t = (0:L-1)*T; % 时间轴 S = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t); % 原始信号 X = S + 2*randn(size(t)); % 加噪版本

先看原始信号长啥样:

figure(1) plot(Fs*t(1:100),X(1:100)) % 显示前0.1秒 title('原始信号(含噪声)') xlabel('时间 (ms)')

双边谱绘制:

Y = fft(X); % 核心就这一句,直接调用fft P2 = abs(Y/L); % 双边幅度谱计算 P1 = P2(1:L/2+1); % 截取前半段 P1(2:end-1) = 2*P1(2:end-1); % 能量守恒修正 f = Fs*(0:(L/2))/L; % 频率轴生成 figure(2) plot(f,P1) title('单边幅频特性') xlabel('频率 (Hz)') ylabel('幅度')

看到这可能有疑问:为啥要截一半还乘2?因为FFT结果是对称的,负频率部分其实是正频率的镜像。实际工程中更常用单边谱,直接把能量集中到正频率部分。

相位谱的坑要注意:

phase = angle(Y(1:L/2+1)); % 取相位角 phase_unwrap = unwrap(phase); % 解除相位缠绕 figure(3) subplot(2,1,1) plot(f,phase*180/pi) title('原始相位谱') subplot(2,1,2) plot(f,phase_unwrap*180/pi) title('解缠绕相位谱')

这里用unwrap函数解决相位跳变问题,实测发现当信号存在噪声时,相位谱在非信号频率点会出现随机波动,这是正常现象。

matlab fft 快速傅里叶变换 双边谱,单边谱,相位谱 基于matlab2018b及以上版本实现 对信号做fft,然后绘制其双边谱,单边谱,和对应的相位谱 有详细介绍并附带注释,保证可以运行 附带一份数据,可以查看数据格式来调整你的数据最后使用代码运行。

完整代码套餐:

% 数据生成部分 Fs = 1000; T = 1/Fs; L = 1000; t = (0:L-1)*T; S = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t); X = S + 2*randn(size(t)); % FFT计算 Y = fft(X); P2 = abs(Y/L); P1 = P2(1:L/2+1); P1(2:end-1) = 2*P1(2:end-1); f = Fs*(0:(L/2))/L; % 绘图全家桶 figure subplot(3,1,1) plot(f,P1) title('单边幅频特性') xlabel('Hz') subplot(3,1,2) plot(f,20*log10(P1)) % 转dB单位更直观 title('对数幅频特性') xlabel('Hz') phase = angle(Y(1:L/2+1)); subplot(3,1,3) plot(f,unwrap(phase)*180/pi) title('解缠绕相位谱(度)') xlabel('Hz') % 补充:查看你的数据格式时注意 % 如果是导入外部数据,确保数据是列向量 % 可通过X = your_data(:,1); 选取所需通道

数据适配提示:

当使用自己的数据时:

  1. 确认数据是单列向量
  2. 调整Fs为实际采样率
  3. 数据长度L需要是偶数(方便截断)
  4. 噪声过大会淹没信号特征(可通过加窗改善)

跑完代码应该能看到在50Hz和120Hz处有明显的谱峰,相位谱在这两个点有明确相位值(其他位置是噪声相位随机分布)。如果发现频谱泄露严重,下次可以聊聊加窗技巧。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 23:46:30

本科毕业设计开题报告系列之十二:本科开题答辩老师最常问的 8 个问题——为什么你写进材料里的每一句话,都要非常熟

目录前言:为什么你总觉得老师“在针对你”?1. 本科开题答辩的底层逻辑:只问你已经“承诺”的内容1.1 什么叫“你已经承诺的内容”?1.2 老师为什么不会随便问“超纲问题”?2. 本科开题答辩中最常见的 8 个问题3. 为什么…

作者头像 李华
网站建设 2026/8/27 0:37:31

500M以上大文件在PHP中如何分段上传并秒传?

PHP程序员外包项目救星:原生JS大文件传输系统(附前后端核心代码) 兄弟,作为在杭州接外包的老PHP程序员,太懂你现在的处境了——甲方爸爸要20G大文件上传,还要兼容IE8,预算卡得死死的&#xff0…

作者头像 李华
网站建设 2026/9/3 2:12:52

2.2 安全防护体系:如何防止API被恶意调用和刷量?

2.2 安全防护体系:如何防止API被恶意调用和刷量? 引言 在构建面向多业务方的平台服务时,安全防护是不可忽视的重要环节。恶意调用、刷量攻击、数据泄露等问题不仅会影响平台的稳定运行,还可能导致严重的业务损失和声誉损害。特别是在通知平台这类高频调用的服务中,如何有…

作者头像 李华
网站建设 2026/9/2 17:04:43

蓝易云 :详解SpringBoot的常用注解

下面这份内容,直接按“工程实战 企业级理解”来写,不绕弯、不空谈,适合真实生产环境阅读与沉淀。一、Spring Boot 注解的本质认知(先把逻辑捋清)🧠Spring Boot 的核心目标只有一个: &#x1f4…

作者头像 李华
网站建设 2026/9/2 23:27:20

用纯JavaScript构建实时HTML页面生成器

用纯JavaScript构建实时HTML页面生成器 作者:Joe bou khalil 我是一位热衷于构建实用工具、模拟和理论的独立创作者,旨在让复杂的概念更易于理解。我探索技术、教育和人类经验的交叉领域——通常借助类似ChatGPT的AI。 2026年2月4日 谁没有过关于一个…

作者头像 李华