یک راه حل خیلی ساده این هست که lowpass را روی سیگنال اعمال کنید دو روش در زیر براتون قرار میدم.
مثلا از فیلتر گوسین یک بعدی استفاده کنید مثال زیر:
import numpy as np
from scipy.ndimage.filters import gaussian_filter1d
# Load PPG dataset
ppg_data = # Your PPG dataset
# Preprocess PPG signal
preprocessed_ppg = # Preprocessed PPG signal
# Gaussian filtering
smoothed_ppg = gaussian_filter1d(preprocessed_ppg, sigma=3)
# Display the original and denoised signals
import matplotlib.pyplot as plt
plt.figure(figsize=(10, 4))
plt.plot(ppg_data, label='Original PPG Signal')
plt.plot(smoothed_ppg, label='Denoised PPG Signal')
plt.legend()
plt.xlabel('Time')
plt.ylabel('PPG Values')
plt.title('Denoising PPG Dataset')
plt.show()
اعمال فیلتر lowpass از طریق کد زیر .اینجا سیگنال رو خودمون ایجاد کردیم.
import numpy as np
from scipy import signal
import matplotlib.pyplot as plt
# Generate synthetic noisy PPG data
t = np.linspace(0, 10, 1000)
ppg_signal = np.sin(2 * np.pi * 1 * t) + 0.5 * np.random.normal(size=len(t))
# Apply a low-pass filter
b, a = signal.butter(4, 0.1, btype='low')
denoised_signal = signal.filtfilt(b, a, ppg_signal)
# Plot the original and denoised signals
plt.plot(t, ppg_signal, label='Noisy PPG')
plt.plot(t, denoised_signal, label='Denoised PPG')
plt.xlabel('Time')
plt.ylabel('Amplitude')
plt.legend()
plt.show()
اما راه حل های خیلی دقیق تری هم وجود داره که برپایه deep learning هست .جدیدا اطلاع دارم مهندس ساتکی همچین کاری انجام داده.