你这个问题提的有点大。。。
有很多种类的小波,一般先根据输入信号的类型选择用哪一种,不同的小波对应的
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")
-----------
希望帮到你