news 2026/4/15 14:47:40

基于matlab的FFT分析和滤波程序,可对数据信号进行频谱分析,分析波形中所含谐波分量,并可...

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于matlab的FFT分析和滤波程序,可对数据信号进行频谱分析,分析波形中所含谐波分量,并可...

基于matlab的FFT分析和滤波程序,可对数据信号进行频谱分析,分析波形中所含谐波分量,并可以对特定频率波形进行提取。 不需要通过示波器观察,直接导入数据即可,快捷便利。 程序带有详细注释, 图a为原始信号,图b为原始信号FFT分析结果,图c为提取 50Hz基波信号的结果对比,图d为滤波后的FFT分析结果,效果非常好!

一、程序概述

本文档详细说明两套基于MATLAB的信号处理程序(aFFTFilter.m 与 bFFTFilter.m)的功能实现、核心逻辑、参数配置及使用场景。两套程序均围绕快速傅里叶变换(FFT)频谱分析椭圆滤波器滤波两大核心功能展开,分别适用于生成信号分析外部数据导入分析场景,可实现信号谐波分量识别、特定频率信号提取等关键需求,适用于电子测量、信号处理实验、工程数据解析等领域。

二、程序核心功能总览

两套程序的核心功能框架一致,均包含“信号获取/生成→FFT频谱分析→椭圆滤波→滤波后频谱验证”四大模块,具体差异及功能对应关系如下表所示:

功能模块a_FFT_Filter.mb_FFT_Filter.m
信号来源程序内部生成多谐波合成信号外部导入MAT文件(U1.mat)数据
核心分析FFT频谱分析,识别谐波分量FFT频谱分析,解析原始数据频率构成
滤波功能低通滤波,提取低频目标信号低通滤波,滤除高频干扰信号
可视化输出4个子图(原始波形、滤波波形、原始频谱、滤波后频谱)4个子图(原始波形、滤波波形、原始频谱、滤波后频谱)
适用场景算法验证、理论分析、已知信号模型测试实际数据处理、实验数据解析、外部采集信号分析

三、详细功能解析

(一)公共基础功能

两套程序均依赖MATLAB信号处理工具箱,核心基础功能包括环境初始化、频谱分析算法、滤波算法及可视化配置,具体如下:

1. 环境初始化

程序启动时执行以下操作,确保分析环境干净无干扰:

clear; % 清除工作区变量 clc; % 清空命令行窗口 close all; % 关闭所有已打开的图形窗口
2. FFT频谱分析(核心算法)

频谱分析的目的是将时域信号转换为频域信号,识别信号中包含的谐波分量(基波及各次谐波的频率、幅值),核心步骤如下:

  1. 信号输入:接收时域信号(a程序为生成的y1,b程序为导入的y1);
  2. FFT计算:通过Y = fft(y1)对时域信号进行快速傅里叶变换,得到复数形式的频域信号Y;
  3. 幅值归一化
    - 计算双边谱幅值:P2 = abs(Y/L)(L为信号长度,abs()取复数模值,除以L实现幅值归一化);
    - 提取单边谱:P1 = P2(1:L/2+1)(由于FFT结果对称,仅需取前半段即可覆盖0~Fs/2频率范围,Fs为采样频率);
    - 修正幅值:P1(2:end-1) = 2*P1(2:end-1)(除直流分量和 Nyquist 频率外,单边谱幅值需乘以2,以匹配实际信号幅值);
  4. 频率轴生成f = Fs*(0:(L/2))/L,生成与单边谱对应的频率轴,确保频率与幅值一一对应。
3. 椭圆滤波器滤波(核心算法)

