作成中のFFTのソフトは、縦軸がいいかげんというかFFT処理した値そのまま表示していた。
それを修正してLog目盛りにした。
修正点のみ表示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
//FFT出力をバックグラウンドの130で正規化してdBに変換 for (int i = 1; i < data.Length; i++) dd[i] = (float)(10 * Math.Log((data[i].Real * data[i].Real + data[i].Imaginary * data[i].Imaginary) / 130.0)); //縦軸の目盛りを算出 ytick = pb_height / (float)(Math.Log10(1000000)); //縦軸 for(int i = 1; i < 7; i++) { string st = (i * 10).ToString(); PointF pt = new PointF(10, panel1.Height - (ytick * i + 30)); e.Graphics.DrawString(st, ft, br, pt); } //スペクトルの表示 private void DrawSpectrum(Graphics gr, double[] data) { PointF oldPoint = new PointF(); PointF newPoint = new PointF(); oldPoint.X = (float)(Math.Log10(fstep) - offset); oldPoint.Y = (float)(pb_height - data[1]); for (int i = 2; i < 4096; i++) { newPoint.X = xtick * (float)(Math.Log10(fstep * i) - offset); newPoint.Y = (float)(pb_height - data[i]); gr.DrawLine(Pens.Red, oldPoint, newPoint); oldPoint = newPoint; } } |
振幅の違う正弦波を入力して確認してみた。
G=0.5の正弦波。 約50dB。
G=0.05の正弦波。 約40dB。
G=0.005の正弦波。約30dB。ちょっとずれてるかも..。 ノイズフロアがずれているのも、気になるけど..。
気になるところは色々残っているけど、そもそもPCサウンドのDACやADCがどれくらい正確か不明なのでこれで開発完了とする。 また、途中で何か気づいたら修正するかも。