質問編集履歴
2
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
一定の周波数ごとに周波数を区切り、最大値を求めたい。
|
1
|
+
一定の周波数ごとに周波数軸を区切り、最大値を求めたい。
|
test
CHANGED
File without changes
|
1
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
一定の周波数ごとに周波数を区切り、最大値を求め
|
1
|
+
一定の周波数ごとに周波数を区切り、最大値を求めたい。
|
test
CHANGED
@@ -1,14 +1,6 @@
|
|
1
1
|
### 前提・実現したいこと
|
2
2
|
|
3
|
-
1.FFTする。
|
4
|
-
|
5
|
-
|
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
|
-
|
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
|
|