У меня нет опыта ЭКГ, но я могу предложить решение:
- Создать сигнал шага.
- Сглаживает шаговый сигнал, используя свертку с гауссовским.
- Создайте «сигнал шума» и умножьте его на сглаженную маску шага.
- Суммируйте «Сигнал шума» с исходным сигналом.
Вот пример кода:
%Read sample EEG file (MATLAB built in sample).
load('ecgsig.mat');
E = ecgsig(1:end/100); %Take only 1% of data sample
T = zeros(size(E));
%Create an stripe of ones.
T(1+end*3/8:end*5/8) = 1;
%Smooth T - create smooth change by applying gaussian filter.
%T = imgaussfilt(T, 1000);
h = fspecial('gaussian', [1000, 1] ,300);
T = conv(T, h, 'same');
%Build "Noise signal" in size of E - gaussian noise with zero mean (I used image processing toolbox function).
N = imnoise(ones(size(E))*0.5, 'gaussian', 0, 0.1) - 0.5;
%Multiply "Noise signal" by the "smooth transition" mask.
N = N.*T;
%Add the masked "Noise signal" to the original signal.
J = E + N;
figure;plot(J);grid on;
Результат: