Как построить входные аналоговые сигналы от Arduino в Matlab
Я пытался читать аналоговые сигналы через Arduino Uno и чертя их в MATLAB. Когда я дал свою входную волну от генератора функций и попытался построить ее, построенные сигналы были неправильными, например, входная синусоида не дала синусоиды. В чем может быть причина? Нужна ли какая-либо внешняя схема для плавного чтения?
КОД ARDUINO
void setup()
{ Serial.begin(9600); }
void loop()
{
int a=analogRead(A0);
Serial.println(a);
delay(1);
}
MATLAB CODE
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 ответ
Только один вопрос: ты когда-нибудь изучал теорию сигналов? Теорема Найквиста?
Вы получаете 1 очко (100 мкс), а затем отправляете его через последовательное соединение (таким образом, 10 бит на каждый байт) с PRINTLN! (таким образом, вы отправляете, например, 6 байтов, то есть "1023" + CR + LF). Итак, 60 байтов, при 9600 бит / с это больше, чем 6 мс. Давайте предположим, что это 7 мс для каждой точки.
Теперь у вас есть волна 1 кГц. Таким образом, вы берете один образец из волны, затем ждете, пока пройдут 6 из них, и затем возьмите другую точку. Таким образом, вы никогда не сможете увидеть ничего.
Если вы хотите увидеть свою волну, попробуйте по крайней мере 10 баллов за каждую волну (т. Е. Не превышайте 15 Гц). Если вы хотите увидеть лучшую волну, попробуйте использовать интерполяцию sinc вместо простой интерполяции.