dlinyj: (Default)
[personal profile] dlinyj
Когда я был в Питере, и мы сидели в кабаке, у нас с товарищами [livejournal.com profile] microtrigger, [livejournal.com profile] zyrg, и [livejournal.com profile] vshmuk возникли дебаты про численное нахождение производной, снятой с АЦП. Грубо говоря, есть некоторый датчик, который снимает интегральный сигнал (ну к примеру путь S), а нам нужно построить производную этого сигнала (к примеру скорость V). Товарищ [livejournal.com profile] 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 точек на период, как показала практика - не самый плохой вариант!

Date: 2007-12-04 05:26 pm (UTC)
From: [identity profile] http://users.livejournal.com/fk_/
Почему не openoffice а? :D

Date: 2007-12-04 05:35 pm (UTC)
From: [identity profile] dlinyj.livejournal.com
какая разница

Date: 2007-12-04 07:23 pm (UTC)
From: [identity profile] dlinyj.livejournal.com
Не я понял, мне пох я ни там ни там не плачу.

Date: 2007-12-09 01:42 am (UTC)
From: [identity profile] lifeslice.livejournal.com
Вы вообще про теорему Котельникова что-нибудь слышали?

Date: 2007-12-09 01:53 am (UTC)
From: [identity profile] dlinyj.livejournal.com
http://community.livejournal.com/ru_radio_electr/346301.html почитайте здесь комментарии.

Теорема Котельникова ничего не говорит о накопление ошибки при дальнейшем преобразовании сигнала.

Date: 2007-12-09 05:54 pm (UTC)
From: [identity profile] lifeslice.livejournal.com
Разумеется. Только в части ваших опытов исходный сигнал взят неправильно.

Чтобы понять это, подумайте о физическом смысле параметра, который вы называете "шаг квантования". Подсказываю - он у вас получился в радианах.

Date: 2007-12-09 06:05 pm (UTC)
From: [identity profile] dlinyj.livejournal.com
Это условный, виртуальный шаг. Я в курсе что он в радианах. Это условный, не метрический шаг. Просто для проведения опыта.

Date: 2007-12-11 11:27 pm (UTC)
From: [identity profile] lifeslice.livejournal.com
Давайте возьмем, например, последнюю диаграмму и посмотрим на график синуса. Он у вас такой, как у меня на левом рисунке (красная линия). Но мне он не нравится. Потому что он построен при помощи сглаживания и отображает невесть что. Без сглаживания он выглядит как на рисунке справа (синяя линия).

Поскольку шаг оцифровки, выраженный фазой, равен 10 радианам, а период синуса, как известно, два пи радиан, получается, что на период синуса приходится менее одного отсчета, а именно 0,63. Согласно теореме Котельникова, отсчетов должно быть не менее 2. Поэтому этот график не может передавать первоначальную функцию.

На правом рисунке я построил по точкам правильный синус в соответствующем масштабе, взяв приращение фазы, равным 0,1 радиана. Это зеленая линия. Как видно, этот график имеет три периода на приблизительно 18 радиан, то есть период функции составляет два пи.

"Ваш" график имеет девять полупериодов на приблизительно 110 радиан. То есть период этой функции около 24 радиан, а частота соответственно - приблизительно в 4 раза меньше требуемой. Эта функция имеет очень далекое отношение к исходному синусу.


Дальнейшие вычисления и рассуждения, относящиеся к численному получению производной этой функции, базируются (в случае с 10-радианным шагом оцифровки) на неверных исходных данных...

Image (http://lifeslice.ru/PDF/longwayhome0.pdf)

Date: 2007-12-11 11:37 pm (UTC)
From: [identity profile] dlinyj.livejournal.com
Мне искренне нравится ваш подход! Я мог бы просто заделится своим экселевским файлом. Хорошо, вопрос такой. Возьмём чётко, 5 точек на период, как по теореме Котельникова. И возьмём погрешность от шумов. Амплитуда синуса у нас равна еденице. Чтобы взять погрешность от шумов, будем добавлять(отнимать) случайное число в пределах 0,1 - это будет 10% погрешность как я понимаю. Грубо это погрешность шумов при оцифровке (ну датких у нас плохой, пусть будем брать акустический датчик). И что получим тогда на выходе? Чтобы добавить погрешность, к функции синуса я добавлял СЛЧИС()*0,1. У вас получилось более качественно, можно даже сделать пост критикующий меня в ру радиоэлектро. Я согласен, что я не истина последней инстанции, но я тоже учусь :)

Date: 2008-02-09 04:27 pm (UTC)
From: [identity profile] lifeslice.livejournal.com
Я думаю, что с моими скромными знаниями математики, я взялся бы получать производную функции, заданной численными отсчетами, имея 4 отсчета на ЧЕТВЕРТЬ периода...

January 2026

S M T W T F S
    123
456 78910
11121314151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 22nd, 2026 06:56 pm
Powered by Dreamwidth Studios