0

私は arduino uno を介してアナログ信号を読み取り、MATLAB でプロットしようとしています。関数発生器から入力波形を与えてプロットしようとすると、プロットされた信号が正しくありませんでした。たとえば、入力正弦波が正弦波を与えませんでした。考えられる理由は何ですか?スムーズな読み取りのために外部回路が必要ですか?

アルディーノコード

void setup() 
{ Serial.begin(9600); } 
void loop() 
{ 
int a=analogRead(A0); 
Serial.println(a); 
delay(1); 
}

MATLAB コード

s=serial('COM3','BaudRate',9600); 
fopen(s) 
x=1:100; 
n=1; 
while n==1 
   for i=1:length(x) 
       tmp=fscanf(s,'%d'); 
       if length(tmp)>1 
          continue; 
       end 
       y(i)=tmp; 
   end 
   y=y/1024*5; 
   ylim([0 5]); 
   plot(x,y) 
   drawnow 
   end 
fclose(s) 
4

1 に答える 1

1

1 つだけ質問があります。信号理論を勉強したことがありますか? ナイキスト定理?

1 ポイント (100 us) を取得し、PRINTLN を使用してシリアル接続 (つまり、1 バイトごとに 10 ビット) を介して送信します。(したがって、たとえば 6 バイト、つまり "1023" + CR + LF を送信します)。したがって、60 バイト、9600 bps では 6 ミリ秒を超えます。すべてのポイントで 7 ミリ秒と仮定しましょう。

これで 1 kHz の波ができました。したがって、波から 1 つのサンプルを取得し、そのうちの 6 つが通過するのを待ってから、別のポイントを取得します。したがって、何も見ることができなくなります。

波を見たい場合は、すべての波に対して少なくとも 10 ポイントを持たせるようにしてください (つまり、15 Hz を超えないようにしてください)。より良い波を見たい場合は、単純な補間の代わりに sinc 補間を使用してみてください。

于 2014-10-07T12:32:37.710 に答える