I have a loop which reads out a sensor, once in a while the data is completely off, and gives a spike. I would like to remove those spikes. The data given moves from -180 to 180 degrees, so when my measurement moves from -180 to 180 this should not be filtered (as this is normal). However, if it moves from -180 to 90 then this counts as a spike. It's not possible to do data processing after getting every readout, ideally there should be a filter of some sort in the loop itself.
Kshitij Singh answered .
2025-11-20
medianSignal = medfilt1(signal, 7); diffSignal = abs(signal - medianSignal); spikes = diffSignal > 100; % Whatever... % Replace fixedSignal = signal; % Initialize fixedSignal(spikes) = medianSignal(spikes);