Keyword: 1次元, 離散, ウェーブレット変換
概要
本サンプルは1次元離散ウェーブレット変換を行うC#によるサンプルプログラムです。 本サンプルは以下に示される8個の要素をもつ配列についてDaubechies ウェーブレットを用いて1次元離散ウェーブレット変換を行い、近似係数、詳細係数とウェーブレットの再構成を出力します。
※本サンプルはnAG Library for .NETに含まれる関数 c09ca() のExampleコードです。本サンプル及び関数の詳細情報は c09ca のマニュアルページをご参照ください。
ご相談やお問い合わせはこちらまで
入力データ
(本関数の詳細はc09ca のマニュアルページを参照)| このデータをダウンロード |
c09ca Example Program Data 8 : N 'DB4' 'Z' : WAVNAM, MODE 1.0 3.0 5.0 7.0 6.0 4.0 5.0 2.0 : X(1:N)
- 1行目はタイトル行で読み飛ばされます。
- 2行目に入力データである配列の要素の数(n)を指定しています。
- 3行目にどのウェーブレット法を使用するかを示すパラメータ(wavnam)とデータの端部拡張(End Extension)の手法を示すパラメータ(mode)を指定しています。"DB4" は、4つの消失モーメントがある Daubechies ウェーブレットを使用することを意味し、"Z" はデータの端部をゼロパディング(ゼロ詰め)することを意味します。
- 4〜11行目に配列(x)の要素を指定しています。
出力結果
(本関数の詳細はc09ca のマニュアルページを参照)| この出力例をダウンロード |
c09ca Example Program Results DWT :: Wavelet: DB4 , End mode: Z Input Data x : 1.0000 3.0000 5.0000 7.0000 6.0000 4.0000 5.0000 2.0000 Approximation coefficients CA : 0.0011 -0.0043 -0.0174 4.4778 8.9557 7.3401 2.5816 Detail coefficients CD : 0.0237 0.0410 -0.5966 1.7763 -0.7517 0.3332 -0.1188 Reconstruction Y : 1.0000 3.0000 5.0000 7.0000 6.0000 4.0000 5.0000 2.0000
- 2行目にウェーブレット変換の手法とデータの端部拡張(End Extension)のモードが出力されています。
- 4行目に入力データである配列の要素が出力されています。
- 6行目に近似係数が出力されています。
- 9行目に詳細係数が出力されています。
- 10行目にウェーブレット再構成が出力されています。
ソースコード
(本関数の詳細はc09ca のマニュアルページを参照)
※本サンプルソースコードは .NET環境用の科学技術・統計計算ライブラリである「nAG Library for .NET」の関数を呼び出します。
サンプルのコンパイル及び実行方法
| このソースコードをダウンロード |
// c09ca Example Program Text
// C# version, nAG Copyright 2008
using System;
using NagLibrary;
namespace NagDotNetExamples
{
public class C09CAE
{
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/c09cae.d");
}
else
{
sr = new DataReader(datafile);
}
int i, n, nwc, ny; string wtrans="";
int ifail;
Console.WriteLine("c09ca Example Program Results");
// Skip heading in data file
sr.Reset();
// Read N
sr.Reset();
n = int.Parse(sr.Next());
// Read wavnam, 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(" {0} {1,5} {2} {3,5}","DWT :: Wavelet: ",wavnam,", End mode: ",mode);
// Read array
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}", x[i - 1]);
}
Console.WriteLine();
// Query wavelet filter dimensions
wtrans = "S";
//
C09.C09Communications c09comm = new C09.C09Communications(wavnam, wtrans, mode, n,
out ifail);
nwc = c09comm.ApproximateCoeffCount;
//
if (ifail != 0)
{
Console.WriteLine(" ** C09Communications constructor with ifail = {0, 3}", ifail);
return;
}
//
double[] ca = new double[nwc];
double[] cd = new double[nwc];
C09.c09ca(n, x, ca, cd, c09comm, out ifail);
//
if (ifail == 0)
{
Console.WriteLine(" Approximation coefficients CA : ");
for (i = 1 ; i <= nwc ; i++)
{
Console.Write(" {0, 8:f4}", ca[i - 1]);
}
Console.WriteLine();
Console.WriteLine(" Detail coefficients CD : ");
for (i = 1 ; i <= nwc ; i++)
{
Console.Write(" {0, 8:f4}", cd[i - 1]);
}
Console.WriteLine();
}
else
{
Console.WriteLine("");
Console.WriteLine(" ** c09ca returned with ifail = {0, 3}", ifail);
}
if (mode == "PE")
{
ny = 2 * nwc;
}
else
{
ny = (int)n;
}
//
//
C09.c09cb(ca, cd, ny, y, c09comm, out ifail);
//
if (ifail == 0)
{
Console.WriteLine(" Reconstruction Y : ");
for (i = 1 ; i <= ny ; i++)
{
Console.Write(" {0, 8:f4}", y[i - 1]);
}
Console.WriteLine();
}
else
{
Console.WriteLine(" {0} {1}","Error in c09cb: ifail = ",ifail);
}
//
}
//
}
catch (Exception e)
{
Console.WriteLine(e.Message);
Console.WriteLine("Exception Raised");
}
}
}
}
