質問編集履歴

4

コード内容の変更

2021/09/22 08:02

投稿

hirohiro1999
hirohiro1999

スコア5

test CHANGED
@@ -1 +1 @@
1
- コードPythonでのハイパスフィルタ実装方法
1
+ Pythonでのハイパスフィルタ実装できない
test CHANGED
@@ -6,13 +6,13 @@
6
6
 
7
7
  ハイパスフィルタというのですがPython初心者でありどのようにコードを変更すればよいのかわかりません。
8
8
 
9
- わかる方がいらっしゃいましたら追加するコードを教えていただきたいです。
9
+ わかる方がいらっしゃいましたら変えるコードを教えていただきたいです。
10
10
 
11
11
  何卒宜しくお願い致します。
12
12
 
13
13
 
14
14
 
15
- 以下のサイトのコードを参考に実行しようとしたのですが、以下サイトでは1秒おきに実行していないという点で自分のコードと違っていたために動くコード作成するはできませんでした。
15
+ 以下のサイトのコードを参考に実行しようとしたのですが、のコードを実行すると300ヘルツ以下をカットしたいのに300以上がカットされてしまいます
16
16
 
17
17
  https://algorithm.joho.info/programming/python/numpy-fast-fourier-transform/#toc3
18
18
 
@@ -20,17 +20,15 @@
20
20
 
21
21
  ```python
22
22
 
23
+ # -*- coding: utf-8 -*-
24
+
23
25
  import wave
24
26
 
25
27
 
26
28
 
27
29
  from matplotlib.colors import same_color
28
30
 
29
-
30
-
31
31
  import numpy as np
32
-
33
-
34
32
 
35
33
  import matplotlib.pyplot as plt
36
34
 
@@ -46,35 +44,19 @@
46
44
 
47
45
  # WAVファイルの情報を表示
48
46
 
49
-
50
-
51
47
  print ("オーディオチャンネル数(モノラル: 1 ステレオ:2 ) : ", wf.getnchannels())
52
-
53
-
54
48
 
55
49
  print ("サンプルサイズ(バイト数) : ", wf.getsampwidth())
56
50
 
57
-
58
-
59
51
  print ("サンプリングレート : ", wf.getframerate())
60
-
61
-
62
52
 
63
53
  print ("オーディオフレーム数 : ", wf.getnframes())
64
54
 
65
-
66
-
67
55
  print ("圧縮形式 : ", wf.getcomptype())
68
-
69
-
70
56
 
71
57
  print ("(圧縮形式) : ", wf.getcompname())
72
58
 
73
-
74
-
75
59
  print ("パラメータ : ", wf.getparams())
76
-
77
-
78
60
 
79
61
  print ("記録時間(Sec) : ", float(wf.getnframes()) / wf.getframerate() )
80
62
 
@@ -82,25 +64,39 @@
82
64
 
83
65
  fs = wf.getframerate() # サンプリング周波数
84
66
 
67
+
68
+
69
+ fc = 300 # カットオフ周波数
70
+
71
+
72
+
85
73
  g = wf.readframes(wf.getnframes())
86
74
 
87
75
  g = np.frombuffer(g, dtype= "int16")/32768.0 # -1~1に正規化
88
76
 
89
- wf.close()
77
+
90
78
 
91
79
  mado = 1#s
80
+
81
+ N = mado*fs # サンプル数=窓(1秒)×サンプリング周波数
82
+
83
+
84
+
85
+ freq = np.linspace(0, 1.0/mado, N)
86
+
87
+
88
+
89
+ wf.close()
92
90
 
93
91
  for ki in range(round(wf.getnframes()/fs)-1):
94
92
 
95
93
  n0 = ki # サンプリング開始位置
96
94
 
97
- N = mado*fs # サンプル数=窓(1秒)×サンプリング周波数
98
-
99
95
  gz = g[::2] # サンプル数片方にわける
100
96
 
97
+ gg = gz[ki*N:ki*N+N]
101
98
 
102
-
103
- gg = gz[ki*N:ki*N+N]
99
+ # print(fs,ki,N,gz,gg)
104
100
 
105
101
  G = np.fft.fft(gg) # 高速フーリエ変換
106
102
 
@@ -110,31 +106,23 @@
110
106
 
111
107
  flist = np.fft.fftfreq(N, d=1.0/fs) # 周波数リスト
112
108
 
109
+ flist[(freq < fc)] = 0
110
+
111
+ flist[(freq > 1/(mado*2))] = 0
112
+
113
113
 
114
114
 
115
115
  # 波形サンプルを描画
116
116
 
117
-
118
-
119
117
  fig = plt.figure()
120
-
121
-
122
118
 
123
119
  plt.subplot(211)
124
120
 
125
-
126
-
127
121
  plt.plot(np.linspace(n0,n0+mado,N),gg)
128
-
129
-
130
122
 
131
123
  plt.axis([n0, n0+mado, -0.2, 0.2])
132
124
 
133
-
134
-
135
125
  plt.xlabel("時間 [sample]",fontname="MS Gothic")
136
-
137
-
138
126
 
139
127
  plt.ylabel("振幅",fontname="MS Gothic")
140
128
 
@@ -142,43 +130,23 @@
142
130
 
143
131
  # 振幅スペクトルを描画
144
132
 
145
-
146
-
147
133
  plt.subplot(212)
148
-
149
-
150
134
 
151
135
  plt.plot(flist, amp, marker='o', linestyle='-')
152
136
 
153
-
154
-
155
137
  plt.axis([0, fs/2, 0, int(max(amp))])
156
-
157
-
158
138
 
159
139
  plt.xlabel("周波数 [Hz]",fontname="MS Gothic")
160
140
 
161
-
162
-
163
141
  plt.ylabel("振幅スペクトル",fontname="MS Gothic")
164
-
165
-
166
142
 
167
143
  output ="C:\Users\hiro2\Desktop\sound\kara"
168
144
 
169
-
170
-
171
145
  fig.savefig(output+"\"+str(ki)+"_"+str(mado)+".jpg")
172
-
173
-
174
146
 
175
147
  plt.close()
176
148
 
177
-
178
-
179
149
  fig = plt.figure()
180
-
181
-
182
150
 
183
151
  plt.close()
184
152
 
@@ -186,6 +154,6 @@
186
154
 
187
155
  if __name__ == '__main__':
188
156
 
189
- main()`
157
+ main()
190
158
 
