pythonを使った周波数解析について。
フーリエ変換で周波数スペクトルをグラフ表示させるところはできました。
Python
1# - coding: utf-8 - 2import wave 3import numpy as np 4import matplotlib.pyplot as plt 5import csv 6 7# 離散フーリエ変換 8def dft (n0, N, g): 9 G = [0.0] * N 10 for k in range(N): 11 for n in range(N): 12 real = np.cos(2 * np.pi * k * n / N) 13 imag = - np.sin(2 * np.pi * k * n / N) 14 G[k] += g[n0 + n] * complex(real, imag) 15 return G 16 17def main(): 18 wf = wave.open("test.wav" , "r" ) 19 fs = wf.getframerate() # サンプリング周波数 20 g = wf.readframes(wf.getnframes()) 21 g = np.frombuffer(g, dtype= "int16")/32768.0 # -1~1に正規化 22 wf.close() 23 n0 = 0 # サンプリング開始位置 24 N = 256 # サンプル数 25 G = np.fft.fft(g[n0:n0+N]) # 高速フーリエ変換 26 amp = [np.sqrt(c.real * 2 + c.imag * 2) for c in G] # 振幅スペクトル 27 flist = np.fft.fftfreq(N, d=1.0/fs) # 周波数リスト 28 29 print("周波数リスト" , flist) 30 print("振幅スペクトル" , amp) 31 32# CSVファイルを作成書き込み 33with open('test2.csv', 'w') as csv_file: 34 fieldnames = ['Hz', 'dB'] 35 writer = csv.DictWriter(csv_file, fieldnames=fieldnames) 36 writer.writeheader() 37 writer.writerow({'Hz': 10, 'dB': 50}) 38 writer.writerow({'Hz': 20, 'dB': 1700}) 39 40# CSVファイルを読み込む 41with open('test2.csv', 'r') as csv_file: 42 reader = csv.DictReader(csv_file) 43 for row in reader: 44 print(row['Hz'], row['dB']) 45 46 47 48 49if __name__ == '__main__': 50 main()
現在のプログラムがこちらですが、# CSVファイルを作成書き込み 箇所にある
writer.writerow({'Hz': 10, 'dB': 50})の数値を、上のflist,ampをそれぞれに代入したいです。
どうすれば可能でしょうか?
最終的には得られたflist,ampの2列でcsvとして保存したいです。
プログラミングに関して全くの素人のため優しく教えていただけたら幸いです。
よろしくお願いします。
参考元URL:Pythonで音の高速フーリエ変換(FFT)
teratailではマルチポストを推奨していません。ご一読いただければ幸いです。
https://teratail.com/help#posted-otherservice
ソースコードはコードブロックにいれましょう。
https://teratail-v2.storage.googleapis.com/uploads/contributed_images/56957fe805d9d7befa7dba6a98676d2b.gif
あと、コードの参照元は残しておいた方がいいです。
http://denshi.blog.jp/signal_processing/python/fft
だいぶよくなりました!
コードブロックの中身はコードそのもので、太字にするなどの文字修飾を自由にできません。
「太文字部分の数値」がなにかわからないのでご追記くださいまし。
細かいですが、コード内から ** を取り除いてください。回答者が実行したときにエラーになります。
またURLはMarkDownのURL記法を使うと親切です。
参考元URL:[Pythonで音の高速フーリエ変換(FFT)](http://denshi.blog.jp/signal_processing/python/fft)
回答1件
あなたの回答
tips
プレビュー