如何在matlab中绘制来自arduino的输入模拟信号



我一直在尝试通过arduino uno读取模拟信号,并在MATLAB中绘制它们。当我从函数生成器给出输入波并试图绘制它时,绘制的信号是不正确的,例如输入正弦波没有给出正弦波。可能的原因是什么?我需要任何外部电路来顺利阅读吗?

ARDUINO代码

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) 

只有一个问题:你学过信号理论吗?奈奎斯特定理?

您获得了1个点(100 us),然后通过串行连接(因此每个字节10位)发送PRINTLN!(例如,您发送6个字节,即"1023"+CR+LF)。因此,60字节,在9600 bps时,它超过6毫秒。假设每个点都是7毫秒。

现在你有一个1千赫的波。所以你从一个波浪中取一个样本,然后等待其中6个通过,然后取另一个点。所以你永远看不到任何东西。

如果你想看到你的波,试着每波至少有10个点(即不要超过15赫兹)。如果你想看到更好的波浪,试着使用sinc插值而不是普通插值。

最新更新