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

【MATLAB】去除趋势项(解决频谱图大部分为零的问题)

1.概 述

在许多实际信号分析处理中信号经FFT变换后得到的频谱谱线值几乎都为0,介绍这是如何形成的,又该如何去解决。

2.案例分析

读入一组实验数据文件(文件名为qldata.mat),作出该组数据的频谱图。程序清单如下:

clear; clc; close all;
load qldata.mat                  % 读入数据
sig=y;N=length(sig);             % 数据长度
time=(0:N-1)/fs;                 % 时间刻度
% 第一部分
% 作图
subplot 211; plot(time,sig,'k'); ylim([0 15]);
title('有趋势项的数据')
xlabel('时间/s'); ylabel('幅值');
subplot 212; Hutu_FFT(sig, fs)
title('有趋势项的数据频谱')
xlabel('频率/Hz'); ylabel('幅值');
set(gcf,'color','w');

运行程序得到 qldata.mat文件数据的波形图和频谱图,如图所示。

从图来看,谱图中什么都没有,似乎都为0,这怎么解释呢?如果把该频谱图中的低频部分放大,在0频率(直流)处有一个很大的分量,而其他频率分量都很小,所以在0频率处有一个峰值,然后就衰减下来。我们再仔细观察一下图的波形图,在该波形中有一个明显的趋势项,正因为该趋势项的存在而使得谱分析中有很大的直流分量。

3.解决方法

为了得到较好的谱分析,对于任意一组数据序列都应先消除直流分量和趋势项。趋势项又分为线性趋势项和多项式趋势项,这里主要讨论消除线性趋势项,介绍消除多项式趋势项。在MATLAB中有mean函数求出直流分量,由detrend函数消除线性趋势项

mean函数的调用格式如下:xm =mean(x)

其中:x是一个含有直流分量的一维序列;xm是该序列的直流分量。要消除直流分量可写为其中:xd是消除直流分量后的数据序列。

detrend 函数调用格式如下:xd= detrend(x)

其中:x是一个含有趋势项的一维序列;xd是消除趋势项后的数据序列。

利用 detrend 函数消除了 qldata.mat文件数据中的趋势项,并做FFT谱分析,得到消除趋势项后数据的频谱。程序pr225第二部分就是按这样的思路编写的,程序清单如下:

% 第二部分
% 作图
x=detrend(y);                    % 消除趋势项
figure
subplot 211; plot(time,x,'k'); ylim([-5 5]);
title('消除趋势项后的数据')
xlabel('时间/s'); ylabel('幅值');
subplot 212; Hutu_FFT(x, fs)
title('消除趋势项后的数据频谱')
xlabel('频率/Hz'); ylabel('幅值');
set(gcf,'color','w');

运行程序第二部分后得图所示波形图和频谱图从图中可看到,已没有很大的直流分量,频谱图能正常显示出来。

获取代码请关注MATLAB科研小白的个人公众号(即文章下方二维码),并回复去除趋势项本公众号致力于解决找代码难,写代码怵。各位有什么急需的代码,欢迎后台留言~不定时更新科研技巧类推文,可以一起探讨科研,写作,文献,代码等诸多学术问题,我们一起进步。

http://www.lryc.cn/news/354976.html

相关文章:

  • jmeter发送webserver请求和上传请求
  • 如何看centos 有没有安装x11
  • 超详细的前后端实战项目(Spring系列加上vue3)前后端篇(四)(一步步实现+源码)
  • 决策树|随机森林 GBDT XGBoost|集成学习
  • 【C语言实现TCP通信】
  • 黑马点评-短信登录
  • CentOS7 部署单机版 elasticsearch
  • Mujoco仿真【xml文件的学习 4】
  • vue数据持久化仓库
  • OrangePi AIpro评测 - 基础操作篇
  • 不含一阶导数项的线性二阶微分方程的通解
  • Redis篇 String
  • 【vue-2】v-on、v-show、v-if及按键修饰符
  • 华为交换机基础实验----VLAN基础
  • Vue3学习使用axios和qs进行POST请求和响应处理
  • 张大哥笔记:赚钱高手养成计划---如何将一份时间产生N份收入?
  • excel里如何将数据分组转置?
  • WHAT - 前端安全性测试和常见攻击手段
  • 重量and体积,不要在傻傻的花冤枉钱寄快递了!
  • docker ps显示的参数具体是什么意思
  • 【C++】多态:编程中的“一人千面”艺术
  • 【必备工具】gitee上传-保姆级教程
  • P1115 最长子段和
  • 02 FreeRTOS 任务
  • NSS题目练习4
  • 【算法】合并k个已排序的链表
  • 【Muduo】三大核心之EventLoop
  • ubuntu安装完桌面后如何启动
  • 知识融合概述
  • LIO-EKF: High Frequency LiDAR-Inertial Odometry using Extended Kalman Filters