[分享] 即時雙通道FFT功率密度頻譜 on NI FPGA DAQ

前一陣子有站上同學問了在NI FPGA/Compact RIO上寫FFT的問題, 在家裡的R系列內嵌3Mgate FPGA的DAQ PXI-7833R上試寫了以後, 發現還蠻簡單使用的說, 所以就把寫完的示範程式分享上來.

 

Project內大部分程式都是驗證過的, 除了AI Decimate FFT 2ch.vi 這支還在改 (想利用decimation filter解析度增強的能力, 把160KSps AI進來的16bit資料流decimation成40KSps的18bit資料流, 壓低16bit AI的noise floor, 壓低底噪的能力初期試驗OK了, 還有些bug下禮拜上班後再解)

FPGA FFT 86s.rar

[tube]http://www.youtube.com/watch?v=tCvzMqk13jA[/tube]

搞定了AI 四倍超取樣後, 利用Rational Resampler Express.vi改善noise floor 的部分, 不過效果有限就是了 (改善約10dB).


程式如下: 
FPGA FFT 86.rar
軟體需求: (LabVIEW 8.6.1 with FPGA module)
硬體需求: NI PXI-7833R or PCI-7833R 以上

測試效果如下 (1kHz 信號源 PXI-4461, noise floor約-140dB): 
(2ch, AI Fs=40kHz, N=2048點, Noise floor 約為-90dB, SNR ~=80dBFS)
NI PXI-7833R 的AI是固定在±10V, 所以full scale是20dB, 不是一般預設±1V的0dB.

(2ch, AI Fs=160kHz, Resample to 40kHz, N=2048點, Noise floor 約為-100dB, SNR ~=90dBFS)

(1ch, AI Fs=160kHz, Resample to 40kHz, N=4096點, Noise floor 約為-100dB, SNR ~=90dBFS)

補充一點, PC端負責FFT讀出的Host程式裡有把Intensity Chart 的線性Y軸重新取樣成Log軸的寫法 (為何要自己寫? 因為LabVIEW Intensity Chart的Y軸沒辦法設定成Log scale).

Log 軸對聲學分析相當重要, 因為人類對音響頻率的感受是Log scale的, 所以樓上影片後半段測試音樂的部分, 就可以 “看到” 一群小喇叭所演奏的 “音符”, 用這支程式接上麥克風, 可以試試自己清唱一段Do Re Mi Fa So, 就會發現這些音階在頻譜上是等距的, 錄一下樂器發出的泛音也會是如此.

所以說, 若要我來說說希望LabVIEW 2012版要有什麼新功能, 這Intensity Chart, Intensity Graph 與3D Intensity Plot 其XYZ三軸都能支援Log mapping就是了.
DennyT40729.951400463