teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

spanはNの間違いのため修正

2020/06/11 23:35

投稿

yymmt
yymmt

スコア1615

answer CHANGED
@@ -57,7 +57,7 @@
57
57
  ...
58
58
  amp[span-1] = np.sqrt(K[span-1].real ** 2 + K[span-1].imag ** 2)
59
59
  ```
60
- ここで注意する必要があるのはK[0]は単純な複素数ではなく、フーリエ変換済みの結果であり、要素数span個を持つ配列であることです(numpyのndarray)。numpyの様々な関数は引数に配列を渡しても演算可能で、結果を配列で返してくれます。すなわち
60
+ ここで注意する必要があるのはK[0]は単純な複素数ではなく、フーリエ変換済みの結果であり、要素をN個を持つ配列であることです(numpyのndarray)。numpyの様々な関数は引数に配列を渡しても演算可能で、結果を配列で返してくれます。すなわち
61
61
  ```python
62
62
  amp[0] = np.sqrt(K[0].real ** 2 + K[0].imag ** 2)
63
63
  ```
@@ -66,7 +66,7 @@
66
66
  amp[0][0] = np.sqrt(K[0][0].real ** 2 + K[0][0].imag ** 2)
67
67
  amp[0][1] = np.sqrt(K[0][1].real ** 2 + K[0][1].imag ** 2)
68
68
  ...
69
- amp[0][span-1] = np.sqrt(K[0][span-1].real ** 2 + K[0][span-1].imag ** 2)
69
+ amp[0][N-1] = np.sqrt(K[0][N-1].real ** 2 + K[0][N-1].imag ** 2)
70
70
 
71
71
  ```
72
72
  参考までに、ここまでをまとめた全体のソースコードを示します。

3

より正確にリストと配列を区別

2020/06/11 23:35

投稿

yymmt
yymmt

スコア1615

answer CHANGED
@@ -25,7 +25,7 @@
25
25
  絵で書くと下記のような状態です。
26
26
  |<---N個--->|<---N個--->|<---N個--->| ... |<---N個--->| ← Nがspan個ある
27
27
 
28
- 関数fourier()で行っていることは、|<---N個--->|を先頭から順々にフーリエ変換し、結果を配列に格納しています。FFTのアルゴリズム上、Nは2のn乗(オリジナルのサイトはN=2の8乗=256)である必要があります。
28
+ 関数fourier()で行っていることは、|<---N個--->|を先頭から順々にフーリエ変換し、結果をリストに格納しています。FFTのアルゴリズム上、Nは2のn乗(オリジナルのサイトはN=2の8乗=256)である必要があります。
29
29
 
30
30
  関数fourier()でrange(0, w-2)とされている箇所は間違っています。正しい関数は以下になります。
31
31
  ```python
@@ -42,11 +42,11 @@
42
42
  ```python
43
43
  mono = np.frombuffer(buf, dtype='int16')
44
44
  ```
45
- 先に修正した関数fourier()に、このmonoを渡してフーリエ変換を行、span個のフーリエ変換済みの結果が返ってきます。
45
+ 先に修正した関数fourier()に、このmonoを渡してフーリエ変換を行うと、span個のフーリエ変換済みのリストが返ってきます。
46
46
  ```python
47
47
  K = fourier(mono, N, span)
48
48
  ```
49
- print(len(K))とやると結果を格納した変数`K`がspan個の要素を持つ配列であることがわかります。そうすると振幅を計算する部分
49
+ print(len(K))とやると結果を格納した変数`K`がspan個の要素を持つことがわかります。そうすると振幅を計算する部分
50
50
  ```python
51
51
  amp = [np.sqrt(c.real ** 2 + c.imag ** 2) for c in K]
52
52
  ```

2

リストを配列に変更

2020/06/11 17:43

投稿

yymmt
yymmt

スコア1615

answer CHANGED
@@ -25,7 +25,7 @@
25
25
  絵で書くと下記のような状態です。
26
26
  |<---N個--->|<---N個--->|<---N個--->| ... |<---N個--->| ← Nがspan個ある
27
27
 
28
- 関数fourier()で行っていることは、|<---N個--->|を先頭から順々にフーリエ変換し、結果をリストに格納しています。FFTのアルゴリズム上、Nは2のn乗(オリジナルのサイトはN=2の8乗=256)である必要があります。
28
+ 関数fourier()で行っていることは、|<---N個--->|を先頭から順々にフーリエ変換し、結果を配列に格納しています。FFTのアルゴリズム上、Nは2のn乗(オリジナルのサイトはN=2の8乗=256)である必要があります。
29
29
 
30
30
  関数fourier()でrange(0, w-2)とされている箇所は間違っています。正しい関数は以下になります。
31
31
  ```python
