news 2026/3/14 15:36:42

基于Matlab的FFT频谱分析与滤波探索

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于Matlab的FFT频谱分析与滤波探索

基于matlab的FFT频谱分析和滤波,谐波提取,可以实现对仿真模型中示波器的波形数据或者外部采样数据进行频谱分析和自定义频段清除,也可以对已有数据特定频段的数据进行提取。 滤波前后波形无相位滞后,幅值无衰减。 图a是原始信号,含三次,五次谐波,图b是原始信号频谱分析(FFT)结果,图c是滤除三次和五次谐波信号后的对比结果,图d是滤波后波形频谱分析(FFT分析)结果。

在信号处理领域,频谱分析和滤波是至关重要的操作。今天咱们就来聊聊基于Matlab实现的FFT频谱分析以及滤波,顺便还能进行谐波提取。这一套流程下来,不管是仿真模型里示波器的波形数据,还是从外部采集的采样数据,都能给它安排得明明白白。

一、功能概述

咱的这个程序主要实现两大功能:频谱分析和自定义频段清除,以及特定频段数据提取。而且还有个亮点,滤波前后的波形既不会有相位滞后,幅值也不会衰减,这对于很多实际应用场景来说,可太重要啦。

二、示例数据说明

这里展示了几个关键图,图a是原始信号,它里面包含了三次和五次谐波,就像一个混合体,有着不同频率的成分掺杂其中。图b是原始信号经过FFT频谱分析后的结果,能直观地看到各个频率成分的分布情况。图c是滤除三次和五次谐波信号后的对比结果,能很清楚地看到信号经过处理后的变化。图d则是滤波后波形的频谱分析(FFT分析)结果,和图b对比,就能知道哪些频率成分被去除了。

三、代码实现

生成含谐波的原始信号

% 参数设置 fs = 1000; % 采样频率 t = 0:1/fs:1-1/fs; % 时间向量 % 生成包含三次和五次谐波的原始信号 f1 = 50; % 基波频率 x = sin(2*pi*f1*t) + 0.5*sin(2*pi*3*f1*t) + 0.3*sin(2*pi*5*f1*t);

这里首先设置了采样频率fs,它决定了我们在单位时间内采集数据的点数。然后创建了时间向量t,基于采样频率生成了从0到1秒的时间序列。接着定义了基波频率f1为50Hz,通过叠加不同幅值的基波、三次谐波和五次谐波,生成了原始信号x

FFT频谱分析

N = length(x); % 信号长度 X = fft(x); % 对信号进行FFT变换 f = (0:N - 1)*(fs/N); % 频率向量 magnitude = abs(X)/N; % 计算幅值谱 figure; subplot(2,1,1); plot(t,x); title('原始信号'); xlabel('时间(s)'); ylabel('幅值'); subplot(2,1,2); plot(f(1:N/2),2*magnitude(1:N/2)); title('原始信号频谱分析(FFT)结果'); xlabel('频率(Hz)'); ylabel('幅值');

先获取信号的长度N,然后对信号x进行快速傅里叶变换fft得到X。接着生成对应的频率向量f,根据FFT的原理计算出幅值谱magnitude。最后通过figure创建图形窗口,用subplot把窗口分为上下两部分,分别绘制原始信号的时域图和频谱分析的频域图。

滤波实现

% 设计滤波器,去除三次和五次谐波 f_cutoff1 = 140; % 截止频率1,用于滤除三次谐波附近频率 f_cutoff2 = 260; % 截止频率2,用于滤除五次谐波附近频率 b1 = fir1(100,f_cutoff1/(fs/2)); % 设计低通滤波器 b2 = fir1(100,f_cutoff2/(fs/2),'high'); % 设计高通滤波器 filtered_signal = filter(b1,1,x); filtered_signal = filter(b2,1,filtered_signal);

这里设计了两个滤波器,一个低通滤波器和一个高通滤波器,用来去除三次和五次谐波。先定义了两个截止频率fcutoff1fcutoff2,分别对应三次和五次谐波附近的频率。通过fir1函数设计FIR滤波器,第一个参数100表示滤波器的阶数,第二个参数是归一化截止频率。先用低通滤波器对原始信号x进行滤波,再用高通滤波器对第一次滤波后的信号进行二次滤波,得到最终的滤波后信号filtered_signal

