質問編集履歴
3
誤字の訂正
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
音声ファイルの短時間フーリエ変換stftを行いたいです。
|
2
2
|
結果をスペクトログラムに表示する際にplt.pcolormesh(データ)を使うと以下のスペクトログラムが得られます。対称性が見られます。
|
3
3
|

|
4
|
-
一方、時間軸・周波数軸を規定するためにplt.pcolormesh(時間軸,周波数軸,データ)とした途端、それまで見えていた周波数の正負での対称性が消えてしまいます。]
|
4
|
+
一方、時間軸・周波数軸を規定するためにplt.pcolormesh(時間軸,周波数軸,データ)とした途端、それまで見えていた周波数の正負での対称性が消えてしまいます。]
|
5
5
|
この際、周波数軸とデータの対応は以下の図の通りになっております。
|
6
6
|

|
7
7
|
軸を指定した際も対称性を保ったまま描画したいのですが、どうすれば良いでしょうか?
|
2
より分かりやすくした
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,7 +1,11 @@
|
|
1
1
|
音声ファイルの短時間フーリエ変換stftを行いたいです。
|
2
|
-
以下のようにコードを書いたところ一応動いておりますが、周波数軸の生負に関する対称性が見えません。
|
3
|
-
|
2
|
+
結果をスペクトログラムに表示する際にplt.pcolormesh(データ)を使うと以下のスペクトログラムが得られます。対称性が見られます。
|
4
|
-
|
3
|
+

|
4
|
+
一方、時間軸・周波数軸を規定するためにplt.pcolormesh(時間軸,周波数軸,データ)とした途端、それまで見えていた周波数の正負での対称性が消えてしまいます。](987dd0208b171144bc6a12a7380165d8.png)
|
5
|
+
この際、周波数軸とデータの対応は以下の図の通りになっております。
|
6
|
+

|
7
|
+
軸を指定した際も対称性を保ったまま描画したいのですが、どうすれば良いでしょうか?
|
8
|
+
以下にstftおよびグラフ描画に使用したコードを張っております。宜しくお願い致します。
|
5
9
|
```ここに言語を入力
|
6
10
|
from scipy.io.wavfile import read
|
7
11
|
import numpy as np
|
1
コードが見づらかったため変更
title
CHANGED
File without changes
|
body
CHANGED
@@ -2,14 +2,14 @@
|
|
2
2
|
以下のようにコードを書いたところ一応動いておりますが、周波数軸の生負に関する対称性が見えません。
|
3
3
|
FFTの結果は一般的に周波数軸の正負で対称的になるはずです。コードが問題なのかfftの理解不足なのか教えて頂きたいです。宜しくお願いします。
|
4
4
|
|
5
|
-
|
5
|
+
```ここに言語を入力
|
6
6
|
from scipy.io.wavfile import read
|
7
7
|
import numpy as np
|
8
8
|
import csv
|
9
9
|
import matplotlib.pyplot as plt
|
10
10
|
|
11
|
-
|
11
|
+
#SFTF関数
|
12
|
-
def
|
12
|
+
def SFFT(s, Lf, step=None):# STFT(s:signal(1D-array), Lf:length of frame(window), noverlap:number of overlap)
|
13
13
|
if step==None:
|
14
14
|
step = Lf//2#'//'切り捨て徐算
|
15
15
|
l = s.shape[0]
|
@@ -20,9 +20,9 @@
|
|
20
20
|
S[:,n] = np.fft.fft(s[step*n:step*n+Lf]*win)
|
21
21
|
return S
|
22
22
|
|
23
|
-
|
23
|
+
#スペクトログラム関数
|
24
24
|
def plot_spectrogram(fs, s, Lf, step=None):# plot spectrogram (fs: sampling frequency, s: signal(1D-array), Lf: length of frame(window), noverlap: number of overlap)
|
25
|
-
S =
|
25
|
+
S = SFFT(s, Lf, step)
|
26
26
|
S = np.abs(S)
|
27
27
|
m = np.linspace(0, (s.shape[0]-Lf)/fs, num=S.shape[1]
|
28
28
|
k = np.fft.fftfreq(Lf,1/24000)
|
@@ -40,4 +40,5 @@
|
|
40
40
|
data = data[1]/65536#normalize
|
41
41
|
Lf = 1024 # length of frame(window)
|
42
42
|
|
43
|
-
plot_spectrogram(24000,data,Lf,step=None)
|
43
|
+
plot_spectrogram(24000,data,Lf,step=None)
|
44
|
+
```
|