191
159
  ```

3

コード表示の変更

2021/09/22 08:02

投稿

hirohiro1999
hirohiro1999

スコア5

test CHANGED
File without changes
test CHANGED
@@ -44,7 +44,7 @@
44
44
 
45
45
 
46
46
 
47
- % WAVファイルの情報を表示
47
+ # WAVファイルの情報を表示
48
48
 
49
49
 
50
50
 
@@ -112,7 +112,7 @@
112
112
 
113
113
 
114
114
 
115
- % 波形サンプルを描画
115
+ # 波形サンプルを描画
116
116
 
117
117
 
118
118
 
@@ -140,7 +140,7 @@
140
140
 
141
141
 
142
142
 
143
- % 振幅スペクトルを描画
143
+ # 振幅スペクトルを描画
144
144
 
145
145
 
146
146
 

2

コード表示の変更

2021/09/22 06:52

投稿

hirohiro1999
hirohiro1999

スコア5

test CHANGED
File without changes
test CHANGED
@@ -18,9 +18,7 @@
18
18
 
19
19
 
20
20
 
21
- ```Python
21
+ ```python
22
-
23
- `# -*- coding: utf-8 -*-
24
22
 
25
23
  import wave
26
24
 
@@ -189,3 +187,5 @@
189
187
  if __name__ == '__main__':
190
188
 
191
189
  main()`
190
+
191
+ ```

1

コードについて、調べたこと、試したことの追加

2021/09/22 06:50

投稿

hirohiro1999
hirohiro1999

スコア5

test CHANGED
@@ -1 +1 @@
1
- Pythonでのハイパスフィルタの実装方法
1
+ コードPythonでのハイパスフィルタの実装方法
test CHANGED
@@ -12,9 +12,15 @@
12
12
 
13
13
 
14
14
 