滤波后信号的频谱分析

N_filtered = length(filtered_signal); X_filtered = fft(filtered_signal); f_filtered = (0:N_filtered - 1)*(fs/N_filtered); magnitude_filtered = abs(X_filtered)/N_filtered; figure; subplot(2,1,1); plot(t,filtered_signal); title('滤除三次和五次谐波信号后的对比结果'); xlabel('时间(s)'); ylabel('幅值'); subplot(2,1,2); plot(f_filtered(1:N_filtered/2),2*magnitude_filtered(1:N_filtered/2)); title('滤波后波形频谱分析(FFT分析)结果'); xlabel('频率(Hz)'); ylabel('幅值');

这部分和前面原始信号的频谱分析类似,对滤波后的信号filtered_signal进行FFT变换,生成频率向量,计算幅值谱,然后绘制滤波后信号的时域图和频域图,和原始信号的图对比,就能清晰看到谐波被滤除的效果啦。

通过以上Matlab代码,我们就完成了基于FFT的频谱分析、谐波提取以及自定义频段滤波的操作,而且保证了滤波前后波形的相位和幅值特性。在实际应用中,比如电力系统信号处理、音频信号处理等领域,这种方法都能发挥很大的作用。希望这篇博文能给大家在信号处理方面带来一些启发和帮助呀。

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

Runway ML视频编辑软件集成HunyuanOCR添加自动字幕

Runway ML集成HunyuanOCR实现智能字幕生成:多模态AI在视频创作中的落地实践 在短视频日均产量突破千万条的今天,内容创作者面临的核心矛盾愈发凸显——用户对高质量、多语言、无障碍字幕的需求持续攀升,而传统制作流程仍严重依赖人工或单一语…

作者头像 李华
网站建设 2026/3/12 11:34:42

抖音短视频推广:30秒教会你部署自己的OCR大模型

抖音短视频推广:30秒教会你部署自己的OCR大模型 在抖音这样的短视频平台上,每天都有海量视频上传——课程讲解、产品广告、生活记录……这些视频中往往包含大量嵌入式字幕、海报信息或说明书截图。如何让机器“读懂”这些图文内容,自动提取关…

作者头像 李华
网站建设 2026/3/13 3:28:40

es客户端分页查询优化实战案例(从零实现)

从深分页卡顿到毫秒响应:一次真实的 ES 客户端分页优化实践你有没有遇到过这样的场景?前端同学点开日志查询页面,翻到第 500 页时,接口直接卡了七八秒才返回——用户以为系统崩了,运维却在后台看着协调节点的 CPU 疯狂…

作者头像 李华
网站建设 2026/3/12 18:50:44

Zapier自动化流程:连接HunyuanOCR与其他SaaS工具

Zapier自动化流程:连接HunyuanOCR与其他SaaS工具 在财务人员每天面对几十张供应商发票、法务团队反复核对合同条款的办公场景中,一个共同的痛点浮现出来:大量时间被消耗在从图像或扫描件中手动提取信息上。更棘手的是,这些文档往往…

作者头像 李华
网站建设 2026/3/13 21:27:21

性价比之选:RTX 3090能否流畅运行HunyuanOCR?

性价比之选:RTX 3090能否流畅运行HunyuanOCR? 在智能文档处理需求爆发的今天,企业对OCR系统的要求早已不止“把图片转成文字”这么简单。从银行票据自动录入到跨境电商业务中的多语言合同解析,再到医疗报告结构化归档,…

作者头像 李华
网站建设 2026/3/13 18:09:05

Unity3D项目中调用HunyuanOCR接口实现AR文本翻译

Unity3D项目中调用HunyuanOCR接口实现AR文本翻译 在智能设备日益普及的今天,用户对“所见即所得”的跨语言交互体验提出了更高要求。尤其是在教育、旅游和工业维护等场景中,如何让普通用户一眼看懂外文标识、说明书或广告牌上的内容,已成为增…

作者头像 李华