# SVD Based Noise Filter on the Samples in Toeplitz Form

Given a sequence of length $$2N$$ $$x[1], x[2], \dots, x[N], \dots x[2N]$$ We can construct the following matrix along with its SVD. $$M = \begin{pmatrix} x[1] & x[2] & \cdots & x[N] \\ x[2] & x[3] & \cdots & x[N+1] \\ \vdots & \vdots & \ddots & \vdots \\ x[N+1] & x[N+2] & \cdots & x[2N] \end{pmatrix} = U S V^T$$ Small singular values can be removed and matrix recomputed. Input signal can be replaced with e.g. 1st and last cols of $$M$$.

Unfortunately, I do not know the name and motivation behind this procedure. Where can I find a reference with a detailed description of such a filter? What is matrix $$M$$ called?

Example:

Test code in Mathematica:

(* define test signal and noise *)
length = 2^10 ;
amplitude = 1.0 ;
signal = amplitude*Sin[2*Pi*0.2741*Range[2*length]] ;
SeedRandom[1] ;
level = 0.1 ;
noise = RandomVariate[NormalDistribution[0.0,level*amplitude],2*length] ;
input = signal + noise ;
(* filter *)
matrix = Most[Partition[input, length, 1]];
{u,s,v} =SingularValueDecomposition[matrix,Tolerance -> 10^-15 ] ;
keep = 2 ;
s = Take[s,keep,keep] ;
u = Take[u,All,keep] ;
v= Take[v,All, keep] ;
matrix = u.s.Transpose[v] ;
result = {First[matrix],Rest[Last[matrix]]} //Flatten;
(* compare *)
Grid[{
{
ListPlot[signal,ImageSize ->300],
ListPlot[input,ImageSize ->300],
ListPlot[result,ImageSize ->300]
},
{
Periodogram[signal,Automatic,Automatic,KaiserWindow[#,Pi/2]&,PlotRange -> All, ImageSize ->300],
Periodogram[input,Automatic,Automatic,KaiserWindow[#,Pi/2]&,PlotRange -> All, ImageSize ->300],
Periodogram[result,Automatic,Automatic,KaiserWindow[#,Pi/2]&,PlotRange -> All, ImageSize ->300]
}
}]
• What do you expect? The ideas are similar to MVDR and other Noise Sub Space methods. They work well for harmonic signals. Less for general signals. – Royi Sep 20 '20 at 8:05
• @Royi, thanks, I'm just new to dsp, I'll google mvdr then. – I.M. Sep 20 '20 at 9:33