Keyword: 1次元, マルチレベル, 離散, ウェーブレット変換
概要
本サンプルは1次元マルチレベル離散ウェーブレット変換を行うC#によるサンプルプログラムです。 本サンプルは以下に示される64個の要素をもつ配列についてDaubechiesウェーブレットを用いて1次元マルチレベル離散ウェーブレット変換を行い、多重分解のレベル数、各レベルの変換係数、ウェーブレット変換の係数とウェーブレットの再構成を出力します。
※本サンプルはnAG Library for .NETに含まれる関数 c09cc() のExampleコードです。本サンプル及び関数の詳細情報は c09cc のマニュアルページをご参照ください。
ご相談やお問い合わせはこちらまで
入力データ
(本関数の詳細はc09cc のマニュアルページを参照)このデータをダウンロード |
c09cc Example Program Data 64 : N 'DB4' 'Z' : WAVNAM, MODE 6.5271 6.512 6.5016 6.5237 6.4625 6.3496 6.4025 6.4035 6.4407 6.4746 6.5095 6.6551 6.61 6.5969 6.6083 6.652 6.7113 6.7227 6.7196 6.7649 6.7794 6.8037 6.8308 6.7712 6.7067 6.769 6.7068 6.7024 6.6463 6.6098 6.59 6.596 6.5457 6.547 6.5797 6.5895 6.6275 6.6795 6.6598 6.6925 6.6873 6.7223 6.7205 6.6843 6.703 6.647 6.6008 6.6061 6.6097 6.6485 6.6394 6.6571 6.6357 6.6224 6.6073 6.6075 6.6379 6.6294 6.5906 6.6258 6.6369 6.6515 6.6826 6.7042 : X(1:N)
- 1行目はタイトル行で読み飛ばされます。
- 2行目に入力データである配列の要素の数(n)を指定しています。
- 3行目にどのウェーブレット法を使用するかを示すパラメータ(wavnam)とデータの端部拡張(End Extension)の手法を示すパラメータ(mode)を指定しています。"DB4" は、4つの消失モーメントがある Daubechies ウェーブレットを使用することを意味し、"Z" はデータの端部をゼロパディング(ゼロ詰め)することを意味します。
- 4〜16行目に配列(x)の要素を指定しています。
出力結果
(本関数の詳細はc09cc のマニュアルページを参照)この出力例をダウンロード |
c09cc Example Program Results MLDWT :: Wavelet : DB4, End mode : Z N = 64 Input Data x : 6.5271 6.5120 6.5016 6.5237 6.4625 6.3496 6.4025 6.4035 6.4407 6.4746 6.5095 6.6551 6.6100 6.5969 6.6083 6.6520 6.7113 6.7227 6.7196 6.7649 6.7794 6.8037 6.8308 6.7712 6.7067 6.7690 6.7068 6.7024 6.6463 6.6098 6.5900 6.5960 6.5457 6.5470 6.5797 6.5895 6.6275 6.6795 6.6598 6.6925 6.6873 6.7223 6.7205 6.6843 6.7030 6.6470 6.6008 6.6061 6.6097 6.6485 6.6394 6.6571 6.6357 6.6224 6.6073 6.6075 6.6379 6.6294 6.5906 6.6258 6.6369 6.6515 6.6826 6.7042 Number of Levels : 6 Number of coefficients in each level : 7 7 8 10 14 21 35 Wavelet coefficients C : 0.0000 -0.0227 -0.3446 2.7574 -10.1970 44.8800 15.9443 0.0010 -0.4881 -10.2673 11.3258 -1.7469 2.0785 -0.7334 -0.0054 -0.1402 -5.8980 -1.1527 5.5613 2.1352 0.3203 -0.4004 0.0010 0.5229 0.5055 -2.7274 -0.0911 -0.2806 -0.3669 2.9467 -0.3799 -0.1552 0.0218 0.0922 5.4626 -2.1620 0.5196 -0.0287 -0.0199 0.0920 -0.0134 -0.1298 -5.5168 2.3105 -0.5383 -0.0155 0.3057 0.6186 -1.5542 0.2682 0.1566 0.0030 -0.0152 -0.0589 0.0126 0.0063 0.0171 -0.0268 0.0077 -0.0189 0.0207 0.0104 -0.3207 -0.6062 1.6288 -0.2414 -0.0671 3.1657 -1.1462 0.2785 0.0523 -0.0030 -0.0270 -0.0442 0.0090 0.0171 -0.0230 -0.0015 0.0213 -0.0402 -0.0263 -0.0099 0.0021 -0.0250 0.0210 -0.0028 -0.0298 -0.0095 0.0034 0.0281 -0.0188 -0.0002 -0.0173 -0.0076 -0.0014 0.0184 -0.0318 0.0048 0.0047 -3.2555 1.1710 -0.2913 Reconstruction Y : 6.5271 6.5120 6.5016 6.5237 6.4625 6.3496 6.4025 6.4035 6.4407 6.4746 6.5095 6.6551 6.6100 6.5969 6.6083 6.6520 6.7113 6.7227 6.7196 6.7649 6.7794 6.8037 6.8308 6.7712 6.7067 6.7690 6.7068 6.7024 6.6463 6.6098 6.5900 6.5960 6.5457 6.5470 6.5797 6.5895 6.6275 6.6795 6.6598 6.6925 6.6873 6.7223 6.7205 6.6843 6.7030 6.6470 6.6008 6.6061 6.6097 6.6485 6.6394 6.6571 6.6357 6.6224 6.6073 6.6075 6.6379 6.6294 6.5906 6.6258 6.6369 6.6515 6.6826 6.7042
- 2行目にウェーブレット変換の手法、データの端部拡張(End Extension)のモードと入力された配列の要素の数が出力されています。
- 4〜11行目に入力データである配列の要素が出力されています。
- 13行目に実行される多重分解のレベルの数が出力されています。
- 14行目に各レベルの変換係数の数が出力されています。左から最終レベル(レベル6)の分解の近似係数の数、詳細係数の数、レベル5からレベル1までの詳細係数の数が出力されています。
- 17から29行目にマルチレベルウェーブレット変換の係数が出力されています。
- 31から38行目にウェーブレット再構成が出力されています。
ソースコード
(本関数の詳細はc09cc のマニュアルページを参照)
※本サンプルソースコードは .NET環境用の科学技術・統計計算ライブラリである「nAG Library for .NET」の関数を呼び出します。
サンプルのコンパイル及び実行方法
このソースコードをダウンロード |
// c09cc Example Program Text // C# version, nAG Copyright 2008 using System; using NagLibrary; namespace NagDotNetExamples { public class C09CCE { static bool defaultdata = true; static string datafile = ""; static void Main(String[] args) { if (args.Length == 1) { defaultdata = false; datafile = args[0]; } StartExample(); } public static void StartExample() { try { DataReader sr = null; if (defaultdata) { sr = new DataReader("exampledata/c09cce.d"); } else { sr = new DataReader(datafile); } int i, n, nf, nnz, nwc, nwl, ny; string wtrans=""; int ifail; Console.WriteLine("c09cc Example Program Results"); // Skip heading in data file sr.Reset(); // Read N - length of input data sequence sr.Reset(); n = int.Parse(sr.Next()); // Read Wavelet name (wavnam) and end mode (mode) sr.Reset(); string wavnam = sr.Next(); string mode = sr.Next(); // double[] x = new double[n]; double[] y = new double[n]; if (n >= 2) { Console.WriteLine(" MLDWT :: Wavelet : {0,10}, End mode : {1,10} N = {2,10}",wavnam,mode,n); // // Read data array and write it out // sr.Reset(); for (i = 1 ; i <= n ; i++) { x[i - 1] = double.Parse(sr.Next()); } // Console.WriteLine(" {0}"," Input Data x :"); for (i = 1 ; i <= n ; i++) { Console.Write(" {0, 8:f4}{1}", x[i - 1], i%8==0?"\n":""); } Console.WriteLine(); // // Query wavelet filter dimensions // For Multi-Resolution Analysis, decomposition, wtrans = 'M' // wtrans = "M"; C09.C09Communications c09comm = new C09.C09Communications(wavnam, wtrans, mode, n, out ifail); nwl = c09comm.ResolutionLevelCount; nf = c09comm.FilterLength; nwc = c09comm.ApproximateCoeffCount; // if (ifail != 0) { Console.WriteLine(" ** C09Communications constructor returned with ifail = {0, 3}", ifail); return; } double[] c = new double[nwc]; int[] dwtlev = new int[nwl+1]; // // Perform Discrete Wavelet transform // C09.c09cc(n, x, c, dwtlev, c09comm, out ifail); // if (ifail == 0) { Console.WriteLine(" Number of Levels : {0,10}",nwl); Console.WriteLine(" Number of coefficients in each level : "); for (i = 1 ; i <= nwl + 1 ; i++) { Console.Write(" {0, 8}", dwtlev[i - 1]); } Console.WriteLine(); nnz = 0; for (i = 1 ; i <= nwl + 1 ; i++) { nnz = nnz + dwtlev[i - 1]; } Console.WriteLine(" Wavelet coefficients C : "); for (i = 1 ; i <= nnz ; i++) { Console.Write(" {0, 8:f4}{1}", c[i - 1], i%8==0?"\n":""); } Console.WriteLine(); // // Reconstruct original data // ny = (int)n; C09.c09cd(c, ny, y, c09comm, out ifail); // if (ifail != 0) { Console.WriteLine(" ** c09cd returned with ifail = {0, 3}", ifail); } else { Console.WriteLine(" Reconstruction Y : "); for (i = 1 ; i <= ny ; i++) { Console.Write(" {0, 8:f4}{1}", y[i - 1], i%8==0?"\n":""); } Console.WriteLine(); } } else { Console.WriteLine(" ** c09cc returned with ifail = {0, 3}", ifail); } // } // } catch (Exception e) { Console.WriteLine(e.Message); Console.WriteLine("Exception Raised"); } } } }