15
+ 以下のサイトのコードを参考に実行しようとしたのですが、以下のサイトでは1秒おきに実行していないという点で自分のコードと違っていたために動くコードを作成することはできませんでした。
16
+
17
+ https://algorithm.joho.info/programming/python/numpy-fast-fourier-transform/#toc3
18
+
19
+
20
+
15
21
  ```Python
16
22
 
17
- # -*- coding: utf-8 -*-
23
+ `# -*- coding: utf-8 -*-
18
24
 
19
25
  import wave
20
26
 
@@ -22,7 +28,11 @@
22
28
 
23
29
  from matplotlib.colors import same_color
24
30
 
31
+
32
+
25
33
  import numpy as np
34
+
35
+
26
36
 
27
37
  import matplotlib.pyplot as plt
28
38
 
@@ -36,21 +46,37 @@
36
46
 
37
47
 
38
48
 
39
- # WAVファイルの情報を表示
49
+ % WAVファイルの情報を表示
50
+
51
+
40
52
 
41
53
  print ("オーディオチャンネル数(モノラル: 1 ステレオ:2 ) : ", wf.getnchannels())
42
54
 
55
+
56
+
43
57
  print ("サンプルサイズ(バイト数) : ", wf.getsampwidth())
58
+
59
+
44
60
 
45
61
  print ("サンプリングレート : ", wf.getframerate())
46
62
 
63
+
64
+
47
65
  print ("オーディオフレーム数 : ", wf.getnframes())
66
+
67
+
48
68
 
49
69
  print ("圧縮形式 : ", wf.getcomptype())
50
70
 
71
+
72
+
51
73
  print ("(圧縮形式) : ", wf.getcompname())
52
74
 
75
+
76
+
53
77
  print ("パラメータ : ", wf.getparams())
78
+
79
+
54
80
 
55
81
  print ("記録時間(Sec) : ", float(wf.getnframes()) / wf.getframerate() )
56
82
 
@@ -74,9 +100,9 @@
74
100
 
75
101
  gz = g[::2] # サンプル数片方にわける
76
102
 
103
+
104
+
77
105
  gg = gz[ki*N:ki*N+N]
78
-
79
- # print(fs,ki,N,gz,gg)
80
106
 
81
107
  G = np.fft.fft(gg) # 高速フーリエ変換
82
108
 
@@ -88,41 +114,73 @@
88
114
 
89
115
 
90
116
 
91
- # 波形サンプルを描画
117
+ % 波形サンプルを描画
118
+
119
+
92
120
 
93
121
  fig = plt.figure()
94
122
 
123
+
124
+
95
125
  plt.subplot(211)
126
+
127
+
96
128
 
97
129
  plt.plot(np.linspace(n0,n0+mado,N),gg)
98
130
 
131
+
132
+
99
133
  plt.axis([n0, n0+mado, -0.2, 0.2])
100
134
 
135
+
136
+
101
137
  plt.xlabel("時間 [sample]",fontname="MS Gothic")
138
+
139
+
102
140
 
103
141
  plt.ylabel("振幅",fontname="MS Gothic")
104
142
 
105
143
 
106
144
 
107
- # 振幅スペクトルを描画
145
+ % 振幅スペクトルを描画
146
+
147
+
108
148
 
109
149
  plt.subplot(212)
110
150
 
151
+
152
+
111
153
  plt.plot(flist, amp, marker='o', linestyle='-')
154
+
155
+
112
156
 
113
157
  plt.axis([0, fs/2, 0, int(max(amp))])
114
158
 
159
+
160
+
115
161
  plt.xlabel("周波数 [Hz]",fontname="MS Gothic")
162
+
163
+
116
164
 
117
165
  plt.ylabel("振幅スペクトル",fontname="MS Gothic")
118
166
 
167
+
168
+
119
169
  output ="C:\Users\hiro2\Desktop\sound\kara"
170
+
171
+
120
172
 
121
173
  fig.savefig(output+"\"+str(ki)+"_"+str(mado)+".jpg")
122
174
 
175
+
176
+
123
177
  plt.close()
124
178
 
179
+
180
+
125
181
  fig = plt.figure()
182
+
183
+
126
184
 
127
185
  plt.close()
128
186
 
@@ -130,6 +188,4 @@
130
188
 
131
189
  if __name__ == '__main__':
132
190
 
133
- main()
191
+ main()`
134
-
135
- ``