How to fix jump signal?

조회 수: 17 (최근 30일)
Tyann Hardyn
Tyann Hardyn 2022년 4월 12일
댓글: Star Strider 2022년 4월 13일
Hi, Community
I have a problem to handle jump noise like this :
My question is simple... How to make the jumped harmonic signals to become linear again according to previous signals? for example like this signal below :
Is kinda difficult to fix it without a manual remove.. Thank you so much, everyone....

채택된 답변

Star Strider
Star Strider 2022년 4월 13일
One approach —
Fs = 256;
t = linspace(0, Fs*10-1, Fs)/Fs;
s1 = randn(size(t))*0.5; % Create Original Signal
ov = 10*(t>2 & t < 5) + 5*(t>=5 & t < 7) + 10*(t>=7);
s2 = s1 + ov; % Create Signal With Step Discontinuities
figure
plot(t, s2)
grid
TF = ischange(s2, 'mean', 'Threshold',5); % Find Abrupt Changes
iscidx = find(TF); % Numeric Indices
iscidxa = [1 iscidx numel(t)]; % Augment 'iscidx'
s2r = zeros(size(t)); % Recovered Original Signal
for k = 1:numel(iscidxa)-1
idxrng = iscidxa(k) : iscidxa(k+1);
s2r(idxrng) = s2(idxrng) - mean(s2(idxrng)); % Detrend Step discontinuities
end
% s2r = filloutliers(s2r,'linear'); % Remove Any Remaining 'Spikes' (If Necessary)
figure
plot(t, s2r)
hold on
plot(t, s1, '--')
hold off
grid
legend('Detrended Signal','Original Signal', 'Location','best')
See the documentation for ischange for details on it.
It will be necessary for you to test it with your signal.
.
  댓글 수: 2
Tyann Hardyn
Tyann Hardyn 2022년 4월 13일
편집: Tyann Hardyn 2022년 4월 13일
I actually already found the ischange function, but when i put my data into the varargin, it show error. After that, i realize that my data contain with NaN, so i use isnan and it already worked. And i try also with this function :
[ipoint,~] = findchangepts(input,...
'MaxNumChanges',maxnum);
Anyways, Thats great Sir, i ll try your approach, thank you so much, Sir....
Star Strider
Star Strider 2022년 4월 13일
As always, my pleasure!
The NaN values are considered by MATLAB to be ‘missing’, so remove them with rmmissing (that removes all the values that correspond to any missing value) or fillmissing to interpolate the missing values.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Walter Roberson
Walter Roberson 2022년 4월 13일
Perhaps do a movmean() and subtract that from the signal ?
Though possibly you might not be happy with the results at the jump boundaries.

카테고리

Help CenterFile Exchange에서 Descriptive Statistics에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by