Jump to content

    
Sign in to follow this  
_pv

Операция обратная к "скользящему среднему"

Recommended Posts

Скользящее среднее нелинейно искажает высокие частоты. Через фурье или свёртку недостоверно будет. В частоту Fs/2D попадут искажения (обрезки) частот, некратных Fs/2D. Если свернуть выход фильтра с обратной скользящему фильтру функцией, то частота Fs/2D будет плавать по фазе. А она ещё должна будет усилиться в 1.41 раза для восстановления амплитуды. И увеличения амплитуды "мусора".

 

Разве скользящее среднее не свертка?

As you may have recognized, calculating the simple moving average is similar to the convolution: in both cases a window is slid along the signal and the elements in the window are summarized.

http://matlabtricks.com/post-11/moving-ave...-by-convolution

 

Edited by Tarbal

Share this post


Link to post
Share on other sites
Разве скользящее среднее не свертка?

Свёртка, конечно. С функцией, где все элементы еденичные.

Порождаемые ею алиасы при увеличении периода сигнала в спектральном представлении исчезают. Но не "бесплатно". А частоты, кратные Fs/(2N+1) (в обозначениях автора темы) вообще будут недостоверны в спектре.

Edited by GetSmart

Share this post


Link to post
Share on other sites
Свёртка, конечно. С функцией, где все элементы еденичные.

Порождаемые ею алиасы при увеличении периода сигнала в спектральном представлении исчезают. Но не "бесплатно".

 

Свертка линейная операция? или "нелинейно искажает высокие частоты".

 

По методу оптимальной гомоморфной фильтрации все просто:

Из кепстра обработанной последовательности вычитаем кепстр прямоугольного окна и восстанавливаем из результата исходную последовательность, посредством потенцирования и обратного преобразования Фурье.

 

Полагаю, что матрицами можно получить более оптимальное решение. Грешно решать задачу в лоб (мое предложение), применяя полное решение, когда есть такой подарок судьбы как прямоугольное окно.

 

 

В процессе дискуссии возник интересный диалог "экспериментаторов" с "теоретиками". Почти уверен, что рекурентное решение в силу своей простоты блестяще справится с работой. Ради такого решения несложно добавить в программу процедуру калибровки, которая и получит достоверное значение. Имеются и другие способы передать одно оригинальное значение и его позицию в процедуру восстановления.

 

Share this post


Link to post
Share on other sites
Собственно, ничего нового в компенсации инерционности датчиков нет - этот прием достаточно часто используется, к примеру, в терморегулирующей аппаратуре для компенсации инерционности термопар.

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

Share this post


Link to post
Share on other sites

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

 

А насчет восстановления... Тут, на самом деле, все еще интереснее и, похоже, однозначного метода восстановления нет.

 

Как пример. Пусть мы имеем нулевой буфер (длиной N) и подаем синус с периодом N. После N тактов этот синус окажется в буфере и, с N+1 такта, сумма перестанет изменяться. Т.е. на выходе мы имеем константу. Как из нее можно восстановить исходный синус? Т.е. наличие сигналов с периодами N, N/2 и т.д. мы никак не сможем установить только по сумме.

 

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

 

Фактически, мы сделали обратный фильтр. Но он будет работать, только если исходные значения в буфере при формировании (кодировании) и восстановлении (декодировании) совпадают. Любое расхождение в значениях буферов приведет к каше.

 

Отсюда получаем забавное применение - шифрование сигналов. Знаешь буфер - получи правду, не знаешь - чушь. С точки зрения вычислительной скорости - очень эффективно, на каждом такте просто суммируем, записываем и сдвигаем кольцевой указатель буфера. Единственная потеря - добавление одного разряда (суммирование двух чисел) и разрядности суммы. И подобрать, например, 128 значений в буфере будет весьма непросто. Стоит подумать.

Share this post


Link to post
Share on other sites
Отсюда получаем забавное применение - шифрование сигналов. Знаешь буфер - получи правду, не знаешь - чушь.

