Remove strong Noise in signal

15 vues (au cours des 30 derniers jours)
Thiago Petersen
Thiago Petersen le 19 Avr 2019
Commenté : Thiago Petersen le 22 Avr 2019
Hello,
I am thinking if is possible to remove a very strong noise in a signal that i recorded. The idea is to remove the noise from the files and only plot the signal (like in the first five spikes). Is it possible to locate only the major spikes and so remove it? Other problem is that sometimes the minor spikes happens in the same times than major spikes (this happens in the 6th spike). Follow the data attached. I will appreciate any help. Thanks!
noisy.jpg
  2 commentaires
KALYAN ACHARJYA
KALYAN ACHARJYA le 20 Avr 2019
Do you want to remove larger spike (amplitude) or clip its aplitude in certain range?
Thiago Petersen
Thiago Petersen le 20 Avr 2019
The idea is to remove all the spikes that have larger amplitude than the first 5 spikes (the minor ones)

Connectez-vous pour commenter.

Réponses (1)

Image Analyst
Image Analyst le 20 Avr 2019
Try this:
% Get threshold based on first 5 points. It should be bigger than the tallest of those, say by 10% or whatever
threshold = max(signal(1:5)) * 1.10;
% Get "good" indexes - those with signal values less than the threshold.
goodIndexes = signal < threshold;
filteredSignal = signal(goodIndexes);
  1 commentaire
Thiago Petersen
Thiago Petersen le 22 Avr 2019
Hi! Thanks for the reply, but it solves partially my problem. The problem in your solution is that the signal (minor spikes) and the noise (major spikes) will be affected. I only want to the bigger spikes be removed, not the smaller ones.
I was thinking to make a new vector with the noise inverted and add it in the same time that the noise occurs (using the indexes) to remove it. The noise has a fixed waveform, so maybe I could use the ginput to collect the noise data (like the .jpg attached), insert it to a vector and sum to the signal data. I tried to do it, but I got stuck after I got the noise shape.
You think this could work?
I will appreciate your reply.
mga = 2.5;
dist1 = 10000;
fs = 48828.125; % sample rate
time =[1/fs:1/fs:length(signal)/fs];
plot(time,signal)
hold on
lim1 = max(signal(1:dist1))*mga;
[t2,peakind]= findpeaks(signal,fs,'MinPeakProminence',lim1)
plot(peakind,t2,'or')
% to get the indexes of the noise
[peakValues, indexes] = findpeaks(signal,'MinPeakProminence',lim1)
% this is to get the noise shape
pause % so you can zoom to find a clear noise (bigger spike)
ind2 = ginput(2) % select start and end of the noise spike
ind21 = find(time<ind2(1));
ind21 = ind21(end);
ind22 = find(time<ind2(2));
ind22 = ind22(end);
s2 = signal(ind21:ind22);
ts2 = [1/fs:1/fs:length(s2)/fs];
is2 = s2*-1; %invert the noise shape

Connectez-vous pour commenter.

Catégories

En savoir plus sur AI for Signals dans Help Center et File Exchange

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by