Как удалить граничные эффекты, возникающие из -за нулевой прокладки в Scipy/Numpy FFT?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как удалить граничные эффекты, возникающие из -за нулевой прокладки в Scipy/Numpy FFT?

Сообщение Anonymous »

Я сделал код Python для сглаживания данного сигнала, используя преобразование weierstrass, которое в основном является сверткой нормализованного гауссов с сигналом.#Importing relevant libraries
from __future__ import division
from scipy.signal import fftconvolve
import numpy as np

def smooth_func(sig, x, t= 0.002):
N = len(x)
x1 = x[-1]
x0 = x[0]

# defining a new array y which is symmetric around zero, to make the gaussian symmetric.
y = np.linspace(-(x1-x0)/2, (x1-x0)/2, N)
#gaussian centered around zero.
gaus = np.exp(-y**(2)/t)

#using fftconvolve to speed up the convolution; gaus.sum() is the normalization constant.
return fftconvolve(sig, gaus/gaus.sum(), mode='same')
< /code>



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

пограничные эффекты < /p>

Эта проблема не возникает, если мы напрямую интегрируемся, чтобы найти свертку. Следовательно, проблема не в преобразовании Вейерстрасса, и, следовательно, проблема заключается в функции FFTConvolve в Scipy. < /p>

Чтобы понять, почему возникает эта проблема, нам сначала нужно понять работу FFTConvolve в Scipy.

Функция FFTConvolve в основном использует теорему свертки для ускорения вычислений. /> свертка (int1, int2) = ifft (fft (int1)*fft (int2))

Если мы напрямую применяем эту теорему, мы не получаем желаемый результат. Чтобы получить желаемый результат, нам нужно взять БПФ на массиве вдвое больше, чем максимум (Int1, Int2). Но это приводит к нежелательным граничным эффектам. Это связано с тем, что в коде FFT, если размер (int) больше, чем размер (по которому можно взять БПФ), он нулевой накладывает вход, а затем берет БПФ. Эта нулевая прокладка - именно то, что отвечает за нежелательные граничные эффекты. < /p>

Можете ли вы предложить способ удалить эти граничные эффекты? После сглаживания функции я собираю значение сглаживаемого сигнала с исходным сигналом вблизи границ, и если они не совпадают, я заменяю значение сглаживаемого фонда на входной сигнал в этой точке.i = 0
eps=1e-3
while abs(smooth-sig)> eps: #compairing the signals on the left boundary
smooth = sig
i = i + 1
j = -1

while abs(smooth[j]-sig[j])> eps: # compairing on the right boundary.
smooth[j] = sig[j]
j = j - 1
< /code>



Существует проблема с этим методом, из -за использования Epsilon есть небольшие прыжки в сглаженной функции, как показано ниже:

прыгает в плавном фан -< /p>

. Проблема?



Подробнее здесь: https://stackoverflow.com/questions/100 ... y-numpy-ff
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Неправильные знаки коэффициентов Фурье, возникающие в результате scipy.fft.fft
    Гость » » в форуме Python
    0 Ответы
    33 Просмотры
    Последнее сообщение Гость
  • Математическое выражение преобразования Фурье, используемое в numpy.fft.fft
    Anonymous » » в форуме Python
    0 Ответы
    1 Просмотры
    Последнее сообщение Anonymous
  • Можно ли использовать np.fft.fft для выбора коэффициентов Фурье в один момент времени и на определенной частоте?
    Anonymous » » в форуме Python
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous
  • Почему torch.fft.rfft(x) быстрее, чем torch.fft.rfft(x, out=y)?
    Anonymous » » в форуме Python
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Почему torch.fft.rfft(x) быстрее, чем torch.fft.rfft(x, out=y)?
    Anonymous » » в форуме Python
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»