回答編集履歴
2
修正
    
        answer	
    CHANGED
    
    | @@ -1,5 +1,6 @@ | |
| 1 | 
            -
            ちゃんとバンドパスフィルタでしたよ?
         | 
| 2 | 
            -
            データが無いので、てきとーに生成しています | 
| 1 | 
            +
            データが無いので、てきとーに生成しています。
         | 
| 2 | 
            +
            実空間・周波数空間の変換がミスっていました。
         | 
| 3 | 
            +
            パラメータはダイレクトに入力して、付随して決まるものは全部計算によって出すと、ミスがすくなるかと。
         | 
| 3 4 | 
             
            
         | 
| 4 5 |  | 
| 5 6 | 
             
            ```python
         | 
1
修正
    
        answer	
    CHANGED
    
    | @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            ちゃんとバンドパスフィルタでしたよ?
         | 
| 2 2 | 
             
            データが無いので、てきとーに生成していますが。
         | 
| 3 | 
            -
            
         | 
| 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 | 
            -
             | 
| 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 | 
            -
             | 
| 29 | 
            +
            kx = signal.lfilter(b, 1, x)
         | 
| 28 30 |  | 
| 29 | 
            -
            F = np.fft.fft( | 
| 31 | 
            +
            F = np.fft.fft(kx)
         | 
| 32 | 
            +
            print(F.shape)
         | 
| 30 33 | 
             
            Amp = np.abs(F)
         | 
| 31 34 |  | 
| 32 | 
            -
            skip= | 
| 35 | 
            +
            skip=1
         | 
| 33 36 | 
             
            plt.subplot(211)
         | 
| 34 | 
            -
            plt.plot( | 
| 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 | 
             
            ```
         | 
