1次元マルチレベル離散ウェーブレット変換

Fortranによるサンプルソースコード : 使用ルーチン名:c09ccf

ホーム > 製品 > nAG数値計算ライブラリ > nAG Fortranライブラリ > サンプルソースコード集 > 1次元マルチレベル離散ウェーブレット変換

Keyword: 1次元, マルチレベル, 離散, ウェーブレット変換

概要

本サンプルは1次元マルチレベル離散ウェーブレット変換を行うFortranによるサンプルプログラムです。 本サンプルは以下に示される64個の要素をもつ配列についてDaubechiesウェーブレットを用いて1次元マルチレベル離散ウェーブレット変換を行い、多重分解のレベル数、各レベルの変換係数、ウェーブレット変換の係数とウェーブレットの再構成を出力します。

1次元マルチレベル離散ウェーブレット変換のデータ 

※本サンプルはnAG Fortranライブラリに含まれるルーチン c09ccf() のExampleコードです。本サンプル及びルーチンの詳細情報は c09ccf のマニュアルページをご参照ください。
ご相談やお問い合わせはこちらまで

入力データ

(本ルーチンの詳細はc09ccf のマニュアルページを参照)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

このデータをダウンロード
C09CCF Example Program Data
 64                                  : n
 DB4  Zero                           : 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=DB4)とデータの端部拡張(End Extension)の手法を示すパラメータ(mode=Zero)を指定しています。この場合"DB4"は4つの消失モーメントがある Daubechies ウェーブレットを使用することを意味し、"Zero"はデータの端部をゼロパディング(ゼロ詰め)することを意味します。
  • 4~16行目に配列の要素(x)を指定しています。

出力結果

(本ルーチンの詳細はc09ccf のマニュアルページを参照)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

この出力例をダウンロード
 C09CCF Example Program Results
  MLDWT :: Wavelet : DB4       , End mode : Zero       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行目に入力データである配列の要素が出力されています。
  • 12行目に実行される多重分解のレベルの数が出力されています。
  • 14行目に各レベルの変換係数の数が出力されています。左から最終レベル(レベル6)の分解の近似係数の数、詳細係数の数、レベル5からレベル1までの詳細係数の数が出力されています。
  • 16から28行目にマルチレベルウェーブレット変換の係数が出力されています。
  • 30から37行目にウェーブレット再構成が出力されています。

ソースコード

(本ルーチンの詳細はc09ccf のマニュアルページを参照)

※本サンプルソースコードは科学技術・統計計算ライブラリである「nAG Fortranライブラリ」のルーチンを呼び出します。
サンプルのコンパイル及び実行方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79

このソースコードをダウンロード
    PROGRAM c09ccfe

!      C09CCF Example Program Text

!      Mark 23 Release. nAG Copyright 2011.

!      .. Use Statements ..
       USE nag_library, ONLY : c09aaf, c09ccf, c09cdf, nag_wp
!      .. Implicit None Statement ..
       IMPLICIT NONE
!      .. Parameters ..
       INTEGER, PARAMETER              :: nin = 5, nout = 6
!      .. Local Scalars ..
       INTEGER                         :: ifail, lenc, n, nf, nnz, nwc, nwl, ny
       CHARACTER (10)                  :: mode, wavnam, wtrans
!      .. Local Arrays ..
       REAL (KIND=nag_wp), ALLOCATABLE :: c(:), x(:), y(:)
       INTEGER, ALLOCATABLE            :: dwtlev(:)
       INTEGER                         :: icomm(100)
!      .. Intrinsic Functions ..
       INTRINSIC                          sum
!      .. Executable Statements ..
       WRITE (nout,*) 'C09CCF Example Program Results'
!      Skip heading in data file
       READ (nin,*)
!      Read problem parameters
       READ (nin,*) n
       READ (nin,*) wavnam, mode
       ALLOCATE (x(n),y(n))

       WRITE (nout,99999) wavnam, mode, n

!      Read data array and write it out

       READ (nin,*) x(1:n)

       WRITE (nout,*) ' Input Data      X :'
       WRITE (nout,99998) x(1:n)

!         Query wavelet filter dimensions
!         For Multi-Resolution Analysis, decomposition, wtrans = 'M'
       wtrans = 'Multilevel'

!         ifail: behaviour on error exit   
!                =0 for hard exit, =1 for quiet-soft, =-1 for noisy-soft
       ifail = 0
       CALL c09aaf(wavnam,wtrans,mode,n,nwl,nf,nwc,icomm,ifail)

       lenc = nwc
       ALLOCATE (c(lenc),dwtlev(nwl+1))

!      Perform Discrete Wavelet transform
       ifail = 0
       CALL c09ccf(n,x,lenc,c,nwl,dwtlev,icomm,ifail)

       WRITE (nout,99997) nwl
       WRITE (nout,99996)
       WRITE (nout,99995) dwtlev(1:nwl+1)
       nnz = sum(dwtlev(1:nwl+1))
       WRITE (nout,99994)
       WRITE (nout,99998) c(1:nnz)

!      Reconstruct original data
       ny = n

       ifail = 0
       CALL c09cdf(nwl,lenc,c,ny,y,icomm,ifail)

       WRITE (nout,99993)
       WRITE (nout,99998) y(1:ny)

99999  FORMAT (1X,' MLDWT :: Wavelet : ',A10,', End mode : ',A10,' N = ',I10)
99998  FORMAT (8(F8.4,1X):)
99997  FORMAT (1X,' Number of Levels : ',I10)
99996  FORMAT (1X,' Number of coefficients in each level : ')
99995  FORMAT (8(I8,1X):)
99994  FORMAT (1X,' Wavelet coefficients C : ')
99993  FORMAT (1X,' Reconstruction              Y : ')
    END PROGRAM c09ccfe


関連情報
© 日本ニューメリカルアルゴリズムズグループ株式会社 2025
Privacy Policy  /  Trademarks