2013-06-22 2 views
2

У меня возникли проблемы с получением согласованных результатов с кодом, который я использую. Я хочу запустить Arduino в течение определенного времени (например, 20 секунд) и собирать данные с аналогового вывода с определенной частотой дискретизации (скажем, четыре раза в секунду). Код выглядит следующим образом.Настройка частоты дискретизации в MATLAB для Arduino

a_pin = 0; 
tic; 
i = 0; 

while toc < 20 
    i = i + 1; 
    time(i) = toc; 
    v(i) = a.analogRead(a_pin); 
    pause(.25); 
end 

Есть ли способ установить цикл для запуска определенного времени, а затем в примере цикла с другой скоростью?

ответ

0

Вы можете попробовать это:

a_pin = 0; 

fs = 4; % sampling frequency (samplings per second) 
mt = 20; % time for measurements 

ind = 1; 
nind = 1; 
last_beep = 0; 
tic; 
while toc < mt 

    time(ind) = toc; 
    v(ind) = a.analogRead(a_pin); 

    % wait for appropriate time for next measurement 
    while(nind == ind) 
     nind = floor(toc*fs) + 1; 
    end 
    ind = nind; 

    % beep every second 
    if (ceil(toc) > last_beep) 
     beep(); % don't know if this one exist, check docs 
     last_beep = ceil(toc); 
    end 
end 
+0

Кажется, отлично работает! Большое спасибо ! Вы знаете, какая максимальная частота дискретизации? – user2512053

+0

Пожалуйста, примите ответ (зеленая галочка в левой части ответа), если это поможет вам решить вашу проблему ... Максимальная частота дискретизации будет ограничена вашим оборудованием (моя догадка). Ограничение конца Matlab - это разрешение 'tic' /' toc' функций, которые * очень точны * ([подробнее] (http://www.mathworks.com/company/newsletters/articles/improvements-to-tic- и-TOC-функции-для измерения абсолютной-истекшее время-производительность-в-matlab.html)). – plesiv

+1

Новое на форуме не знало, что вы принимаете решения ... но я просто сделал это. Еще раз спасибо за помощь – user2512053

0

Максимальное время выборки для одного аналогового Arduino команды чтения составляет около 0,04 с, на практике я бы минимально 0,05. Добавление двух операций чтения выполняется в порядке 2 * 0,04, на практике больше, чем 0,1 с. Я думаю, что это в основном ограничено скоростью связи USB.

-1

Я также новичок в arduino, но, внедрив анализ в реальном времени для использования ЭЭГ, на практике я смог пробовать 2 аналоговых канала с частотой дискретизации между 57 и 108 Гц. Он был очень переменным (рассчитанным через tic/toc), но он по-прежнему подходит для обработки в реальном времени в моем случае.

Мой код использует цикл While, серию обновлений памяти, цифровые пин манипуляции, участок трассы (drawnow) и, кажется, работать достаточно плавно

Моего ответа просто здесь: 0,0283 сек для выборки 2 аналоговых входа в моем случае.

Cheers