質問編集履歴

2

2020/11/06 17:02

投稿

gudetamako
gudetamako

スコア0

test CHANGED
@@ -1 +1 @@
1
- 一定の周波数ごとに周波数を区切り、最大値を求めたい。
1
+ 一定の周波数ごとに周波数を区切り、最大値を求めたい。
test CHANGED
File without changes

1

2020/11/06 17:02

投稿

gudetamako
gudetamako

スコア0

test CHANGED
@@ -1 +1 @@
1
- 一定の周波数ごとに周波数を区切り、最大値を求め、パワー分布の時間変化を求める
1
+ 一定の周波数ごとに周波数を区切り、最大値を求めたい。
test CHANGED
@@ -1,14 +1,6 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
- 1.FFTする。
4
-
5
- 2.一定の周波数ごとに周波数軸を区切る。
3
+ FFTしたものを一定の周波数ごとに周波数軸を区切り、それぞれの区間の最大値を求める。
6
-
7
- 3.区切られた各区間ごとに、その区間に含まれる周波数成分のパワーの最大値を求める。この最大値を各区間の代表値とし、代表値の分布を周波数軸方向のパワー分布とする。
8
-
9
- 4.これらを各時刻に対して行うことにより、周波数成分のパワー分布の時間変化を求める。
10
-
11
-
12
4
 
13
5
 
14
6
 
@@ -18,7 +10,7 @@
18
10
 
19
11
  ```
20
12
 
21
- FFTまでは出来たのですが、2からできませんでした。category = pd.cut(data, bins=np.arange(0, 23100, 100), right=False)を使ってやろうとしたのですが、分類まではできてもその周波数域を指定の仕方が分からず最大値を求めることが出来ませんでした。途中までのプログラムを下に載せます。
13
+ category = pd.cut(data, bins=np.arange(0, 23100, 100), right=False)を使ってやろうとしたのですが、分類まではできてもその周波数域を指定の仕方が分からず最大値を求めることが出来ませんでした。途中までのプログラムを下に載せます。
22
14
 
23
15
  ```
24
16
 
@@ -62,8 +54,6 @@
62
54
 
63
55
  filename = "bass.wav"
64
56
 
65
- # filename = "kaerunouta.wav"
66
-
67
57
 
68
58
 
69
59
  wave, fs = sf.read(filename) #filename音データと周波数
@@ -88,10 +78,6 @@
88
78
 
89
79
 
90
80
 
91
-
92
-
93
- # print('wave',wave[:,0])
94
-
95
81
  print('wave',xs)
96
82
 
97
83
  print('fs',fs)
@@ -100,25 +86,9 @@
100
86
 
101
87
 
102
88
 
103
-
104
-
105
-
106
-
107
-
108
-
109
89
  # データのパラメータ
110
90
 
111
91
  f = xs # 音データ
112
-
113
- print(f)
114
-
115
- # np.savetxt("kaerunouta.csv", f, delimiter=",")
116
-
117
- # f=wave[:,0]
118
-
119
- # print(f)
120
-
121
-
122
92
 
123
93
  N = 20000 # サンプル数
124
94
 
@@ -142,11 +112,7 @@
142
112
 
143
113
  F = np.fft.fft(f, n) # 高速フーリエ変換
144
114
 
145
- # F = np.fft.fft(f) # 高速フーリエ変換
146
-
147
115
  power = F*np.conj(F)/n # Power of the DFT
148
-
149
- # freq = np.arange(0,N)*fs/N
150
116
 
151
117
  F_abs = np.abs(F) # 振幅スペクトルを計算
152
118
 
@@ -163,8 +129,6 @@
163
129
  freq0 = np.arange(-n/2,n/2)*(fs/n) # Frequency range
164
130
 
165
131
  power0 = F0*np.conj(F0)/n # Power of the DFT
166
-
167
- # freq0 = np.arange(-N/2,N/2)*(fs/N) # Frequency range
168
132
 
169
133
  power0 = np.abs(F0)/(N/2)
170
134
 
@@ -194,7 +158,7 @@
194
158
 
195
159
  print("最大のピークの周波数は{:.2f}Hz".format(np.abs(freq0[np.argmax(power0)])))
196
160
 
197
- # プロット
161
+
198
162
 
199
163
 
200
164