我一直在尝试通过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插值而不是普通插值。