MATLABとSpartan-6ボードで音声キャプチャ
特電Spartan-6ボードに、ADコンバータをつないで、音声をキャプチャしてみました。
キャプチャした音声データは基板のDDR2 SDRAM上に格納しています。
これをUSBを経由してMATLABに取り込み、波形を表示させたり、スペクトルを表示させたりします。
作ったMATLABのスクリプトは以下のとおりです。
USBOpen();
len = 131072;
flag = 2;
axes('YScale','log');
while(1)
read_data = zeros(len,1);
[read_data,s] = USBReadData16(len,flag);
plot(read_data);
pause(0.0001);
y = fft(read_data,len);
f = (0:len-1)*(1/len);
power = y.*conj(y)/len/2048;
% loglog(power);
pause(0.0001);
end;
さすがMATLABといいたいところですが、苦労しました。
対数グラフを描くにはplotは使えないのですね、きっと。(追記:つかえるらしい)
片対数グラフを描くにはsemilogyを、両対数はloglogを使ってうまくいきました。
そういうものなのでしょう。
今回は音声帯域でデモしましたが、実はここで作ったFPGAのデザインは、400MHzくらいまでの汎用データキャプチャができるものなのです。任意のタイミングでキャプチャしたデータをいったんFIFOに入れてからSDRAMに書き込み、USBで読み出しています。
だから、なんでもキャプチャしてグラフにできるはずです。
このアプリケーションの問題点は、DDR2 SDRAMがかなり熱くなること。SDRAMが頑張っているな~と思いたいのですが、ちょっと熱すぎるかも。SDRAMまわりのデザインを見直してみることにしましょう。
| 固定リンク
コメント
こういう記事好きですw
あまりコメント書き込みしてませんがいつも楽しく拝見してます。
投稿: 柊 | 2010.10.20 21:45
気になった点があったのでコメントします。
> DAコンバータをつないで、音声をキャプチャしてみました。
ADコンバータですよね?
> 対数グラフを描くにはplotは使えないのですね、きっと。
軸の目盛りを気にしなければ、plot(X,Y) 形式で細工することも可能です。
> 片対数グラフを描くにはsemiplotyを、両対数はloglogを使ってうまくいきました。
片対数グラフはsemilogyとsemilogxだったはずです。
semiplotyというのは無かったと思うのですが?
投稿: | 2010.10.21 11:58
柊さん
コメントありがとうございます。
MATLABに限らず、LabViewやSCILABやOCTAVE、そしてEXCELなどいろいろなツールに接続して計測できるようにしたいと思っています。お楽しみに。
匿名さん
いろいろと教えていただきありがとうございます。
本文を修正しました。plotでもできるんですね。
投稿: なひたふ | 2010.10.21 12:08