« 特電Spartan-6ボードとMATLABとの接続 | トップページ | はじめてのブラケット製造 »

2010.10.20

MATLABとSpartan-6ボードで音声キャプチャ

特電Spartan-6ボードに、ADコンバータをつないで、音声をキャプチャしてみました。
キャプチャした音声データは基板のDDR2 SDRAM上に格納しています。
Addac

これを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_8

Matlab_9

スペクトルで表示すると、こんな感じ。
Matlab_10

さすがMATLABといいたいところですが、苦労しました。
対数グラフを描くにはplotは使えないのですね、きっと。(追記:つかえるらしい)
片対数グラフを描くにはsemilogyを、両対数はloglogを使ってうまくいきました。
そういうものなのでしょう。

今回は音声帯域でデモしましたが、実はここで作ったFPGAのデザインは、400MHzくらいまでの汎用データキャプチャができるものなのです。任意のタイミングでキャプチャしたデータをいったんFIFOに入れてからSDRAMに書き込み、USBで読み出しています。
だから、なんでもキャプチャしてグラフにできるはずです。

このアプリケーションの問題点は、DDR2 SDRAMがかなり熱くなること。SDRAMが頑張っているな~と思いたいのですが、ちょっと熱すぎるかも。SDRAMまわりのデザインを見直してみることにしましょう。

|

« 特電Spartan-6ボードとMATLABとの接続 | トップページ | はじめてのブラケット製造 »

コメント

こういう記事好きです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

コメントを書く



(ウェブ上には掲載しません)




« 特電Spartan-6ボードとMATLABとの接続 | トップページ | はじめてのブラケット製造 »