「スペクトルアナライザ」の編集履歴(バックアップ)一覧はこちら

スペクトルアナライザ - (2010/12/22 (水) 00:23:30) の最新版との変更点

追加された行は緑色になります。

削除された行は赤色になります。

*秋月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] -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
*秋月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の整数倍の周波数で、PLLを使うために10MHz以上のものを選ぶ -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 -フレームバッファに使う -非同期SRAM -秋月で売ってる -VCC=3.3V -W/R Cycle 10ns -44pin SSOP -非同期 -16bit word * 256K -入力ピンと出力ピンが共用 -WE~ LOW to High-Z: 5ns ***ADC -PCM1804 2ch 24bit 192KHz ADC --いらないサウンドボードからはがした --明らかにオーバースペック。 *処理 ***波形キャッシュ -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 ***ドットクロック もっとも効率よくVSyncとHSyncを入れれば画面一回更新するのに必要なクロックは 53993 Clock 60FPSだと * 60 = 3,239,580 なので ドットクロックは3.239MHzぐらい 512x128のVRAMを作成する ***EBR RAMの割り振り 4096 point FFTで行う場合 FFT Compiler 5/9 FFT結果保存 2/9 波形キャッシュ 2/9

表示オプション

横に並べて表示:
変化行の前後のみ表示:
目安箱バナー