Это вряд ли. Тогда бы значения неизвестного буфера были бы очень чувствительны к малейшим искажениям и шумам, чего не наблюдается. Как оказалось, даже если в качестве неизвестных элементов взять значения из скользящего среднего, то результат рекурсивной формулы хорошо корелирует с исходником.

 

Кроме прочего, в терминах гармонических сигналов, частот точно кратных Fs/D (D=2N+1 в обозн. автора) на выходе скользящего среднего просто не осталось. Их восстанавливать методом расширения кол-ва отсчётов (как это делает дискретное ПФ, к примеру) нельзя в принципе. И если вдруг они там реально присутствовали, то возникает неопределённость/недостоверность результата восстановления, пропорциональная амплитуде неизвестных гармоник. Но если речь об этом же, то наверное да, если узнать достоверную часть исходника, то эти гармоники по ней же и определяются.

 

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

Edited by GetSmart

Share this post


Link to post
Share on other sites
Guest TSerg
Вот достоверно знаю, что некоторые неплохие математики (те, которые бумагой пользуются) не смогли решить именно такую задачу.

 

Ничего удивительного - математики вынуждены доказательно приходить к точным решениям, а иначе - они будут выглядеть как проходимцы или перейдут в разряд инженеров, что вряд ли.

Бумага, знаете ли.. - это не железо.

 

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

Share this post


Link to post
Share on other sites
Ничего удивительного - математики вынуждены доказательно приходить к точным решениям, а иначе - они будут выглядеть как проходимцы или перейдут в разряд инженеров, что вряд ли.

Бумага, знаете ли.. - это не железо.

 

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

Нет. Пытались найти класс функций с параметрами. Оказалось, что ничего толкового не получается. С несколькими постоянными времени. Естественно, все это проверялось не на бумаге.

Share this post


Link to post
Share on other sites

Предположим, что начальное значение было измерено с ошибкой Е.

 

X'[i-N-1] = X[i-N-1] + E

 

И вместо

X[i+N] = X[i-N-1] + (Y - Y[i-1]) * 2N

 

имеем

X'[i+N] = X'[i-N-1] + (Y - Y[i-1]) * 2N

 

 

 

X'[i+N] = X[i-N-1] + E + (Y - Y[i-1]) * 2N

 

X'[i+N] = X[i+N] + E;

 

Все значения восстановленной последовательности будут смещены на одну и ту же ошибку Е.

 

Поссчитав среднее Y' по результатам, получим значение ошибки Е = Y' - Y.

Edited by Tarbal

Share this post


Link to post
Share on other sites
спектроскописты используют теорему о свертке [...] нужно знать аппаратную функцию. Ее экспериментально получают с помощью априорных знаний или подают дельта-функцию

Так или иначе, аппаратную функцию A можно определить. Настоящие неприятности возникают при решении обратной задачи

 

x = A-1f

когда выясняется, что она либо вовсе не имеет решений либо имеет несколько (бесконечно много) решений.

 

Share this post


Link to post
Share on other sites
Свертка линейная операция? или "нелинейно искажает высокие частоты".

 

По методу оптимальной гомоморфной фильтрации все просто:

Из кепстра обработанной последовательности вычитаем кепстр прямоугольного окна и восстанавливаем из результата исходную последовательность, посредством потенцирования и обратного преобразования Фурье.

Она "стирает" о них информацию. Так понятней? На коротких интервалах (естественно шире D) и достаточно близких к кратным частотам, делая неоднозначной их фазу и амплитуду. К примеру, чтобы минимально точно восстановить частоту Fs/(D+1) нужно накопить один период "остатков информации" и чем ближе искомая частота к стёртым, тем больше периодов D нужно будет взять для ПФ.

 

Поссчитав среднее Y' по результатам, получим значение ошибки Е = Y' - Y.

С постоянкой там нет проблем.

 

-----------------

 

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

 

Стоит подумать.

Там "зашифровано" будет только минимум информации объёмом в тот самый буфер. Являющейся как раз этими частотами кратными Fs/D.

 

