Я пытаюсь реализовать высокоточный таймер миллисекундной шкалы в Matlab. Каждые T секунд я хочу запрашивать камеру, связанную с matlab, и, если в памяти есть изображение, я хочу вытащить его. Фактическое подключение к камере простое, но проблема возникает из-за того, что изображения поступают через каждые ~ 60 мс, и все они должны быть сняты до того, как другое изображение попадет в буфер камеры. По сути, это означает, что мне нужно проверять буфер камеры, по крайней мере, каждые ~ 30 мс, а в идеале каждые ~ 5 мс.
Хотя встроенная в MATLAB функция timer
якобы допускает синхронизацию в миллисекундах, она страдает от низкой точности. В то время как в> 95% выполнений встроенный таймер MATLAB действительно останавливается на ~ 5 мс между циклами, в ~ 5% случаев он колеблется около ~ 30 мс, а в ~ 1% случаев он занимает> 100 мс между выполнениями, что недопустимо убиваетпредставление. В защиту MATLAB я должен уточнить, что одновременно работают два других таймера (оба с периодами 1 с), а также открыто несколько графических окон, так что, хотя моя машина работает некорректно (16-ядерная, 64 ГБ ОЗУ), естьконечно много надо делать все сразу. Я попытался использовать таймеры на основе таймеров .NET (System.Timers.Timer(period)
), а также с функцией ожидания Java (java.lang.Thread.sleep(period)
), которые теоретически должны быть более точными, и хотя оба они лучше, чем таймер MATLAB (настоимость того, чтобы быть более громоздкой), ни одна из них не может последовательно достичь задержки выполнения <60 мс на протяжении тысяч итераций. </p>
Может быть, я прошу что-то, что не реализуемо - но я надеюсь, что есть какой-то способ реализоватьвысокоточный таймер в MATLAB, который будет продолжать работать в масштабе времени мс, даже если есть другие фигуры / таймеры / команды, выполняемые полуодновременно. Возможно, мне следует уточнить, что при работе только с таймером, когда другие таймеры / цифры не открыты, я могу последовательно достигать выполнения <60 мс (и действительно, последовательное выполнение <10 мс для периода таймера 5 мс). Это возможно, даже когда все эти таймеры / цифры открыты в другом экземпляре MATLAB, поэтому, похоже, проблема состоит в том, чтобы каким-то образом отделить таймер от остальной части MATLAB. В этом отношении будут приветствоваться любые советы или рекомендации. </p>