Dlinyj (dlinyj) wrote,
Dlinyj
dlinyj

Categories:

Проблемы ошибок квантованияи при численном взятии производной.

Когда я был в Питере, и мы сидели в кабаке, у нас с товарищами microtrigger, zyrg, и vshmuk возникли дебаты про численное нахождение производной, снятой с АЦП. Грубо говоря, есть некоторый датчик, который снимает интегральный сигнал (ну к примеру путь S), а нам нужно построить производную этого сигнала (к примеру скорость V). Товарищ zyrg с пеной у рта доказывал, что это весьма сложная задача, с которой могут быть великие проблемы, если не использовать специальных фильтров. Я решил отложить дебаты, пока сам не решу эту задачу. Приехав домой, я быстренько забабах это всё в Exel. При проверке, решил сразу убить двух зайцев - проверить ошибки квантования и убедится в верности нахождения производной. В двух словах вдадимся в подробности теории. Что есть производная:



Поскольку дельта икс у нас совершенно чёткая, или скорее равная отрезкам оцифровки, то производная значения снятого с АЦП будет нынешнее значение минус предыдущее, делённое на период квантования: df/dt=(f(t1) -f(t2))/(t1 -t2). Для опытов я выбрал функцию гармонического синуса sin(x). В дальнейшем проверил и на остальных функциях, но это самая красивая и в нашем случае самая актуальная.


Изначальный график для экспериментов

Для начала я составил таблицу, над которой начал издеваться. Первая строчка [ t= ] - это время от старта работы условного АЦП, который наращивается с шагом квантования (последняя строчка). Вторая - [ SIN(t) ]синус вычесленный от этого кванта времени, формула которого примитивна: =SIN(B1). Третья - [ dSIN(t)/dt ] это численное нахождение производной. Формула её проста: =(C2-B2)/C5 (первая ячейка). Предпоследняя строчка это [ COS(t) ], это нахождения косинуса от перменной t. Она нужна для того, чтобы сравнивать с истинным значением косинуса вычисленную производную (если помните, производная синуса - это косинус). Последняя строка - это квантование, т.е. проще говоря шаг изменения t. Внизу строиться график, который строит гибкую линию по точкам. Сейчас у нас выбран самый оптимальный шаг квантования 0,5 . Здесь всё ясно, дальше я двух разделах покажу сначала ошибки квантования, и следственные ошибки производных, затем ошибки дифференцирования при ошибочных входных данных. Если ваш мозг не вспух и вы готовы дальше пуститься в дебри математики и электроники,

Ошибки квантования
Как видно из самой первой картинки, производная практически полностью соответствует графику косинуса. Если мы ещё уменьшим "частоту дискретизации", или в нашем случае шаг до dt=0,1, то получим вообще практически совпадающие кривые, которые я проиллюстрирую ниже:


Полученный график с шагом 0,1

Как видно, при этом шаге квантования график производной (фиолетовая кривая), практически полностью совпадает с графиком косинуса (красная кривая). Маркерами показанны точки квантования. В этом случае всё ясно, но давайте увеличим шаг, от 0,5 до 1


Полученный график с шагом 1

Видно, что производная, да и все графики начинают "плыть".

Продолжим увеличение квантования до 2:


Полученный график с шагом 2

Всё начинает плыть и уходить, но ещё отдалённо напоминает синус. Однако уже видно, что численно рассчитанная производная СОВЕРШЕННО не соответствует своему значению. Да и вообще находится в противофазе. Напоследок возьмём квантование равное 5 (в 10 раз больше исходного).


Полученный график с шагом 10

Видно что в этом случае мы наблюдаем полную ересь. И в данном случае можно сказать, что высокие частоты и шумы, могут хорошо подпортить реальное значение производной. Теперь же посмотрим как влияет погрешность снятого сигнала, на численный рассчёт производной.

Численное вычисление производной, при неточности снятого сигнала (шумах, наводках, высших гармониках)

Добавим теперь в формулу вычисления синуса некоторую погрешность снятия сигнала, для этого прибавим к формуле вычисления синуса некоторое случайное число: =SIN(C1)+СЛЧИС()*0,1 . Данная формула внесёт 10% погрешность от амплитудного значения в вычисление сигнала, просто добавляя некоторое случайное число от нуля до 0,1. Я покажу несколько вариантов с разной погрешностью. Сначала покажем сигнал с 5% погрешностью:


Полученный график с погрешностью 5%

Как видно из графика, ни на синус, ни на производную такая погрешность не оказывает должного влияния. Возьмём тогда погрешность в 10%


Полученный график с погрешностью 10%

Вот, ярко видно, что на графике синуса погрешность сказалось мало. А вот на графике производной очень даже, в особенности хорошо раскорячило её концы. На последок покажу что будет если построить график производной с 20% погрешностью:


Полученный график с погрешностью 20%

График отдалённо напоминает косинус. Видно куча убеганий и прочего. Надо учитывать, что это ПСЕВДОслучайная велечина, в реальной жизни всё может быть гораздо хуже. Но всё же лучше смоделировать данные фишки, чтобы представлять себе что же может твориться на АЦП.



Вывод: Считать численно производную по снятым значениям с АЦП можно и нужно. Но необходимо оценивать уровень внешних помех, которые могут влиять на сигнул, и очень сильно его портить. Желательно использовать фильтрацию сигнала, выделяя полезный сигнал. Филтрация может быть как аналоговая, так цифровуя. Мне даже показали прекрасную формульную замену аналоговой фильтрацией прекрасной програмкой на си. И разумеется мы должны себе ЧЁТКО представлять какой сигнал цифруем, и не цифровать сигнал на пределах возможностей АЦП. 5 точек на период, как показала практика - не самый плохой вариант!
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 11 comments