public static void TestJWave() { double[][] mat = Get2DTestData(); WaveletInterface wavelet = null; wavelet = new Haar02(); TransformInterface bWave = null; //bWave = new FastWaveletTransform(wavelet); //bWave = new WaveletPacketTransform(wavelet); bWave = new DiscreteWaveletTransform(wavelet); Transform t = new Transform(bWave); // perform all steps Console.Write("\n\nThe 2D JWave Haar02 Dwt method: "); Console.Write("\n"); double[][] dwtArray = t.forward(mat); Matrix dwtMatrix = new Matrix(dwtArray); dwtMatrix.Print(); Console.Write("\n\nThe 2D JWave Haar02 Inverse Dwt method: "); Console.Write("\n"); double[][] idwtArray = t.reverse(dwtArray); Matrix idwtMatrix = new Matrix(idwtArray); idwtMatrix.Print(); }
private void showGraph(DiscreteWaveletTransform rs, int level, int flag) { if (level >= 0 && flag == 0) { formsPlot1.plt.PlotSignal(changeValue(rs.Detail.ToList <Double>(), 0.1, level).ToArray(), label: "第" + level + "层的细节"); showGraph(rs.UpperScale, level - 1, flag); } else if (level >= 0 && flag == 1) { formsPlot1.plt.PlotSignal(changeValue(rs.Approximation.ToList <Double>(), 0.1, level).ToArray(), label: "第" + level + "层的概貌"); showGraph(rs.UpperScale, level - 1, flag); } }
private void DWT() { while (start) { lock (data) { if (!data.IsEmpty && !stop) { data.TryDequeue(out List <Double> res); Signal <Double> sig = new Signal <double>(res.ToArray()); formsPlot1.plt.Clear(); try { int level = Convert.ToInt32(this.ResolveText.Text); DiscreteWaveletTransform rs = DiscreteWaveletTransform.Estimate(sig, Wavelets.Daubechies(2), new ZeroPadding <Double>()); DiscreteWaveletTransform rs1 = rs.EstimateMultiscale(new ZeroPadding <Double>(), level); if (showType == 0) { //formsPlot1.plt.PlotSignal(rs.Detail.ToArray(), label: "第一层细节"); showGraph(rs1, level, showType); } else { //formsPlot1.plt.PlotSignal(rs1.Approximation.ToArray(), label: "第一层概貌"); showGraph(rs1, level, showType); } formsPlot1.plt.Legend(); formsPlot1.Render(); } catch (Exception e) { Console.WriteLine(e.Message); } } } } }