質問編集履歴
4
コード内容の変更
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
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
|
-
以下のサイトのコードを参考に実行しようとしたのですが、
|
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
|
-
|
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
|
-
|
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
コード表示の変更
test
CHANGED
File without changes
|
test
CHANGED
@@ -44,7 +44,7 @@
|
|
44
44
|
|
45
45
|
|
46
46
|
|
47
|
-
|
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
コード表示の変更
test
CHANGED
File without changes
|
test
CHANGED
@@ -18,9 +18,7 @@
|
|
18
18
|
|
19
19
|
|
20
20
|
|
21
|
-
```
|
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
コードについて、調べたこと、試したことの追加
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
|
-
|
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
|
-
``
|