我一直试图通过arduino uno读取模拟信号并在MATLAB中绘制它们。当我从函数发生器给出输入波并尝试绘制它时,绘制的信号不正确,例如输入正弦波没有给出正弦波。可能的原因是什么?我是否需要任何外部电路才能顺利读取?
ARDUINO CODE
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)
答案 0 :(得分:1)
只有一个问题:你有没有研究过信号理论?奈奎斯特定理?
您正在获取1点(100 us),然后通过PRINTLN通过串行连接(每个字节10位)发送它! (所以你发送例如6个字节,即“1023”+ CR + LF)。所以60字节,9600 bps,超过6 ms。我们假设每个点都是7毫秒。
现在你有一个1千赫的波。所以你从波浪中取出一个样本,然后等待其中的6个通过然后再取一个点。所以你永远无法看到任何东西。
如果你想看到你的波浪尝试每波最少10点(即不要超过15赫兹)。如果你想看到更好的波形,尝试使用正弦插值而不是普通插值。