当前位置: 首页 > news >正文

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

http://www.jsqmd.com/news/189867/

相关文章:

  • 从零实现aarch64裸机启动至C语言main函数调用
  • BeautifulSoup搭档HunyuanOCR:完整解析图文混合网页
  • 用Python脚本自动化调用IndexTTS2 API,实现批量语音生成
  • 基于日特征气象因素的支持向量机负荷预测之旅
  • 换行符与空格识别准确性:影响后续NLP处理的关键
  • 利用vh6501完成busoff注入一文说清
  • 聊聊我开发的在线视觉打标系统
  • 头条号自媒体运营:面向企业客户推广HunyuanOCR解决方案
  • 使用GitHub镜像站快速克隆IndexTTS2项目,节省90%等待时间
  • 深入探究 Statcom(SVG):无功补偿与谐波检测的得力助手
  • es连接工具与Mock Server集成实践案例
  • 实战案例:模拟一个新手遇到HBuilderX无法运行的全过程
  • 探索三电平变换器:NPC与ANPC的奇妙世界
  • 电动汽车电池更换站布局的最优规划:MATLAB实现之旅
  • HunyuanOCR+Stable Diffusion:图文互生创意工作流
  • 博物馆展品介绍牌识别:打造无障碍参观体验
  • QQ群裂变策略:建立HunyuanOCR用户交流群促传播
  • 网易号新闻发布:结合腾讯背景讲述HunyuanOCR品牌故事
  • 零基础入门工业控制中的树莓派插针定义使用
  • 动态shape输入支持情况:不同分辨率图片自适应能力
  • Arduino寻迹小车搭建指南:手把手教程(基于Uno)
  • 相比百度文字识别API,HunyuanOCR有何成本优势?
  • ESP32开发入门第一步:正确安装驱动与端口识别
  • Markdown输出支持:让HunyuanOCR直接生成结构化文档
  • Tauri Rust框架调用HunyuanOCR提升安全性与性能
  • HunyuanOCR在Electron桌面应用中的集成实践
  • 手把手ESP32教程:上传第一个Blink程序
  • 图解说明树莓派连接继电器控制家电原理
  • CAPL脚本优化上层测试逻辑:高效实践指南
  • Arduino平台下ESP32中断处理机制核心要点