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

質問編集履歴

2

2019/07/16 05:13

投稿

15219e
15219e

スコア14

title CHANGED
File without changes
body CHANGED
@@ -1,5 +1,48 @@
1
+ ```ここに言語を入力
2
+ コード```# -*- coding: utf-8 -*-
3
+ import wave
1
- ### Python3を使い、wavファイルの周波数スペクトルを表示したい
4
+ import matplotlib.pyplot as plt
5
+ import numpy as np
2
6
 
7
+ def main():
8
+ wf = wave.open("sinwave_440hz.wav")
9
+ fs = 44100 # サンプリング周波数
10
+ g = wf.readframes(wf.getnframes())
11
+ g = np.frombuffer(g, dtype= "int16")/32768.0 # -1~1に正規化
12
+ wf.close()
13
+ n0 = 0 # サンプリング開始位置
14
+ N = 8192 # サンプル数
15
+ G = np.abs(np.fft.fft(g[n0:n0+N])) # 高速フーリエ変換
16
+ ampmax=max(G) #振幅最大値
17
+ amp=20*np.log10(G/ampmax) #振幅をデシベルに変換
18
+ G[0] = G[0] / 2
19
+ flist = np.fft.fftfreq(N, d=1.0/fs) # 周波数リスト
20
+
21
+
22
+
23
+
24
+ plt.figure() # 波形サンプルを描画
25
+ plt.rcParams['font.size'] = 17
26
+
27
+ plt.subplot(122)
28
+ plt.plot(flist,amp)
29
+ plt.xlabel('Frequency', fontsize=20)
30
+ plt.ylabel('Amplitude', fontsize=20)
31
+ plt.xlim(0,1000)
32
+ plt.ylim(-80,0)
33
+ plt.grid()
34
+ leg = plt.legend(loc=1, fontsize=25)
35
+ leg.get_frame().set_alpha(1)
36
+ plt.yscale('log')
37
+ plt.show()
38
+
39
+
40
+ if __name__ == '__main__':
41
+ main()
42
+ コード
43
+ ```
44
+ ```### Python3を使い、wavファイルの周波数スペクトルを表示したい
45
+
3
46
  Pythonを使い、自分で録音したwavファイルの周波数スペクトルをグラフ表示しようとしています。
4
47
  試しにインターネット上からダウンロードした440Hzの正弦波でプログラムを実行したところ、440Hzのところにピークが来たため、プログラムは正しいと思っています。
5
48
 

1

2019/07/16 05:13

投稿

15219e
15219e

スコア14

title CHANGED
File without changes
body CHANGED
@@ -10,46 +10,8 @@
10
10
  ```
11
11
 
12
12
  ### 該当のソースコード
13
- # -*- coding: utf-8 -*-
14
- import wave
15
- import matplotlib.pyplot as plt
16
- import numpy as np
17
13
 
18
- def main():
19
- wf = wave.open("sinwave_440hz.wav")
20
- fs = 44100 # サンプリング周波数
21
- g = wf.readframes(wf.getnframes())
22
- g = np.frombuffer(g, dtype= "int16")/32768.0 # -1~1に正規化
23
- wf.close()
24
- n0 = 0 # サンプリング開始位置
25
- N = 8192 # サンプル数
26
- G = np.abs(np.fft.fft(g[n0:n0+N])) # 高速フーリエ変換
27
- ampmax=max(G) #振幅最大値
28
- amp=20*np.log10(G/ampmax) #振幅をデシベルに変換
29
- G[0] = G[0] / 2
30
- flist = np.fft.fftfreq(N, d=1.0/fs) # 周波数リスト
31
14
 
32
-
33
-
34
-
35
- plt.figure() # 波形サンプルを描画
36
- plt.rcParams['font.size'] = 17
37
-
38
- plt.subplot(122)
39
- plt.plot(flist,amp)
40
- plt.xlabel('Frequency', fontsize=20)
41
- plt.ylabel('Amplitude', fontsize=20)
42
- plt.xlim(0,1000)
43
- plt.ylim(-80,0)
44
- plt.grid()
45
- leg = plt.legend(loc=1, fontsize=25)
46
- leg.get_frame().set_alpha(1)
47
- plt.yscale('log')
48
- plt.show()
49
-
50
-
51
- if __name__ == '__main__':
52
- main()
53
15
  ```python3.7
54
16
 
55
17