两套程序均采用椭圆低通滤波器(Elliptic Filter)实现特定频率信号提取/干扰滤除,椭圆滤波器的优势是在相同阶数下具有更陡的滚降特性,能有效分离相邻频率信号,核心步骤如下:

  1. 滤波参数配置
    - 通带截止频率fp:允许通过的最高频率(需根据目标信号频率设置);
    - 阻带截止频率fs:需要抑制的最低频率(需大于fp,形成过渡带);
    - 通带波纹rp:通带内允许的最大幅值波动(单位:dB,值越小滤波越平稳);
    - 阻带衰减rs:阻带内信号的最小衰减量(单位:dB,值越大干扰抑制效果越好);
  2. 滤波器阶数计算:通过[N,wp] = ellipord(wp,ws,rp,rs)计算满足参数要求的最小滤波器阶数N和修正后的通带截止频率wp(其中wp=2fp/Fsws=2fs/Fs为归一化频率,范围0~1);
  3. 滤波器系数生成:通过[B,A] = ellip(N,rp,rs,wp)生成椭圆滤波器的传递函数系数(B为分子系数,A为分母系数);
  4. 零相位滤波:通过filtfilt(B,A,y1)实现信号滤波,filtfilt函数为双向滤波,可避免常规filter函数的相位失真,确保滤波后信号与原信号相位一致。
4. 可视化配置

两套程序均采用4个子图(subplot(2,2,1)~subplot(2,2,4))展示结果,图形配置统一规范:

  • 坐标标签:x轴为“时间/s”或“频率/Hz”,y轴为“幅值/mV”(a程序)或“幅值/(a.u.)”(b程序,a.u.为任意单位,适配外部数据);
  • 字体设置:中文采用宋体,英文/数字采用Times New Roman,字号统一为10号;
  • 辅助功能:网格显示(grid on)、波形线型区分(原始信号为实线,滤波信号为红色虚线)。

(二)a_FFT_Filter.m 功能详解(生成信号分析)

1. 核心定位

该程序用于验证FFT分析与滤波算法的正确性,通过生成已知频率成分的合成信号,对比滤波前后的频谱变化,直观验证算法效果。

2. 关键参数与信号生成
f1=50;% 基波频率:50Hz f2=3*f1;% 3次谐波:150Hz f3=5*f1;% 5次谐波:250Hz Fs=10*f3;% 采样频率:2500Hz(满足奈奎斯特采样定理,Fs>2*f3) t=0:1/Fs:0.5;% 时间序列:0~0.5s,步长为1/Fs(采样周期) y1=100*sin(2*pi*f1*t)+45*sin(2*pi*f2*t)+20*sin(2*pi*f3*t);% 合成信号:基波(幅值100mV)+3次谐波(45mV)+5次谐波(20mV)
  • 可选功能:取消注释y1 = y1 + 0.1*randn(size(t)),可给合成信号添加高斯白噪声,用于测试滤波器的抗干扰能力。
3. 滤波目标与参数
  • 滤波目标:提取50Hz基波信号,滤除150Hz、250Hz谐波;
  • 关键参数:fp=60Hz(允许50Hz基波通过)、fs=100Hz(抑制100Hz以上信号)、rp=0.05dB(通带波纹小,滤波平稳)、rs=40dB(阻带衰减大,谐波抑制彻底)。
4. 输出结果说明
子图位置展示内容核心作用
(2,2,1)原始合成信号波形(前500个采样点)直观查看时域下的多谐波叠加波形
(2,2,3)原始信号FFT频谱(0~500Hz)验证是否能识别50Hz、150Hz、250Hz三个频率分量,幅值与设定值一致
(2,2,2)原始信号与滤波信号对比波形观察滤波后信号的平滑度,验证基波提取效果
(2,2,4)滤波后信号FFT频谱验证150Hz、250Hz谐波是否被抑制,仅保留50Hz基波

(三)b_FFT_Filter.m 功能详解(外部数据导入分析)

1. 核心定位

该程序用于处理实际采集的外部数据,支持导入MAT格式文件(U1.mat),适用于实验数据、传感器采集数据等场景的频谱分析与滤波。

