全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
7122 9
2016-04-30
怎么用R对原始数据进行小波分析得到去噪声后数据呢?很困惑啊,求解答~
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2016-4-30 11:27:11
急需代码!!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-4-30 21:18:18
你这个问题提的有点大。。。
有很多种类的小波,一般先根据输入信号的类型选择用哪一种,不同的小波对应的
R代码就千差万别了,以下是我写的一段完整的滤波程序,16个输入信号,16个输出信号,
采用最简单的小波哈尔小波进行最简单的滤波处理:

#定义1级及2级阀值
Threshold1 <- 5
Threshold2 <- 7

#定义1级及2级滤波补偿系数
m1 <- 1
m2 <- 1

#输入原始数据,前16分钟收盘价
close <- c(4024,4024,4002,4009,4012,4014,4010,4009,4012,4003,4004,3993,3997,4000,4000,4001)

#计算2级近似系数
Va2 <- c(
                close[1]+close[2]+close[3]+close[4],
                close[5]+close[6]+close[7]+close[8],
                close[9]+close[10]+close[11]+close[12],
                close[13]+close[14]+close[15]+close[16]
            )

#归一化2级近似系数
Wa2 <- c(
                Va2[1]/2,
                   Va2[2]/2,
                Va2[3]/2,
                Va2[4]/2
           )

#计算2级细节系数
Vd2 <- c(
                close[1]+close[2]-close[3]-close[4],
                close[5]+close[6]-close[7]-close[8],
                close[9]+close[10]-close[11]-close[12],
                close[13]+close[14]-close[15]-close[16]
            )

#以阀值2为门限进行滤波
for (i in 1:4) {
                                if (Vd2[i]>Threshold2)
                                        {
                                                Vd2[i] <- (Vd2[i]-Threshold2)*m2
                                        }
                                else
                                        {
                                                if (Vd2[i]< -Threshold2)
                                                        {
                                                                Vd2[i] <- (Vd2[i]+Threshold2)*m2
                                                        }
                                                else
                                                        {
                                                                Vd2[i] <- 0
                                                        }
                                        }
                        }

#归一化2级细节系数
Wd2 <- c(
                Vd2[1]/2,
                Vd2[2]/2,
                Vd2[3]/2,
                Vd2[4]/2
            )

#计算1级细节系数
Vd1 <- c(
                close[1]-close[2],
                close[3]-close[4],
                close[5]-close[6],
                close[7]-close[8],
                close[9]-close[10],
                close[11]-close[12],
                close[13]-close[14],
                close[15]-close[16]
            )

#以阀值1为门限进行滤波

for (i in 1:8) {
                                if (Vd1[i] > Threshold1)
                                        {
                                                Vd1[i] <- (Vd1[i]-Threshold1)*m1
                                        }
                                else
                                        {
                                                if (Vd1[i]< -Threshold1)
                                                        {
                                                                Vd1[i] <- (Vd1[i]+Threshold1)*m1
                                                        }
                                                else
                                                        {
                                                                Vd1[i] <- 0
                                                        }
                                        }
                        }


#归一化1级细节系数
Wd1 <- c(
                Vd1[1]/sqrt(2),
                Vd1[2]/sqrt(2),
                Vd1[3]/sqrt(2),
                Vd1[4]/sqrt(2),
                Vd1[5]/sqrt(2),
                Vd1[6]/sqrt(2),
                Vd1[7]/sqrt(2),
                Vd1[8]/sqrt(2)
            )

#2级近似分解
a2 <- c(
                Va2[1]/4,Va2[1]/4,Va2[1]/4,Va2[1]/4,
                Va2[2]/4,Va2[2]/4,Va2[2]/4,Va2[2]/4,
                Va2[3]/4,Va2[3]/4,Va2[3]/4,Va2[3]/4,
                Va2[4]/4,Va2[4]/4,Va2[4]/4,Va2[4]/4
           )

#2级细节
d2 <- c(
                Vd2[1]/4,Vd2[1]/4,-Vd2[1]/4,-Vd2[1]/4,
                Vd2[2]/4,Vd2[2]/4,-Vd2[2]/4,-Vd2[2]/4,
                Vd2[3]/4,Vd2[3]/4,-Vd2[3]/4,-Vd2[3]/4,
                Vd2[4]/4,Vd2[4]/4,-Vd2[4]/4,-Vd2[4]/4
           )

#1级细节
d1 <- c(
                Vd1[1]/2,-Vd1[1]/2,
                Vd1[2]/2,-Vd1[2]/2,
                Vd1[3]/2,-Vd1[3]/2,
                Vd1[4]/2,-Vd1[4]/2,
                Vd1[5]/2,-Vd1[5]/2,
                Vd1[6]/2,-Vd1[6]/2,
                Vd1[7]/2,-Vd1[7]/2,
                Vd1[8]/2,-Vd1[8]/2
           )

#重组信号
closenew <- c(1:16)
for (i in 1:16) {
        closenew[i] <- a2[i]+d2[i]+d1[i]
        }

#输出图形
par(lab=c(20,5,7))
plot(close,type="b")
lines(closenew,type="b",col="red")

-----------
希望帮到你
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-5-1 10:55:28
sparc10 发表于 2016-4-30 21:18
你这个问题提的有点大。。。
有很多种类的小波,一般先根据输入信号的类型选择用哪一种,不同的小波对应的 ...
谢谢你的分享!!!我是想利用一些气象指标时间序列的数据,通过小波去噪处理,用去噪声后的数据建立回归模型,那这样的话要用什么方法得到去噪后的数据呢?没学过小波分析,不太懂啊~
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-5-1 10:59:13
zdd。。 发表于 2016-5-1 10:55
谢谢你的分享!!!我是想利用一些气象指标时间序列的数据,通过小波去噪处理,用去噪声后的数据建立回归 ...
我的数据有点多,用这个不太方便,请问还有其它简便一点的方法吗?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-5-1 11:01:14
sparc10 发表于 2016-4-30 21:18
你这个问题提的有点大。。。
有很多种类的小波,一般先根据输入信号的类型选择用哪一种,不同的小波对应的 ...
我的数据有点多,用这个不太方便,请问还有其它简便一点的方法吗?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群