Почему непричинные? - PullRequest
       99

Почему непричинные?

0 голосов
/ 04 августа 2020

Я пытаюсь реализовать фильтр непричинной скользящей средней степени 3 (в Python), который будет применяться к одному из сигналов. У меня есть представление о скользящей средней, но я новичок в обработке сигналов. На данный момент я знаю, что метод сглаживания, такой как MA, уменьшит шум в данных, но затем сделает резкие переходы в данных все более тупыми. Но тогда мой вопрос: как об этом позаботиться, когда мы go вводим в систему непричинность.

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

1 Ответ

0 голосов
/ 04 августа 2020

Если у вас есть набор данных в памяти, вы можете использовать make output[100] в зависимости от input[105], если хотите. В Python или обработке сигналов нет ничего, что мешало бы вам сделать это математически, если вы понимаете, что вам нужно либо обрезать оба края, либо применить подходящие отступы.

Математически вы просто сворачиваете с помощью желаемый импульсный отклик. Например, импульсный отклик прямоугольника длиной 3 angular скользящего среднего с центром около 0 (не причинно) будет представлен как y[n] = x[n-1]/3 + x[n]/3 + x[n+1]/3. We call the values [1/3, 1/3, 1/3] the coefficients of the non-causal FIR filter we have chosen. Actually designing a filter by choosing the best coefficients is a [mathematically complex and rich problem](https://en.wikipedia.org/wiki/Finite_impulse_response#Filter_design), but you may always obtain a MATLAB license and utilize a tool such as fdatool` для построения фильтр в соответствии с вашими характеристиками частотной характеристики.

Для физической системы или обработки выборки в реальном времени (например, на микроконтроллере, работающем по схеме Python), это, конечно, невозможно реализовать. Предполагая дискретное преобразование и в остальном стабильную систему, непричинность проявляется в Z-преобразовании как элементы формы z ^ n для положительного n. Добавляя задержки (то есть умножая на z -1 ), вы можете сделать свой непричинный ответ причинным за счет этой дополнительной задержки. Глядя на наш предыдущий пример, такая задержка будет соответствовать тому, что output[100] все еще будет зависеть от input[105], но сделает 100-ю выходную выборку доступной только для следующего этапа после того, как будет получена 105-я входная выборка.

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

...