自定义小波
自定义小波
| WaveletQ | 如果该函数是一个自定义小波,则设为 True |
正交小波和双正交自定义小波(user wavelet)都被支持. 通过设置属性 wfam[args]["OrthogonalQ"] 表明正交小波,相应地,通过设置属性 wfam[args]["BiorthogonalQ"] 表明双正交小波.
如要计算原低通滤波器系数,必须设置属性 wfam[args]["PrimalLowpass",prec];这里,prec 表示滤波器系数的精度. 相似地,要计算对偶低通滤波器系数,必须设置属性 "DualLowpass". 属性 "PrimalLowpass" 和 "DualLowpass" 一般返回形如
的列表,其中
是索引而
是相应的滤波器系数. 如果返回的是形如
的列表,则假定索引
从0开始. 如果滤波器系数
不是数值的,并且索引
不是整数,则生成一个错误信息.
Franklin 小波
FranklinWavelet[lim_Integer]["WaveletQ"] := TrueFranklinWavelet[lim_]["OrthogonalQ"] := Truea[k_] := Sqrt[3] HypergeometricPFQRegularized[{(1/2), (1/2), 1}, {1 - k, 1 + k}, -2]Z[k_, n_] := (1/24) a[2 k - n - 2] + (1/4) a[2 k - n - 1] + (5/12) a[2 k - n] + (1/4) a[2 k - n + 1] + (1/24) a[2 k - n + 2]FranklinWavelet[lim_Integer]["PrimalLowpass", prec_ : MachinePrecision] := ParallelTable[{n, N[Total[Table[a[k] Z[k, n], {k, -15, 15}]], prec]}, {n, -lim, lim}]wave = FranklinWavelet[14];WaveletFilterCoefficients[wave]Plot[WaveletPhi[wave, x], {x, -5, 5}, PlotRange -> All]swt = StationaryWaveletTransform[DiamondMatrix[32], wave, 2]WaveletMatrixPlot[swt, ImageSize -> 75]勒让德(Legendre)小波
LegendreWavelet[n_Integer]["WaveletQ"] := True虽然勒让德小波不是正交的,若要执行小波变换,用户需要将正交性设置为 True:
LegendreWavelet[n_]["OrthogonalQ"] := TrueLegendreWavelet[n_]["PrimalLowpass", prec_ : MachinePrecision] := With[{ν = 2 n - 1}, N[(1/2^2 ν)Table[Binomial[2 k, k] Binomial[2 ν - 2 k, ν - k], {k, 0, 2 n - 1}], prec]]WaveletFilterCoefficients[LegendreWavelet[2], WorkingPrecision -> ∞]WaveletFilterCoefficients[LegendreWavelet[3], WorkingPrecision -> ∞]Plot[WaveletPhi[LegendreWavelet[2], x], {x, 0, 3}]Plot[WaveletPsi[LegendreWavelet[2], x], {x, -1, 2}]dwd = DiscreteWaveletTransform[[image], LegendreWavelet[3], 2]WaveletImagePlot[dwd]Le Gall 小波
LeGallWavelet[]["WaveletQ"] := TrueLeGallWavelet[]["OrthogonalQ"] := FalseLeGallWavelet[]["BiorthogonalQ"] := TrueLeGallWavelet[]["PrimalLowpass", prec_ : MachinePrecision] := Transpose[{{-1, 0, -1}, N[{(1/2), 1, (1/2)}, prec]}]LeGallWavelet[]["DualLowpass", prec_ : MachinePrecision] := Transpose[{Range[-2, 2], N[{-(1/8), (1/4), (3/4), (1/4), -(1/8)}, prec]}]data = Table[Tanh[t^2] + RandomReal[NormalDistribution[0, 0.02]], {t, -2π, 2π, 4π / 1023}];利用 Le Gall 小波执行 StationaryWaveletTransform:
dwd = StationaryWaveletTransform[data, LeGallWavelet[]]thr = WaveletThreshold[dwd, "SURE"]{ListLinePlot[data, PlotLabel -> "original", PlotRange -> All], ListLinePlot[InverseWaveletTransform[thr], PlotLabel -> "thresholded", PlotRange -> All]}相关指南
-
▪
- 小波分析