哈儿小波分解和重构(降维和升维)实现算法
int span = (int) pow(2, curResolution);
for (int i = 0; i < span; i++) {temp[2*i] = rawitem[i] + rawitem[i+span];temp[2*i+1] = rawitem[i] - rawitem[i+span];
}
if(ClusterData.resolutionLength < ClusterData.dimension) {for (int j = ClusterData.resolutionLength-1; j >= 0 ; j--) { ClusterData.centroid[i][2*j] = ClusterData.centroid[i][j];ClusterData.centroid[i][2*j+1] = ClusterData.centroid[i][j];}
}
1.1)定义:哈尔小波变换分为哈尔小波分解和重构。本文利用哈尔小波分解和哈尔小波重构分别对社交网络中的时间序列进行降维和升维操作,而分解降维和重构升维互为逆过程,这里以哈尔小波分解降维步骤为例进行说明。
1.2)哈尔小波分解(重构是其逆过程):可以被看作是一系列对离散时间函数的均值和差操作。本文计算离散函数f(t),即时间序列元素值的每两个相邻值间的均值和差。找出离散函数f(t)={9, 7, 3, 5}的哈尔小波分解过程如下表所示:
分辨率 级别 |
分辨率 (维度) |
均值 |
差值 |
哈尔小波 分解系数 |
降维后的 时序 |
全分辨率下的时序 |
2 |
4 |
{9,7,3,5} |
{9,7,3,5} |
{9,7,3,5} |
||
1 |
2 |
{8,4} |
{1,-1} |
{8,4,1,-1} |
{8,4} |
{8,8,4,4} |
0 |
1 |
{6} |
{2} |
{6,2,1,-1} |
{6} |
{6,6,6,6} |
对上表的分析(Analysis):
【2】将上述哈尔小波分解过程用倒置二叉树表示如下:
【3】看个荔枝
public class HaarTransform{public static int maxResolution;/*** executing haar reconstruction transform towards given array* @param rawitem raw array* @param curResolution current resolution*/public static void haarReconstruct(double[] rawitem, int curResolution) {double[] temp = new double[rawitem.length];System.arraycopy(rawitem, 0, temp, 0, temp.length);int span = (int) pow(2, curResolution);for (int i = 0; i < span; i++) {temp[2*i] = rawitem[i] + rawitem[i+span];temp[2*i+1] = rawitem[i] - rawitem[i+span];}System.arraycopy(temp, 0, rawitem, 0, temp.length);}/*** @param rawitem is a array* @param leastResolution is the least resolution allowed be zero.* @param maxResolution is equals to log(full dimension)* @return*/public static double[] haarDecompose(double[] rawitem, int leastResolution) {double[] temp = new double[rawitem.length];int resolutionLength = rawitem.length; int maxResolution = HaarTransform.maxResolution;// if rawitem.length=8, maxResolution = 3; // you know least resolution equals to 0.for (int i = maxResolution; i > leastResolution; i--) {System.out.println("第"+i+"级分辨率下");AlgTools.printOneDimArray(rawitem);for (int j = 0; j < resolutionLength / 2; j++) {temp[j] = (rawitem[2*j] + rawitem[2*j+1]) / 2;temp[resolutionLength/2+j] = (rawitem[2*j] - rawitem[2*j+1]) / 2;}resolutionLength /= 2;System.arraycopy(temp, 0, rawitem, 0, temp.length);}return temp;}
}
public class HaarTransformTest {public static void main(String[] args) {double[] data = {2, 5, 8, 9, 7, 4, -1, 1};int resolutionNum = (int) (log(data.length) / log(2));System.out.println("分辨率总级别个数为: " + resolutionNum);HaarTransform.maxResolution = resolutionNum;int leastResolution = 0;HaarTransform.haarDecompose(data, leastResolution);System.out.println("最低级分辨率"+leastResolution+"下");AlgTools.printOneDimArray(data);// 哈儿小波分解over.for (int i = leastResolution; i < resolutionNum; i++) {HaarTransform.haarReconstruct(data, i);System.out.println("第"+ (i+1) + "级分辨率下");AlgTools.printOneDimArray(data);}// 哈儿小波重构over.}
}
循环次数 round |
分辨率级别 i |
分辨率级别的对应维度 resolutionLength |
j(max) |
下一分辨率级别 的维度sum |
1 |
3 |
8 |
3(0~3) |
4 |
2 |
2 |
4 |
1(0~1) |
2 |
3 |
1 |
2 |
0(0~0) |
1 |
4 |
0 |
1 |
||
5.2)打印结果(共8维)(也可以指定哈尔小波分解的最低级分辨率,如1,2,但最小是0)
分辨率总级别个数为: 3
第3级分辨率下2.000 5.000 8.000 9.000 7.000 4.000 -1.000 1.000
第2级分辨率下3.500 8.500 5.500 0.000 -1.500 -0.500 1.500 -1.000
第1级分辨率下6.000 2.750 -2.500 2.750 -1.500 -0.500 1.500 -1.000
最低级分辨率0下4.375 1.625 -2.500 2.750 -1.500 -0.500 1.500 -1.000
第1级分辨率下6.000 2.750 -2.500 2.750 -1.500 -0.500 1.500 -1.000
第2级分辨率下3.500 8.500 5.500 0.000 -1.500 -0.500 1.500 -1.000
第3级分辨率下2.000 5.000 8.000 9.000 7.000 4.000 -1.000 1.000
哈儿小波分解和重构(降维和升维)实现算法相关推荐
- python小波分解与重构_小波分解和重构
小波变换能够很好地表征一大类以低频信息为主要成分的信号, 小波包变换可以对高频部分提供更精细的分解 详见(http://www.cnblogs.com/welen/articles/5667217.h ...
- python小波分解与重构_python - 使用pyWavelets进行多级局部小波重构 - 堆栈内存溢出...
我设法编写了自己的wrcoef函数版本,该版本似乎可以正常工作: import pywt import numpy as np def wrcoef(X, coef_type, coeffs, wav ...
- 多元经验模态分解_交通运输|基于小波分解和长短时记忆网络的地铁进站量短时预测...
山东科学 ›› 2019, Vol. 32 ›› Issue (4): 56-63.doi: 10.3976/j.issn.1002-4026.2019.04.008 摘要: 针对城市地铁车站进站客流 ...
- 一维信号小波去噪算法C语言,[转载]一维小波分解与去噪重构
对随机一维信号实现多尺度小波分解,长度M=256,层数N=3. 解:一维随机信号是用nelec函数作为信号源,产生0~256范围内的信号. 实现小波按层分解的函数是: [C,L]=wavedec(s, ...
- MATLAB小波分解/重构wavedec/waverec函数中L和C的意义
这两天在做用小波阈值法进行信号去噪的问题,需要将信号进行五层小波分解,每进行一层分解时都将该层得到的细节系数CDi进行一次阈值化处理.这可以通过多次调用matlab中的dwt函数来实现.但是,在信号进 ...
- python小波分解wavelet去噪重构
前言 采用小波分解方式对数据进行分解,然后重构,演示整体代码 代码 import pywt import matplotlib.pyplot as plt import pandas as pdsam ...
- 小波降噪与重构例子 python
原理讲解 傅里叶变换 关于傅里叶变换的基本概念在此我们就不再赘述了, 下面我们主要将傅里叶变换的不足.即我们知道傅里叶变化可以分析信号的频谱,那么为什么还要提出小波变换?答案"对非平稳过程, ...
- matlab dwt 多层分解,利用matlab对图片进行多层小波分解 会的加QQ511607771 加过作图之后积分加倍送...
利用matlab对图片进行多层小波分解 会的加QQ511607771 加过作图之后积分加倍送 mip版 关注:96 答案:2 悬赏:0 解决时间 2021-01-23 13:02 已解决 202 ...
- 小波分解与小波包分解代码_分解的功能参数和代码可维护性
小波分解与小波包分解代码 Code keeps changing, there's no doubt about that. We always do our best to set some roc ...
最新文章
- 前端Vue学习之路(五)插件的使用
- Matlab与线性代数 -- 矩阵的左除
- RequireJS示例
- 学习String的内容
- iOS开发-证书问题精析~
- Css fade()函数降低颜色变量透明度
- 英伟达DALI加速技巧:让数据预处理速度比原生PyTorch快4倍
- tensorflow-yolo3系列配置文章汇总
- vml入门教程 【转】
- ANN 神经网络介绍
- Atitit insert插入数据 目录 1.1. INSERT INTO SET这种方式可读性更好	1 1.1.1. 方式4、INSERT INTO 表名 SET 列名1 = 列值1,列名2=列值
- 使用css控制gridview控件的样式,GridView 样式美化及应用.doc
- JSON对象与JSON模式
- English--动名词
- python判断图像是否为灰度图
- 程序集(dll) 安装到 GAC 程序集添加到VS引用开窗(转)
- PhraseQuery slop
- 【Mysql】InnoDB 中 B+ 树索引的注意事项
- 刚刚!百度副总裁被抓!
- DeAuth 无线信道MDK3攻击辅助工具
热门文章
- Codeforces Round #715 (Div. 2) C. The Sports Festival 区间dp
- Codeforces Round #703 (Div. 2) D . Max Median 二分 +思维
- 【NOI2007】货币兑换【任意坐标斜率优化】【CDQ分治】
- 牛客练习赛76 E 牛牛数数(线性基加二分)
- P2825 [HEOI2016/TJOI2016]游戏
- 不止代码:路径数量(ybtoj-最小生成树)
- POJ3734-Blocks【EGF】
- jzoj3859-孤独一生【dp,树状数组】
- MATLAB灰色预测
- SpringCloud Consul自定义服务注册