@@ -46,7 +46,7 @@
46
46
  ```python
47
47
  K = fourier(mono, N, span)
48
48
  ```
49
- print(len(K))とやると結果を格納した変数`K`がspan個のリストであることがわかります。そうすると振幅を計算する部分
49
+ print(len(K))とやると結果を格納した変数`K`がspan個の要素を持つ配列であることがわかります。そうすると振幅を計算する部分
50
50
  ```python
51
51
  amp = [np.sqrt(c.real ** 2 + c.imag ** 2) for c in K]
52
52
  ```
@@ -57,7 +57,7 @@
57
57
  ...
58
58
  amp[span-1] = np.sqrt(K[span-1].real ** 2 + K[span-1].imag ** 2)
59
59
  ```
60
- ここで注意する必要があるのはK[0]は単純な複素数ではなく、フーリエ変換済みの結果であり、サイズspan配列であることです(numpyのndarray)。numpyの様々な関数は引数に配列を渡しても演算可能で、結果を配列で返してくれます。すなわち
60
+ ここで注意する必要があるのはK[0]は単純な複素数ではなく、フーリエ変換済みの結果であり、要素数span個を持つ配列であることです(numpyのndarray)。numpyの様々な関数は引数に配列を渡しても演算可能で、結果を配列で返してくれます。すなわち
61
61
  ```python
62
62
  amp[0] = np.sqrt(K[0].real ** 2 + K[0].imag ** 2)
63
63
  ```

1

typoを編集

2020/06/11 17:38

投稿

yymmt
yymmt

スコア1615

answer CHANGED
@@ -52,21 +52,21 @@
52
52
  ```
53
53
  は何をやっているかというと、python特有の内包表記というもので、分解すると次のことと等価です。
54
54
  ```python
55
- amp[0] = np.sqrt(K[0].real ** 2 + K[0].real ** 2)
55
+ amp[0] = np.sqrt(K[0].real ** 2 + K[0].imag ** 2)
56
- amp[1] = np.sqrt(K[1].real ** 2 + K[1].real ** 2)
56
+ amp[1] = np.sqrt(K[1].real ** 2 + K[1].imag ** 2)
57
57
  ...
58
- amp[span-1] = np.sqrt(K[span-1].real ** 2 + K[span-1].real ** 2)
58
+ amp[span-1] = np.sqrt(K[span-1].real ** 2 + K[span-1].imag ** 2)
59
59
  ```
60
60
  ここで注意する必要があるのはK[0]は単純な複素数ではなく、フーリエ変換済みの結果であり、サイズspanの配列であることです(numpyのndarray)。numpyの様々な関数は引数に配列を渡しても演算可能で、結果を配列で返してくれます。すなわち
61
61
  ```python
62
- amp[0] = np.sqrt(K[0].real ** 2 + K[0].real ** 2)
62
+ amp[0] = np.sqrt(K[0].real ** 2 + K[0].imag ** 2)
63
63
  ```
64
64
  の一行は下記と同じことになります。
65
65
  ```python
66
- amp[0][0] = np.sqrt(K[0][0].real ** 2 + K[0][0].real ** 2)
66
+ amp[0][0] = np.sqrt(K[0][0].real ** 2 + K[0][0].imag ** 2)
67
- amp[0][1] = np.sqrt(K[0][1].real ** 2 + K[0][1].real ** 2)
67
+ amp[0][1] = np.sqrt(K[0][1].real ** 2 + K[0][1].imag ** 2)
68
68
  ...
69
- amp[0][span-1] = np.sqrt(K[0][span-1].real ** 2 + K[0][span-1].real ** 2)
69
+ amp[0][span-1] = np.sqrt(K[0][span-1].real ** 2 + K[0][span-1].imag ** 2)
70
70
 
71
71
  ```
72
72
  参考までに、ここまでをまとめた全体のソースコードを示します。