「スペクトルアナライザ」の編集履歴(バックアップ)一覧に戻る

スペクトルアナライザ - (2010/12/22 (水) 00:25:00) のソース

*秋月300円液晶とCQ-FRK-LXP2を使ったスペクトルアナライザ

**目標
-foobar2000のChannel Spectruml Analizerのような見た目のスペクトルアナライザを作る。
-フレームレートは60FPS程度目指す。これはFPGAの性能からしてものすごく余裕と思われる。
-入力はアナログとSPDIF両方装備
-オシロ的な機能もできたらつける

*処理の流れ
波形キャッシュ -> FFT -> スペクトル化 -> 画面描画

*主要部材
|液晶|秋月300円液晶|
|FPGA|LatticeXP2|
|ADC|PCM1804|
|DAI|CS8416|
|SRAM|[[CY7C1041DV33>http://akizukidenshi.com/catalog/g/gI-02165/]]|

***秋月300円液晶
-H96*W400px 18bit Color
-色々うざい仕様
-[[3.3Vでもいけるらしい>http://xcrosgs2wy.web.fc2.com/akilcd/]]

***水晶振動器
44100Hzの整数倍の周波数が出るものを選ぶ
-x256 = 11.289 MHz
--[[HC49US11.2896MABJ-UB>http://www.chip1stop.com/dispDetail.do?&partId=CITI-0004872]]
-x364 = 17.022 MHz
-x512 = 22.579 MHz

***CY7C1041DV33
-秋月で売ってる
-VCC=3.3V
-W/R Cycle 10ns
-44pin SSOP
-非同期
-16bit word * 256K
-入力ピンと出力ピンが共用
-WE~ LOW to High-Z: 5ns

***ADC
-PCM1804 2ch 24bit 192KHz ADC
--いらないサウンドボードからはがした
--明らかにオーバースペック。
[[MCP3002>http://akizukidenshi.com/catalog/g/gI-02584/]]これでいいかもしれん

*処理
***波形キャッシュ
-1/44100 = 22.67[us]
-44100/60 = 735

-1024サンプル
--1024/44100 = 23.2[ms]
--基底周波数: 1/0.0232 = 43.066[Hz]

-2048サンプル
--2048/44100 = 46.4[ms]
--基底周波数: 1/0.0464 = 21.533[Hz]

-4096サンプル
--4096/44100 = 92.8[ms]
--基底周波数: 1/0.0928 = 10.766 [Hz]

1/60 = 16.6ms
縦96pxということを考えると量子化ビットは9bitあれば十分・・・・・・・なのかなぁ・・・

-基数4FFT,基数2FFTに要するクロック
メモリの速度とかは考えない。200MHzで動作している状況を考える。
-基数2 512 * 10 = 5120 /200MHz = 25.6us
-基数4 256 * 5  = 1280 /200MHz = 6.4us 
基数2でも十分早い。基数4でFFTやる必要は無いかも

***Sine-Cosine Table
IP ExpressのSine-Cosine Tableはθの入力が1024までのIPしか出力できないので
より大きい値でFFTを行う場合自分で作成する必要がある。
Sine波は左右上下対象なので波形の1/4だけ用意すればいい。
後はθの変化にあわせて内部的に参照するアドレスを変化させる。
|区間始め|区間終わり|θ変換|y|
|0|π/2|そのまま|そのまま|
|π/2|π|π-θ|そのまま|
|π|3π/2|そのまま|-y|
|3π/2|2π|2π-θ|-y|

***画面描画
VRAM
-400*96[解像度] * 16[カラー] = 76,800 Byte
転送レート
-76,8KB[画面] * 60[FPS] = 4,608KB
目安箱バナー