2. 数据导入与配置
load('U1.mat');% 导入外部数据(需替换为自定义MAT文件) % 数据格式要求: % - 默认:列形式(如1000×2,第1列为时间/采样点,第2列为信号幅值); % - 若为行形式(如2×1000),需取消注释`U1=U1';`进行转置。
  • 采样参数配置(需根据实际数据修改):
    matlab
    Fs=1000;% 采样频率(需与数据采集时的实际频率一致)
    Datanum=1500;% 读取的数据长度(需小于等于导入数据的总长度)
    Start
    num=1;% 数据起始索引(从第1个数据点开始读取)
    Endnum=Datanum+Startnum-1;% 数据结束索引
    t=(0:N-1)*T;% 时间序列(T=1/Fs为采样周期)
    y1=U1(2,Start
    num:End_num);% 提取第2列的目标数据用于分析
3. 滤波目标与参数
  • 滤波目标:滤除300Hz以上的高频干扰,保留300Hz以下的有效信号;
  • 关键参数:fp=60Hzfs=300Hzrp=0.1dBrs=60dB(阻带衰减更大,适合抑制高频噪声)。
4. 输出结果说明
子图位置展示内容核心作用
(2,2,1)外部导入数据的原始波形(前200个采样点)查看实际数据的时域特征(如是否含噪声、波动趋势)
(2,2,3)原始数据FFT频谱分析实际数据的频率构成,识别有效信号与干扰频率
(2,2,2)原始数据与滤波数据对比波形观察滤波对实际数据的优化效果(如噪声是否减弱)
(2,2,4)滤波后数据FFT频谱验证高频干扰是否被抑制,有效信号频率是否保留

四、参数修改指南

(一)通用参数修改(两套程序均适用)

  1. 滤波参数调整
    - 若需提取更高频率的信号:增大fp(如提取100Hz信号,设fp=110Hz),同时增大fs(如fs=150Hz),确保过渡带合理(fs-fp建议为20~50Hz);
    - 若需更强的抗干扰能力:增大rs(如rs=80dB),但可能导致滤波器阶数升高,计算量增加;
    - 若需更平稳的滤波效果:减小rp(如rp=0.01dB)。
  2. 频谱显示范围
    - 修改axis([0 500 0 105])中的参数,前两个值为频率范围(如[0 1000 0 200]表示显示0~1000Hz频率、0~200mV幅值)。

(二)a_FFT_Filter.m 专属参数

  1. 信号频率与幅值
    - 修改f1(基波频率)、f2(2次谐波,如4f1)、f3(3次谐波,如6f1)可调整谐波次数;
    - 修改1004520等数值可调整各谐波的幅值。
  2. 采样频率与时间长度
    -Fs需满足Fs>2*最高谐波频率(奈奎斯特采样定理),避免信号混叠;
    - 修改t=0:1/Fs:0.5中的0.5可调整信号的时间长度(如1.0表示1秒数据)。

(三)b_FFT_Filter.m 专属参数

  1. 数据导入配置
    - 替换load('U1.mat')中的U1.mat为自定义数据文件(需确保文件路径正确);
    - 若数据列数不同(如第3列为信号幅值),需修改y1=U1(2,Startnum:Endnum)y1=U1(3,Startnum:Endnum)
  2. 采样参数校准
    -Fs必须与数据采集时的实际采样频率一致(如采集时为2000Hz,需设Fs=2000),否则频谱分析结果会出现频率偏移;
    -Datanum需根据导入数据的总长度调整(如导入数据为5000个点,可设Datanum=3000)。

五、运行步骤与注意事项

(一)运行步骤

  1. 打开MATLAB软件,将程序文件(aFFTFilter.m 或 bFFTFilter.m)放入当前工作目录;
  2. 若运行b程序:将自定义数据文件(U1.mat)放入同一目录,确保数据格式符合要求;
  3. 根据需求修改参数(如采样频率、滤波频率、数据长度等);
  4. 点击MATLAB工具栏的“运行”按钮,或在命令行输入程序文件名(如aFFTFilter)并回车;
  5. 查看输出的4个子图,分析信号的时域波形与频域特征。

