Hi, I am very new to the subject. I spent hours online on trying to find how to use autocorrelation and fft in matlab, in order to separate a signal from noise. I have this so far: t = 0:.01:1; % independent (time) variable A = 8; % amplitude Fs = 101; % Sampling frequency frequency1 = 2; frequency2 = 12; sineFunction1 = A*sin(2*pi*frequency1*t); sineFunction2 = A*sin(2*pi*frequency2*t); sineFunctionCombined = sineFunction1 + sineFunction2; %Gaussian noise randn('state',0); %Initialize RAND to a different state each time. randn('state',sum(100*clock)); noise = 3*randn(size(t)); % 3 here affects how strong will the noise will disturb the sine wave sinePlusNoise = sineFunction1+noise; %plot the summed sine waves in the top panel subplot(2,1,1) plot(t, sinePlusNoise) title('35Hz noisy Sine wave') ylabel('Amplitude') xlabel('Time (s)') subplot(2,1,2) %Fs=1000; %t=0:1/Fs:1; c = xcorr(sinePlusNoise); plot(c) Well, now I would need to use fft to extract the sine wave from it, but how? _____________________________________ Do you know a company who employs DSP engineers? Is it already listed at http://dsprelated.com/employers.php ?

# Separating noise from a signal in Matlab

Started by ●May 3, 2007

Reply by ●May 3, 20072007-05-03

On 4 May, 01:06, "Paulina7m" <paulin...@yahoo.ca> wrote:> Hi, > I am very new to the subject. I spent hours online on trying to > find how to use autocorrelation and fft in matlab, in order to separate > a signal from noise. > I have this so far: > > t = 0:.01:1; % independent (time) variable > A = 8; % amplitude > Fs = 101; % Sampling frequency > > frequency1 = 2; > frequency2 = 12; > sineFunction1 = A*sin(2*pi*frequency1*t); > sineFunction2 = A*sin(2*pi*frequency2*t); > > sineFunctionCombined = sineFunction1 + sineFunction2; > > %Gaussian noise > randn('state',0); > %Initialize RAND to a different state each time. > randn('state',sum(100*clock)); > noise = 3*randn(size(t)); % 3 here affects how strong will the noise > will disturb the sine wave > > sinePlusNoise = sineFunction1+noise; > > %plot the summed sine waves in the top panel > subplot(2,1,1) > plot(t, sinePlusNoise) > title('35Hz noisy Sine wave') > ylabel('Amplitude') > xlabel('Time (s)') > > subplot(2,1,2) > %Fs=1000; > %t=0:1/Fs:1; > c = xcorr(sinePlusNoise); > plot(c) > > Well, now I would need to use fft to extract the sine wave from it, but > how?I am a bit confused about what you try to do. From the heading of your post, it seems that you want a filter. In that case, you need to design a filter which then can be implemented by using the FFT. If this is what you want to do, the correlation function is not needed. On the other hand, computing the FFT of the correlation function can be useful if you want to check if there is a sinusoidal embedded in a given signal. Could you explain in a little mor edetail exactly what you want to do? Rune

Reply by ●May 3, 20072007-05-03

Well, all I did is added the noise to a sine wave. Now I would like to extract the sine wave from a noisy signal, as if I wouldn't know that it's a sine wave. I am trying to do two things here: 1. Learn how to extract useful features of a signal using autocorrelation. 2. Learn how to smooth the signal as much as possible, using Matlab. Thank you in advance. _____________________________________ Do you know a company who employs DSP engineers? Is it already listed at http://dsprelated.com/employers.php ?

Reply by ●May 3, 20072007-05-03

On May 3, 7:02 pm, "Paulina7m" <paulin...@yahoo.ca> wrote:> Well, all I did is added the noise to a sine wave. > Now I would like to extract the sine wave from a noisy signal, as if I > wouldn't know that it's a sine wave. > I am trying to do two things here: > 1. Learn how to extract useful features of a signal using > autocorrelation. > 2. Learn how to smooth the signal as much as possible, using Matlab. > > Thank you in advance.If you know in advance that your signal consists of 2 sine waves, you can try to estimate the parameters of the signal components (i.e. the frequency, amplitude, phase). Try to search for "frequency estimation", "ESPRIT", "MUSIC", line spectral estimation. One possible method for frequency estimation is to compute its spectra: compute the autocorrelation, then the magnitude of the fourier transform of it. Then find the peaks, and voila, you get a frequency estimate or two. Hope that helps, Julius

Reply by ●May 4, 20072007-05-04

Thank you very much for your answers. Julius, you have been especially helpful. In the end, I found a wavelet Toolbox for Matlab, which has a lot of nice denoising functions. Is there anything I should know about their limitations? _____________________________________ Do you know a company who employs DSP engineers? Is it already listed at http://dsprelated.com/employers.php ?

Reply by ●May 4, 20072007-05-04

On May 3, 11:58 pm, "Paulina7m" <paulin...@yahoo.ca> wrote:> Thank you very much for your answers. Julius, you have been especially > helpful. In the end, I found a wavelet Toolbox for Matlab, which has a lot > of nice denoising functions. > Is there anything I should know about their limitations? > > _____________________________________ > Do you know a company who employs DSP engineers? > Is it already listed athttp://dsprelated.com/employers.php?Why do you want to use wavelets if you know in advance that the signal that you are interested in has a parameteric form? Glad to be of help. Julius

Reply by ●May 4, 20072007-05-04

I was only learning the concepts, using sine waves. The actual signals I have do denoise are EEG. _____________________________________ Do you know a company who employs DSP engineers? Is it already listed at http://dsprelated.com/employers.php ?

Reply by ●May 6, 20072007-05-06

On May 5, 12:32 am, "Paulina7m" <paulin...@yahoo.ca> wrote:> I was only learning the concepts, using sine waves. > The actual signals I have do denoise are EEG. >I guess you want to de-noise your signal using fast wavelet transforms, and get approximation signal. Did you look at Matlab Wavelet toobox help? there are lot.Try with default threshold levels. It works well for signals like your one, if the noise is gaussian and zero mean. I use matlab version 7_2006B3. Old releases may not have these help pages. -bsj