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 个点(100 us),然后您通过串行连接(因此每个字节 10 位)使用 PRINTLN 发送它!(例如,您发送 6 个字节,即“1023”+ CR + LF)。所以 60 字节,在 9600 bps 时超过 6 毫秒。让我们假设每个点都是 7 毫秒。

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

如果您想查看您的波形,请尝试为每个波形设置至少 10 个点(即不要超过 15 Hz)。如果您想看到更好的波浪,请尝试使用 sinc 插值而不是普通插值。

于 2014-10-07T12:32:37.710 回答