Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
calc:math [2021/03/18 14:36]
root
calc:math [2024/05/28 11:49] (текущий)
root
Строка 140: Строка 140:
  
 ===== Сглаживание апериодического сигнала ===== ===== Сглаживание апериодического сигнала =====
- 
-==== Подготовка данных ==== 
  
 <sxh python> <sxh python>
 import numpy as np import numpy as np
 +import matplotlib.pyplot as plt
  
-# Исходный зашумленный сигнал += np.r_[np.arange(0,30,1),np.zeros((40,))+30,np.arange(30,60,1)]
-rys = np.array(...)+
  
-# Окно сглаживания +plt.plot(a)
-window_len = 45 +
- +
-# Формируем полуокна для предотвращения краевых эффектов +
-lead_0 = rys[0] +
-lead = rys[window_len//2-1:0:-1] +
-tail_0 = rys[-1] +
-tail = rys[-2:-window_len//2-2:-1] +
-</sxh> +
- +
-</div><div slide> +
- +
-==== Сглаживание ==== +
- +
-<sxh python>+
  
-# Дополняем ряд данных полуокнами как четными функциями +noise_a a + np.random.random_sample(100)*16-8
-ds = np.r_[lead, rys , tail]+
  
-# Дополняем ряд данных полуокнами как нечетными функциями +plt.plot(noise_a)
-ds = np.r_[2*lead_0-lead, rys , 2*tail_0-tail]+
  
-# Выбираем оконную функцию +def smooth(data, window_len = 10, tails = "odd"): 
-w = np.hanning(window_len)+    lead_0 = data[0] 
 +    lead = data[window_len//2-1:0:-1] 
 +    tail_0 = data[-1] 
 +    tail = data[-2:-window_len//2-2:-1] 
 +    if tails == "odd": 
 +        ds = np.r_[2*lead_0-lead, data , 2*tail_0-tail] 
 +    else: 
 +        ds = np.r_[lead, data , tail] 
 +    w = np.hanning(window_len
 +    return np.convolve(w/w.sum(), ds, mode='valid')
  
-# Выполняем свертку +plt.plot(smooth(noise_a40tails "odd"))
-rzlt = np.convolve(w/w.sum()dsmode='valid')+
 </sxh> </sxh>
  
Строка 212: Строка 202:
 <sxh python> <sxh python>
 from scipy.interpolate import RegularGridInterpolator from scipy.interpolate import RegularGridInterpolator
 +import numpy as np
 +import matplotlib.pyplot as plt
  
 def func(x, y): def func(x, y):
Строка 227: Строка 219:
  
 #Нерегулярная сетка #Нерегулярная сетка
-xs = (5 - (-5)) * np.random.random_sample(20) + (-5) +xs = np.random.uniform(-5, 5, 50
-ys = (2 - (-2)) * np.random.random_sample(20) + (-2)+ys = np.random.uniform(-2, 2, 50)
  
 #Значение в точках #Значение в точках
 values = func(xs, ys) values = func(xs, ys)
 +
 +# Линейная интерполяция на нерегулярной сетке
 +baz = scipy.interpolate.LinearNDInterpolator(np.rollaxis(np.array([xs,ys]), 1), values)
 +plt.imshow(baz((grid_x, grid_y)), extent=[-5,5,-2,2], origin='lower')
  
 # Значения на регулярной сетке # Значения на регулярной сетке
 data = scipy.interpolate.griddata(np.rollaxis(np.array([xs,ys]), 1), values, (grid_x, grid_y)) data = scipy.interpolate.griddata(np.rollaxis(np.array([xs,ys]), 1), values, (grid_x, grid_y))
- 
  
 # Интерполяция # Интерполяция
 foo = RegularGridInterpolator((xi,yi),data) foo = RegularGridInterpolator((xi,yi),data)
  
-func(-0.5,1) # 1.0+# точки 
 +plt.scatter(xs, ys) 
 + 
 +# исходное поле 
 +plt.imshow(func(grid_x, grid_y), extent=[-5,5,-2,2], origin='lower') 
 + 
 +полученное поле на регулярной сетке 
 +plt.imshow(data, extent=[-5,5,-2,2], origin='lower')
  
-foo([-0.5,1])+# результат интерполяции 
 +plt.imshow(foo((grid_x, grid_y)), extent=[-5,5,-2,2], origin='lower')
 </sxh> </sxh>