Но на практике, без экстремально точного постановщика помех, скорее всего 99% информации (самой амплитудно-значимой) будут извлекаться с 99% достоверностью. Если взять спектральную сетку частот, вплоть до Fs/2, то из неё вырежутся кратные периоду скользящего (типа слепого пятна в зрении), а остальные можно увидеть взяв больше элементов с выхода скользящего. Кроме того, восстановить по ним буфер можно с не очень высокой точностью, что слегка размажет спектр. Для практического применения, особенно широкополосных сигналов, это вообще норма.

 

Ещё нюанс. У неизвестного буфера отдельные элементы, а так же их сумма (если) будут округлены в процессе дискретизации. И шуметь переходя от элемента к элементу скользящего среднего в спектре от Fs/2 до Fs/D. За эту "дрожь" можно было бы зацепиться. Может быть даже чтобы увидеть обнулённые частоты (т.о. весь буфер).

Edited by GetSmart

Share this post


Link to post
Share on other sites
Она "стирает" о них информацию. Так понятней? На коротких интервалах (естественно шире D) и достаточно близких к кратным частотам, делая неоднозначной их фазу и амплитуду. К примеру, чтобы минимально точно восстановить частоту Fs/(D+1) нужно накопить один период "остатков информации" и чем ближе искомая частота к стёртым, тем больше периодов D нужно будет взять для ПФ.

 

Непонятно что такое D и чему кратны частоты.

Share this post


Link to post
Share on other sites
Т.е. наличие сигналов с периодами N, N/2 и т.д. мы никак не сможем установить только по сумме.

Вообще с периодами меньше или равными N: N, N-1, N-2 ...

 

получаем забавное применение - шифрование

Вот так, прикоснёшься к теории интегральных преобразований и поневоле придёшь к выводу о непознаваемости мироздания... :)

Share this post


Link to post
Share on other sites

А был ли мальчик? :)

Если рассуждать логически, то используя сигнал скользящего среднего в дальнейшей обработке как единственного источника информации об объекте, разработчик уже "согласился" с невидимостью какого-то паттерна, шириной N. Т.о. никакой чуши, как утверждает rudy_b, корректный алгоритм восстановления не добавляет. Тема топика - улучшить разрешение скользящего среднего. А информация на большой ширине данных является достоверной и не принадлежащей неизвестному паттерну. Немного похоже на парадокс. Но на самом деле восстанавливаются/воссоздаются как бы промежуточные (внутри короткого буфера) элементы, принадлежащие к незанулённым ВЧ-частотам. Элементы же дискретизированны во времени с неизвестными промежуточными значениями. Можно настолько много элементов воссоздать, что информационно и "качественно" задавит тот небольшой неизвестный буфер.

 

При обратном восстановлении частоты, кратные периоду скользящего стёрты в ноль. Остальные, выше Fs/N всё-таки видны на большем интервале. Промежуточные можно достать через ПФ с домножением на коэффициент обратный подавлению, но не слишком большой, т.к. там будет предел сохранности информации для слишком обрезанной гармоники, близкой к запретной. Если буфер для восстановления воссоздать слегка неточно, то пропустив его через рекурсивную формулу, она его компоненты слегка размажет в спектральном представлении и обнулённых частот там просто не останется. Что плохого, если частоты выше Fs/N будут слегка размазаны, но на 99% коррелируют с исходником.

 

Математические рассуждения про паттерн корректны в идеально точных числах. На практике числа не только квантованы, но и суммы могут округляться. Плюс шум в канале и неидеальности оцифровки. Шум квантования в реалиях может как раз нести полезную (утерянную) информацию.

Edited by GetSmart

Share this post


Link to post
Share on other sites

Ну не знаю, читаю уже четвертую страницу, реальных советов ноль. ТС решил проблему еще на первой странице, а все остальное просто хлам на мой взгляд. А так хочется увидеть качественное решение, с исходными данными, конкретным результатом и списком налагаемых ограничений...

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this