R上的小波阈值化

brccelvz  于 9个月前  发布在  其他
关注(0)|答案(1)|浏览(81)

从信号中去除噪声的一种方法是应用离散小波变换,应用阈值(软或硬),然后运行逆离散小波变换以恢复没有噪声的原始信号。
R语言有dwt和idwt函数(包小波)来执行离散小波变换和逆离散小波变换,dwt的输出是W(小波系数)和V(尺度系数)。
我的问题是:阈值应该应用于W,V或两者?为什么?我在这里错过了一些东西,因为对我来说应该是W,但它没有工作。
范例:

library(wavelets)
w <- dwt(series_with_noise, filter="la16")
w@W$W1 <- treshold_function(w@W$W1, lambda) # Should I do this?
w@V$V1 <- treshold_function(w@V$V1, lambda) # Should I do this?
series_denoised <- idwt(w)
plot(series_denoised)

字符串
如果我取消所有w@W但保持V,idwt不会改变。不知道为什么=/。

ie3xauqp

ie3xauqp1#

如果要进行平滑,则应修改W值。例如:

set.seed(123)
t <- seq(0, 2*pi, len = 512)
x <- sin(t) + rnorm(512)
plot(t, x)

library(wavelets)
wt <- dwt(x, filter = "la16")

names(wt@W)
#> [1] "W1" "W2" "W3" "W4" "W5"
wt@W$W1 <- 0*wt@W$W1
wt@W$W2 <- 0*wt@W$W2
wt@W$W3 <- 0*wt@W$W3
wt@W$W4 <- 0*wt@W$W4
wt@W$W5 <- 0*wt@W$W5

y <- idwt(wt)
lines(t, y, lwd=3)

字符串
x1c 0d1x的数据
创建于2023-12-30使用reprex v2.0.2

相关问题