(二)注意事项

  1. 运行b程序时,若出现“文件未找到”错误:检查U1.mat文件路径是否正确,或文件名是否拼写错误;
  2. 若频谱出现混叠(频率分量显示异常):确保采样频率Fs大于2倍的最高信号频率;
  3. 若滤波效果不佳(目标信号被抑制或干扰未滤除):检查fpfs的设置是否合理(如目标信号频率是否在fp以下,干扰频率是否在fs以上);
  4. 若程序运行缓慢:可适当减小Data_num(减少数据长度)或降低rs(减少滤波器阶数)。

六、总结

两套程序通过“信号生成/导入→FFT频谱分析→椭圆滤波→结果可视化”的完整流程,实现了信号谐波识别与特定频率提取功能。a程序适用于算法验证和理论分析,可快速验证FFT与滤波算法的正确性;b程序适用于实际数据处理,支持外部数据导入,满足工程实验、传感器数据解析等场景需求。通过灵活调整参数,可适配不同频率范围、不同噪声水平的信号处理需求,具有较强的通用性和实用性。

基于matlab的FFT分析和滤波程序,可对数据信号进行频谱分析,分析波形中所含谐波分量,并可以对特定频率波形进行提取。 不需要通过示波器观察,直接导入数据即可,快捷便利。 程序带有详细注释, 图a为原始信号,图b为原始信号FFT分析结果,图c为提取 50Hz基波信号的结果对比,图d为滤波后的FFT分析结果,效果非常好!

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

一文说清JLink驱动安装无法识别的核心要点

一文讲透J-Link驱动装不上、认不出的底层逻辑与实战修复 你有没有遇到过这种情况: 手头项目正紧,调试关键时刻插上J-Link,结果设备管理器里只显示“未知设备”或带黄叹号的USB设备? Keil连不上,Ozone报错&#xff0…

作者头像 李华
网站建设 2026/4/12 7:15:39

arm版win10下载安装详解:小白也能轻松完成

手把手教你下载并安装arm版Win10:从零开始的完整实战指南 你是否曾好奇,为什么Surface Pro X能一边插着SIM卡上网,一边连续使用15小时?答案就藏在它运行的操作系统—— Windows on ARM 。这并不是普通的Windows 10,…

作者头像 李华
网站建设 2026/4/12 9:23:19

[特殊字符]_微服务架构下的性能调优实战[20260113171318]

作为一名经历过多个微服务架构项目的工程师,我深知在分布式环境下进行性能调优的复杂性。微服务架构虽然提供了良好的可扩展性和灵活性,但也带来了新的性能挑战。今天我要分享的是在微服务架构下进行性能调优的实战经验。 💡 微服务架构的性…

作者头像 李华
网站建设 2026/4/14 3:18:59

基于SVC和PSS的电力系统暂态稳定性研究 【软件】Matlab/Simulink、Word

基于SVC和PSS的电力系统暂态稳定性研究 【软件】Matlab/Simulink、Word; 【说明】通过仿真各类短路故障,验证静止无功补偿器(SVC)和电力系统稳定器(PSS)对于提高电力系统暂态稳定性的重要作用; 【文件】包括:Matlab/Simulink仿真模…

作者头像 李华
网站建设 2026/4/11 13:29:58

结合温升测试验证工业用PCB线宽电流对照表

温升实测揭秘:工业PCB走线到底能扛多大电流?从一个烧断的铜箔说起某天,一位工程师在调试一台工业变频器时发现,设备运行十几分钟后突然停机。检查发现,主板上一条看似“足够宽”的电源走线竟然局部碳化、断裂——而这根…

作者头像 李华
网站建设 2026/4/15 13:50:22

W5500与STM32结合的看门狗机制设计:操作指南

W5500与STM32协同看门狗设计:从原理到实战的完整指南你有没有遇到过这样的场景?一台部署在工厂角落的工业网关,连续运行了几周后突然“失联”——Ping不通、数据中断,但现场检查却发现设备电源正常,MCU似乎还在跑代码。…

作者头像 李华