I have a noisy sparse signal containing number of frequency components. Is there any method to uniformly denoise this signal. in other words, a method that estimated and eliminates the noise power across all the frequencies in the band and not only on the borders like in wavelet denoising?

The following plot is an example of what I was saying. I have 3 peaks and want to cancel the noise below these peaks.

example of one of my signals

  • $\begingroup$ Hi! Wiener filters perform brodband noise reduction too. Have you tried? Do you need linear techniques or polynomial (nonlinear) methdos also allowed? Have you tried any methods? Do you have a sample set to plot here ? $\endgroup$ – Fat32 Jan 17 '19 at 22:17
  • $\begingroup$ @Fat32 I added a plot explaining what I was saying. No matter what the technique is as long as it achieves my objectives. Could you provide me with some useful methods? $\endgroup$ – Mohamad Jan 18 '19 at 9:13

This sounds like a great opportunity to attempt to use singular spectrum analysis (SSA):

It appears you have some observed signal, $Y[n]$, which is some sort of mixture, and we take $Y[n]$ and create a Hankel matrix from it using some desired frame length M (this will effectively determine your sub-space resolution...more on that later).

Now that we have our Hankel matrix, we can either compute $R_Y$ directly and then do an eigendecomposition, or we could go with a Singular Value Decomposition of the trajectory matrix. You'll find them to essentially be equivalent if we use the left singular vectors; either method is perfectly valid.

So once we get our matrix of eigenvalues, $U$, we need to project them via a linear transform to get principal components, $P$:

$P = Y^H U$.

Now that we're here, we can use the singular values to determine amplitude of the signals themselves, and the principal components essentially determine the "parts" of the signal, i.e. $X[n]$ and $\epsilon[n]$.

Let's say we have N principal components, and we know that we only "need" the first one: from our principal components, we perform what is typically called Eigentriple grouping via the following multiplication:

$C = UP^H$ (where H denotes the Hermitian operator)

This new matrix, C, is what we call the reconstructive component(s) of $Y$. We're not quite done yet, because $C$ is the same dimension as our Hankel matrix, $Y$, so do get back to our signal, we'll need an additional step. To reconstruct the series itself, we'll perform what's called diagonal averaging. The goal here is that we'll finally map back to a single signal, let's call it $Y_out[n]$. It's in this step that we'll be able to utilize that one-to-one relationship of the Hankel to the series to extract out signals. This step is a bit long winded, so I've omitted it for brevity, but you can consult Wikipedia or any of the many papers/texts on SSA for more information.

So that's SSA in a nut-shell, and naturally there is a lot you can do with the method. So long as you have some appreciable signal to noise ratio (SNR) in the frequency domain, I think you'll find SSA works quite well for extracting out frequency-separable signals. The big issue is obviously going to be determining which principal components you care about.

The key to discerning you signals is that if you can assume they're all separable in frequency and have some non-negative SNR value in the frequency domain, SSA will provide a decomposition of these signals, and the power of the individual signals is stored in the eigen/singular values you computed earlier on in the method (you'll have M of these). Simply by inspecting the eignespectrumn, you can typically discern actual signals from noise; noise signals will typically be low power and spread across several principal components/eigenvalues, whereas signals will be contained typically by 1 or very few of the principal components/eigenvalues

So, in short, if you have some time series observation, you can use SSA to attempt to discern individual signals/trends. It's a really powerful tool, and as long as the signals are separable, you should have some reasonable success.

Now if you have several observations of the same data (let's say you had several sensors observing the same singals), you could attempt to use some classic blind source separation techniques, such as principal components analysis (PCA), independent components analysis (ICA), etc. Your question didn't seem to indicate such, but if that's the case let me know and I can include some details on those methods as well. Hope that helps!

| improve this answer | |
  • $\begingroup$ So you are telling me to use this method I should exactly know the value of the noise power so I can separate the eigenvalues of the signal subspace from those from the noise subspace. Is that accurate? $\endgroup$ – Mohamad Jan 23 '19 at 20:55
  • $\begingroup$ You wouldn’t need to know the noise power exactly. you’ve shown the sinusoids in your signal as having done appreciable SNR, so it shouldn’t be too hard to separate these signals based on their eigenvalues; in the eigenspectrum, the coherent signals will have very strong eigenvalues, whereas the noise will have very low power and be spread across several eigenvalues. $\endgroup$ – matthewjpollard Jan 24 '19 at 0:10
  • $\begingroup$ So the greater frame length M I choose gives me better separation between the signal and noise subspace since the noise power will spread across all eigenvalues. My last concern is how to choose the M samples from the observed signal Y[n]? $\endgroup$ – Mohamad Jan 24 '19 at 8:28
  • $\begingroup$ Yes. As for the choice of M, choose it to be larger than the number of signals you expect to have. I’ve found generally that M=10 is a useful number to start with. $\endgroup$ – matthewjpollard Jan 24 '19 at 11:16
  • $\begingroup$ I will choose M as the maximum number of expected signal. my question was how to sample the observed signal to get M-frame from it? $\endgroup$ – Mohamad Jan 24 '19 at 21:17

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.