回答編集履歴

2

edit

2017/12/25 03:54

投稿

mkgrei
mkgrei

スコア8560

test CHANGED
@@ -1,6 +1,82 @@
1
- 勘違いしてした
1
+ 離散フーリエ変換は以下のものになり
2
2
 
3
+ もとのVBAのコードでは更に絶対値を取っているように見えます。
4
+
5
+ そこが振幅が異なる理由だと思われます。
6
+
7
+
8
+
9
+ そして横軸ですが、これは別に計算する必要があります。
10
+
11
+ 横軸がずれている理由はそこにあると思われます。
12
+
13
+
14
+
15
+ ```python
16
+
17
+ import numpy as np
18
+
19
+ from scipy import linalg
20
+
21
+ from pprint import pprint
22
+
23
+
24
+
25
+ def dft(x, N):
26
+
27
+ X = np.zeros((N,), dtype=np.complex)
28
+
29
+ for i in range(N):
30
+
31
+ sr, si = 0,0
32
+
33
+ for k in range(N):
34
+
35
+ wr = np.cos(2 * np.pi * k * i / N)
36
+
37
+ wi = - np.sin(2 * np.pi * k * i / N)
38
+
39
+ sr = sr + x[k] * wr
40
+
41
+ si = si + x[k] * wi
42
+
43
+ X[i] = sr + si*1.j
44
+
45
+ return X
46
+
47
+
48
+
49
+ x = np.linspace(0., np.pi, 100)
50
+
51
+ y = np.sin(x)
52
+
53
+ Y = dft(y, len(y))
54
+
55
+ pprint(Y)
56
+
57
+ pprint(np.abs(Y))
58
+
59
+
60
+
61
+ t = linalg.dft(len(y))
62
+
63
+ Y = t.dot(y)
64
+
65
+ pprint(Y)
66
+
67
+ pprint(np.abs(Y))
68
+
69
+ ```
70
+
71
+
72
+
73
+ ---
74
+
75
+
76
+
77
+ ~~勘違いしてました。
78
+
3
- また考え直してきます。
79
+ また考え直してきます。~~
4
80
 
5
81
 
6
82
 

1

edit

2017/12/25 03:54

投稿

mkgrei
mkgrei

スコア8560

test CHANGED
@@ -1,9 +1,11 @@
1
+ 勘違いしてました。
2
+
1
- `X = [0.0] * N`なので全ての要素が同じポインタをシェアしている気がします。
3
+ また考え直してます。
2
4
 
3
5
 
4
6
 
7
+ ~~`X = [0.0] * N`なので全ての要素が同じポインタをシェアしている気がします。
8
+
5
9
  つまりXの要素は中身としては同じもので、1つ書き換えようとしたら、みんな同じように書き換わってしまいます。
6
10
 
7
-
8
-
9
- `X = [0.0 for i in range(N)]`とすると一歩前進するかもしれません。
11
+ `X = [0.0 for i in range(N)]`とすると一歩前進するかもしれません。~~