Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
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 | ||
- | # Исходный зашумленный сигнал | + | a = np.r_[np.arange(0,30,1),np.zeros((40, |
- | rys = np.array(...) | + | |
- | # Окно сглаживания | + | plt.plot(a) |
- | window_len = 45 | + | |
- | + | ||
- | # Формируем полуокна для предотвращения краевых эффектов | + | |
- | lead_0 = rys[0] | + | |
- | lead = rys[window_len// | + | |
- | tail_0 = rys[-1] | + | |
- | tail = rys[-2: | + | |
- | </ | + | |
- | + | ||
- | </ | + | |
- | + | ||
- | ==== Сглаживание ==== | + | |
- | + | ||
- | <sxh python> | + | |
- | # Дополняем ряд данных полуокнами как четными функциями | + | noise_a |
- | ds = np.r_[lead, rys , tail] | + | |
- | # Дополняем ряд данных полуокнами как нечетными функциями | + | plt.plot(noise_a) |
- | ds = np.r_[2*lead_0-lead, | + | |
- | # Выбираем оконную функцию | + | def smooth(data, |
- | w = np.hanning(window_len) | + | |
+ | lead = data[window_len// | ||
+ | tail_0 = data[-1] | ||
+ | tail = data[-2: | ||
+ | if tails == " | ||
+ | ds = np.r_[2*lead_0-lead, | ||
+ | else: | ||
+ | ds = np.r_[lead, data , tail] | ||
+ | | ||
+ | return np.convolve(w/ | ||
- | # Выполняем свертку | + | plt.plot(smooth(noise_a, 40, tails = " |
- | rzlt = np.convolve(w/w.sum(), ds, mode=' | + | |
</ | </ | ||
Строка 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, | ||
+ | plt.imshow(baz((grid_x, | ||
# Значения на регулярной сетке | # Значения на регулярной сетке | ||
data = scipy.interpolate.griddata(np.rollaxis(np.array([xs, | data = scipy.interpolate.griddata(np.rollaxis(np.array([xs, | ||
- | |||
# Интерполяция | # Интерполяция | ||
foo = RegularGridInterpolator((xi, | foo = RegularGridInterpolator((xi, | ||
- | func(-0.5,1) # 1.0 | + | # точки |
+ | plt.scatter(xs, | ||
+ | |||
+ | # исходное поле | ||
+ | plt.imshow(func(grid_x, grid_y), extent=[-5,5,-2,2], origin=' | ||
+ | |||
+ | # полученное поле на регулярной сетке | ||
+ | plt.imshow(data, | ||
- | foo([-0.5,1]) | + | # результат интерполяции |
+ | plt.imshow(foo((grid_x, grid_y)), extent=[-5,5,-2,2], origin=' | ||
</ | </ | ||