百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

MATLAB进行HANTS时间序列数据的平滑滤波

moboyou 2025-04-28 22:34 15 浏览

本文介绍在MATLAB中,实现基于HANTS算法(时间序列谐波分析法)的长时间序列数据去噪、重建、填补的详细方法。

HANTS(Harmonic Analysis of Time Series)是一种用于时间序列分析和插值的算法。它基于谐波分析原理,可以从观测数据中提取出周期性变化的信号成分,并进行数据插值和去噪处理。这一算法的主要思想是将时间序列数据分解为多个不同频率的谐波成分,并通过拟合这些成分来重构原始数据。该算法适用于具有任意周期性的时间序列,可以处理缺失值和异常值,并能够保留原始数据的整体趋势和周期性。

那么在本文中,我们就介绍一下在MATLAB中,基于我们自己的数据,进行HANTS算法处理的方法。

首先,由于HANTS算法整体非常精密、复杂,因此我们直接下载一位MATLAB用户撰写好的HANTS算法代码包即可,无需自己手动撰写这一部分的代码。下载方法也很简单,大家进入HANTS算法代码包在MATLAB的官方网站即可。进入网站后,如果大家是第一次使用MATLAB的官方网站,需要注册、登录一下自己的账号;随后,选择屏幕右上角的“Download”选项即可;如下图所示。

下载完毕后,我们将压缩包解压,即可看到如下图所示的文件列表。

其中,实现HANTS算法的程序其实就是上图中的前两个文件(也就是ApplyHants.m文件与HANTS.m文件),作者将HANTS算法写成了这两个函数,我们在使用时直接调用这两个函数中的一个即可。其中,第一个函数,也就是ApplyHants.m文件对应的函数,适用于输入数据为多维的情况;而如果我们的数据是一维的,例如常见的对NDVI时序数据、遥感反射率时序数据加以重建,那么就用上图中第二个函数,也就是HANTS.m文件对应的函数即可。

接下来,我们就可以开始对自己的数据加以HANTS算法处理了。在本文中,我们的需求是这样的:在一个文件夹中,包含有大量的.csv文件,其中每一个文件都具有如下图所示的格式。

其中,第一行为列名,第一列为时间,后面的列都是不同遥感影像波段反射率的时间序列数据。我们希望,对这一文件夹下所有的.csv文件进行遍历,对其中每一个.csv文件的每一列(除了第一列,因为第一列是表示时间的数据)加以HANTS算法处理。

明确了具体需求,我们就可以开始撰写代码。前面已经提到了,HANTS算法的代码不用我们自己写,就用下载好函数即可;我们只需要将数据读取、数据预处理、结果保存等部分的代码写好,同时按照自己数据的实际情况,配置一下HANTS算法的各个参数即可。

本文用到的代码如下。

clear;

ni = 414;
nb = 365 * 8 + 361;
nf = 9;
ts = 1 : 8 : (414 * 8 + 1);
HiLo = "none";
low = 0;
high = 1;
fet = 0.1;
dod = 1;
delta = 0.1;
all_file_path = "E:\01_Reflectivity\99_Model_Training\00_Data\02_Extract_Data\16_8DaysSynthesis_After";
output_path = "E:\01_Reflectivity\99_Model_Training\00_Data\02_Extract_Data\17_HANTS";

files = dir(fullfile(all_file_path, "*.csv"));
for i = 1:numel(files)
    file_path = fullfile(all_file_path, files(i).name);
    column_data = readtable(file_path, "ReadVariableNames",true);
    column_name = column_data.Properties.VariableNames;
    column_index = 2 : 8;
    for j = column_index
        one_column_name = column_name{j};
        one_column_data = column_data.(one_column_name);
        [amp, phi, yr] = HANTS(ni, nb, nf, one_column_data, ts, "none", low, high, fet, dod, delta);
%         [amp_Hi, phi_Hi, yr_Hi] = HANTS(ni, nb, nf, one_column_data, ts, "Hi", low, high, fet, dod, delta);
%         [amp_Lo, phi_Lo, yr_Lo] = HANTS(ni, nb, nf, one_column_data, ts, "Lo", low, high, fet, dod, delta);
        column_data.(one_column_name) = yr;
    end
    save_file_name = fullfile(output_path, files(i).name);
    writetable(column_data, save_file_name, "Delimiter", ",");
end

% plot(one_column_data, "b.-");
% hold on;
% plot(yr, "r.-");
% plot(yr_Hi, "k.-");
% plot(yr_Lo, "g.-");
% legend("Original", "none", "Hi", "Lo");

其中,这段代码的作用是对每个.csv文件中的指定列数据应用HANTS算法进行处理,并将处理后的数据保存为新的.csv文件。具体流程如下:

  1. 定义了两个文件路径:
  • all_file_path:待处理的.csv文件所在文件夹路径;
  • output_path:保存处理后数据的文件夹路径。
  1. 使用dir函数获取指定文件夹中所有以.csv结尾的文件。
  2. 遍历每个文件:
  • 构建当前文件的完整路径。
  • 使用readtable函数读取.csv文件数据,并保留列名。
  • 获取需要处理的列索引(2到8列)。
  • 遍历这些列索引: 获取当前列的名称和数据。 调用`HANTS`函数对列数据进行处理,得到处理后的数据(存储在`yr`中)。 将处理后的数据替换原来的列数据。
  • 构建保存处理后数据的文件名,并使用writetable函数将column_data保存为.csv文件。

