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

回答編集履歴

2

修正

2017/11/17 10:14

投稿

mkgrei
mkgrei

スコア8562

answer CHANGED
@@ -1,5 +1,6 @@
1
- ちゃんとバンドパスフィルタでしたよ?
2
- データが無いので、てきとーに生成しています
1
+ データが無いので、てきとーに生成しています。
2
+ 実空間・周波数空間の変換がミスっていました。
3
+ パラメータはダイレクトに入力して、付随して決まるものは全部計算によって出すと、ミスがすくなるかと。
3
4
  ![イメージ説明](880e1ea3c2fb43ff1f954a35a8f6f88d.png)
4
5
 
5
6
  ```python

1

修正

2017/11/17 10:14

投稿

mkgrei
mkgrei

スコア8562

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  ちゃんとバンドパスフィルタでしたよ?
2
2
  データが無いので、てきとーに生成していますが。
3
- ![イメージ説明](8ff11f034a473973d2169518a656cabf.png)
3
+ ![イメージ説明](880e1ea3c2fb43ff1f954a35a8f6f88d.png)
4
4
 
5
5
  ```python
6
6
  import numpy as np
@@ -8,34 +8,38 @@
8
8
  import matplotlib as mpl
9
9
  mpl.rcParams['figure.dpi'] = 200
10
10
  from scipy import signal
11
- N = 10000
12
- fs = 250 # サンプリング周波数
13
- nyq = fs / 2 # ナイキスト周波数
14
- fc1 = 10 / fs # カットオフ周波数
15
- fc2 = 50 / fs # カットオフ周波数
16
- numtaps = 125 # フィルタ係数の数
17
- dt = 0.04 # サンプリング間隔
18
- t = np.arange(0, N*dt, dt) # 時間軸
19
- freq = np.linspace(0, 1.0/dt, N) # 周波数軸
20
11
 
12
+ N = 1000
13
+ fs = 250
14
+ nyq = fs / 2
15
+ fc1 = 4.
16
+ fc2 = 30.
17
+ numtaps = 255
18
+ dt = 1. / fs
19
+ t = dt*np.arange(N)
20
+ freq = np.fft.fftfreq(t.shape[-1])*fs
21
+
21
22
  # フィルタ係数
22
- b = signal.firwin(numtaps, [fc1, fc2], pass_zero=False)
23
+ b = signal.firwin(numtaps, [fc1, fc2], pass_zero=False, nyq=nyq)
23
24
  #b = signal.firwin(numtaps, [fc1, fc2])
24
25
 
25
- data_pca = np.sum((np.random.random()*np.sin(i*t/(N*dt)) for i in range(N)), axis=1)
26
+ x = np.sum((np.random.random()*np.sin(i*t/(N*dt)) for i in range(N)), axis=1)
27
+ x /= np.max(np.abs(x))
26
28
  # scipyによるFIRフィルタ
27
- data_pca = signal.lfilter(b, 1, data_pca)
29
+ kx = signal.lfilter(b, 1, x)
28
30
 
29
- F = np.fft.fft(data_pca)
31
+ F = np.fft.fft(kx)
32
+ print(F.shape)
30
33
  Amp = np.abs(F)
31
34
 
32
- skip=5
35
+ skip=1
33
36
  plt.subplot(211)
34
- plt.plot(t[::skip], F[::skip], marker='.', ls='none', label='t-F')
37
+ plt.plot(freq[::skip], F[::skip], marker='.', ls='none', label='t-F')
38
+ plt.xlim(0, 50)
35
39
  plt.legend()
36
- plt.xlim(0, 100)
37
40
  plt.subplot(212)
38
41
  plt.plot(freq[::skip], Amp[::skip], marker='.', ls='none', label='w-A')
42
+ plt.xlim(0, 50)
39
43
  plt.legend()
40
44
  plt.show()
41
45
  ```