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

質問編集履歴

3

誤字の訂正

2020/09/29 12:01

投稿

kawahagi
kawahagi

スコア9

title CHANGED
File without changes
body CHANGED
@@ -1,7 +1,7 @@
1
1
  音声ファイルの短時間フーリエ変換stftを行いたいです。
2
2
  結果をスペクトログラムに表示する際にplt.pcolormesh(データ)を使うと以下のスペクトログラムが得られます。対称性が見られます。
3
3
  ![図1軸を指定しない場合のpcolormeshの出力](53ab9700b260c5a191b51fb9c0967a82.png)
4
- 一方、時間軸・周波数軸を規定するためにplt.pcolormesh(時間軸,周波数軸,データ)とした途端、それまで見えていた周波数の正負での対称性が消えてしまいます。![図2軸を指定した場合](0e64b109d33d40e1ac4e63487e3246e7.png)](987dd0208b171144bc6a12a7380165d8.png)
4
+ 一方、時間軸・周波数軸を規定するためにplt.pcolormesh(時間軸,周波数軸,データ)とした途端、それまで見えていた周波数の正負での対称性が消えてしまいます。![図2軸を指定した場合](0e64b109d33d40e1ac4e63487e3246e7.png)]
5
5
  この際、周波数軸とデータの対応は以下の図の通りになっております。
6
6
  ![イメージ説明](ab2a40bfb63bd23e20a7dfd1ec5b6569.png)
7
7
  軸を指定した際も対称性を保ったまま描画したいのですが、どうすれば良いでしょうか?

2

より分かりやすくした

2020/09/29 12:01

投稿

kawahagi
kawahagi

スコア9

title CHANGED
File without changes
body CHANGED
@@ -1,7 +1,11 @@
1
1
  音声ファイルの短時間フーリエ変換stftを行いたいです。
2
- 以下のようにコードを書いたところ一応動いておりますが、周波数軸の生負に関する対称性が見えません。
3
- FFTの結果は一般的周波数軸の正負で対称的になるはずで。コドが問題なかfftの理解不足なのか教えて頂きたいです。宜しくお願いします。
2
+ 結果をスペクトログラム表示る際にplt.pcolormesh(デタ)を使うと以下スペクトログラムが得られます。対称性が見られます。
4
-
3
+ ![図1軸を指定しない場合のpcolormeshの出力](53ab9700b260c5a191b51fb9c0967a82.png)
4
+ 一方、時間軸・周波数軸を規定するためにplt.pcolormesh(時間軸,周波数軸,データ)とした途端、それまで見えていた周波数の正負での対称性が消えてしまいます。![図2軸を指定した場合](0e64b109d33d40e1ac4e63487e3246e7.png)](987dd0208b171144bc6a12a7380165d8.png)
5
+ この際、周波数軸とデータの対応は以下の図の通りになっております。
6
+ ![イメージ説明](ab2a40bfb63bd23e20a7dfd1ec5b6569.png)
7
+ 軸を指定した際も対称性を保ったまま描画したいのですが、どうすれば良いでしょうか?
8
+ 以下にstftおよびグラフ描画に使用したコードを張っております。宜しくお願い致します。
5
9
  ```ここに言語を入力
6
10
  from scipy.io.wavfile import read
7
11
  import numpy as np

1

コードが見づらかったため変更

2020/09/29 11:57

投稿

kawahagi
kawahagi

スコア9

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 FFT(s, Lf, step=None):# STFT(s:signal(1D-array), Lf:length of frame(window), noverlap:number of overlap)
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 = FFT(s, Lf, step)
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
+ ```