这里需要注意,HANTS算法的几个参数,大家就依据自己数据的实际情况来设置即可,具体每一个参数的含义在代码包中的HANTS.m文件内就有介绍。通过如上的代码,我们即可实现本文的需求。为了进一步验证HANTS算法是否执行正确,我们可以简单地绘制一个算法处理前后的时间序列数据对比图,如下图所示。

可以看到,经过HANTS算法处理,我们的数据已经平滑了许多。

至此,大功告成。

欢迎关注:疯狂学习GIS

相关推荐

声学EI要完稿?十步速写法

【推荐会议】国际声学与振动会议(ICAV)会议号:CFP23112A截稿时间:2025年4月20日召开时间/地点:2025年8月15-17日·新加坡论文集上线:会后3个月提交EiComp...

结构力学!EI会议图表规范秘籍

推荐会议:国际结构与材料工程进展大会(ISME2026)会议编号:EI#73521截稿时间:2026年3月10日召开时间/地点:2026年8月15-17日·德国柏林论文集上线:会后4...

傅里叶级数物理意义的直观理解:利用傅里叶级数逼近方波信号

上篇文章将向大家介绍频谱的概念,对傅里叶级数、傅里叶积分、傅里叶变换进行了数学的推导,并解释了它们各自的物理意义。推导过程见我的上一篇文章:频谱分析——频谱概念(傅里叶变换、级数、积分及物理意义)如下...

通过对航空发动机整机振动进行分析,有何控制方法?

前言针对航空发动机整机振动问题的复杂性和多样性,以整机振动的振源分析为出发点,总结国内外关于转子系统故障、气流激振、轴承故障、齿轮故障和结构局部共振等引起的整机振动的研究情况。结合航空发动机整机结构动...

MATLIB中使用PCA

主成分分析PCA(PrincipalComponentsAnalysis),奇异值分解SVD(Singularvaluedecomposition)是两种常用的降维方法降维致力于解决三类问题:降维...

数据处理|软件:让科研更简单2

书接上回,继续介绍免费的数据处理软件。eGPS一款热图绘制专用软件,热图就是用颜色代表数字,让数据呈现更直观,对比更明显。优点:小巧方便,基本功能齐全,包括数据转换、聚类分析、颜色调整等等缺点:常见的...

电力系统常用的通讯协议及其在Speedgoat系统中的实现

在电力系统中,IEC61850协议、DNP3协议、ModbusTCP广泛应用于远程终端设备(RTU)、智能电子设备(IED)交互以及监控和数据采集(SCADA)系统。一、IEC61850协议IE...

电子工程师的常用仿真软件

不知道从事电子行业的工程师,有没有使用模拟仿真工具,仿真软件网上又有很多,初学者,可能只知道Multisim和Proteus。一般Multisim适合在学习模拟电路和电路分析原理课程时使用,便于理解电...

技术论文|异结构混沌系统的组合同步控制及电路实现

欢迎引用[1]李贤丽,马赛,樊争先,王壮,马文峥,于婷婷.异结构混沌系统的组合同步控制及电路实现[J].自动化与仪器仪表,2022,No.276(10):80-84.DOI:10.14016/j.cn...

现场︱某110KV主变事故过程仿真分析

三峡电力职业学院、河南省电力公司洛阳供电公司的研究人员李莉、任幼逢、徐金雄、王磊,在2016年第6期《电气技术》杂志上撰文,针对某110KV变电站主变差动保护跳闸事故,结合事故相关检测数据,通过MAT...

光伏发电系统篇:单级式并网系统实时仿真

在全球积极推动清洁能源转型的大背景下,光伏发电作为重要的可再生能源利用方式,得到了广泛关注和迅猛发展。目前常用的光伏并网及光伏电站主要拓扑结构有单级式和双级式。相较于传统的多级式系统,单级式光伏发电并...

光伏发电系统篇:三电平并网逆变器实时仿真

一、三电平并网逆变器在能源转型加速的当下,分布式能源接入电网需求大增。三电平并网逆变器凭借低谐波、高功率密度等优势,有效提升电能转换效率,于新能源并网发电中担当关键角色。常见的三电平电路拓扑结构包括二...

自制3.5KW大功率逆变器,很简单,看过这个电路原理就懂了

前言拿下8000元奖金的项目,是什么水平?本项目经过联合湖南科技大学光伏逆变以及电力电子研究生团队共同探讨方案。项目成本:1200元,获得奖金:8000元!参加赛事:立创开源硬件平台_星火计划·外包赛...

圈内分享:电容式加速度计接口电路非线性建模与仿真设计

摘要:非线性是Sigma-Delta(ΣΔ)加速度计系统的关键指标之一。基于一个五阶ΣΔ加速度计结构,分析了其主要的非线性模块,在MATLAB中建立了整体结构的行为级模型,并利用根轨迹法进行了稳...

基于Matlab/Simulink建立一种Thevenin/RC电池模块仿真模型

本文以锂电池数学模型为基础,在Matlab/Simulink的仿真系统中,建立了一种Thevenin/RC电池模块仿真模型,通过实际工况试验,测试精度在允许误差范围内,为电池SOC/SOH研究提供了极...