OSDN Git Service

Merge branch 'matrix'
[karinto/karinto.git] / KarintoTest / WindowFunctionTest.cs
1 /*\r
2  *      Karinto Library Project\r
3  *\r
4  *      This software is distributed under a zlib-style license.\r
5  *      See license.txt for more information.\r
6  */\r
7 \r
8 using System;\r
9 using Karinto;\r
10 using NUnit.Framework;\r
11 \r
12 namespace KarintoTest\r
13 {\r
14     class WindowFunctionTest\r
15     {\r
16         private static double[] normal;\r
17         private static Range range;\r
18 \r
19         static WindowFunctionTest()\r
20         {\r
21             range = new Range(0, 10);\r
22             normal = new double[20];\r
23             for (int i = 0; i < normal.Length; ++i)\r
24             {\r
25                 normal[i] = 1.0;\r
26             }\r
27         }\r
28 \r
29         [Test]\r
30         public void FlatTop()\r
31         { \r
32             WindowFunction w = new WindowFunction(\r
33                 WindowFunction.FunctionType.FlatTop, range);\r
34             double[] s = w.ApplyTo(normal);\r
35 \r
36             double e = 1e-14;\r
37             // Maxima で計算(fpprec:18)\r
38             Assert.AreEqual(0.004, s[0], e);\r
39             Assert.AreEqual(-0.06876082640248495, s[1], e);\r
40             Assert.AreEqual(-0.316247584249852884, s[2], e);\r
41             Assert.AreEqual(0.248760826402484911, s[3], e);\r
42             Assert.AreEqual(2.81424758424985366, s[4], e);\r
43             Assert.AreEqual(4.64,s[5],e);\r
44             Assert.AreEqual(2.81424758424985366, s[6], e);\r
45             Assert.AreEqual(0.248760826402484911, s[7], e);\r
46             Assert.AreEqual(-0.316247584249852884, s[8], e);\r
47             Assert.AreEqual(-0.06876082640248495, s[9], e);\r
48             Assert.AreEqual(0.004,s[10],e);\r
49         }\r
50 \r
51         [Test]\r
52         public void Hamming()\r
53         {\r
54             WindowFunction w = new WindowFunction(\r
55                 WindowFunction.FunctionType.Hamming, range);\r
56             double[] s = w.ApplyTo(normal);\r
57 \r
58             double e = 1e-14;\r
59             // Maxima で計算(fpprec:18)\r
60             Assert.AreEqual(0.08, s[0], e);\r
61             Assert.AreEqual(0.167852182587524214, s[1], e);\r
62             Assert.AreEqual(0.397852182587524245, s[2], e);\r
63             Assert.AreEqual(0.682147817412475826, s[3], e);\r
64             Assert.AreEqual(0.912147817412475904, s[4], e);\r
65             Assert.AreEqual(1.0, s[5], e);\r
66             Assert.AreEqual(0.912147817412475904, s[6], e);\r
67             Assert.AreEqual(0.682147817412475826, s[7], e);\r
68             Assert.AreEqual(0.397852182587524245, s[8], e);\r
69             Assert.AreEqual(0.167852182587524214, s[9], e);\r
70             Assert.AreEqual(0.08, s[10], e);\r
71         }\r
72 \r
73         [Test]\r
74         public void Hann()\r
75         {\r
76             WindowFunction w = new WindowFunction(\r
77                 WindowFunction.FunctionType.Hann, range);\r
78             double[] s = w.ApplyTo(normal);\r
79 \r
80             double e = 1e-14;\r
81             // Maxima で計算(fpprec:18)\r
82             Assert.AreEqual(0.0, s[0], e);\r
83             Assert.AreEqual(0.0954915028125262981, s[1], e);\r
84             Assert.AreEqual(0.345491502812526321, s[2], e);\r
85             Assert.AreEqual(0.654508497187473679, s[3], e);\r
86             Assert.AreEqual(0.904508497187473753, s[4], e);\r
87             Assert.AreEqual(1.0, s[5], e);\r
88             Assert.AreEqual(0.904508497187473753, s[6], e);\r
89             Assert.AreEqual(0.654508497187473679, s[7], e);\r
90             Assert.AreEqual(0.345491502812526321, s[8], e);\r
91             Assert.AreEqual(0.0954915028125262981, s[9], e);\r
92             Assert.AreEqual(0.0, s[10], e);\r
93         }\r
94 \r
95         [Test]\r
96         public void Rectangular()\r
97         {\r
98             WindowFunction w = new WindowFunction(\r
99                 WindowFunction.FunctionType.Rectangular, range);\r
100             double[] s = w.ApplyTo(normal);\r
101 \r
102             double e = 1e-14;\r
103             Assert.AreEqual(1.0, s[0], e);\r
104             Assert.AreEqual(1.0, s[1], e);\r
105             Assert.AreEqual(1.0, s[2], e);\r
106             Assert.AreEqual(1.0, s[3], e);\r
107             Assert.AreEqual(1.0, s[4], e);\r
108             Assert.AreEqual(1.0, s[5], e);\r
109             Assert.AreEqual(1.0, s[6], e);\r
110             Assert.AreEqual(1.0, s[7], e);\r
111             Assert.AreEqual(1.0, s[8], e);\r
112             Assert.AreEqual(1.0, s[9], e);\r
113             Assert.AreEqual(1.0, s[10], e);\r
114         }\r
115     }\r
116 }\r