Denoising a signal using the heat equation

ff[x_]  :=  -(x (2 π  - x)/10)^5 (x  + 
            1.5) (x  + 2.5) (x  -  4)/5

fa[x_]  :=  ff[x  +  π] + 2

f[x_]  :=  fa[x]  +  1.1 (Random[]  -   .5)

ϵ  =   .01; xs  =  Range[-π, π, ϵ]; 
    fs  =  f  /@  xs;
fxs  =  {xs, fs} // Transpose;

Plot signal and noisy version

pa  =  
      Plot[fa[x], {x, -π, π}, PlotStyle  ->  Hue[0], 
        Axes ->  False,  PlotRange  -> {0, 7.5}]

pl  =  
      ListPlot[fxs, PlotStyle  ->  Hue[ .6], Axes ->  False,  
        PlotRange  -> {0, 7.5}, 
        PlotJoined  ->  True]

Show[pl, pa]

Denoise using Fourier series

a[n_]  :=  (ϵ/π) 
        fs  .   (Cos[n  #] & /@  xs)
b[n_]  :=  (ϵ/π) 
          fs  .  (Sin[n  #] & /@  xs);

nx  =  Range[100];

as  =   a  /@  nx;
bs  =   b  /@  nx;

ah[n_]  :=  E^(-n^2 t) Cos[n  x]; 
    bh[n_]  :=  E^(-n^2 t) Sin[n  x];

ag  =  ah /@  nx;
bg  =  bh  /@  nx;

f[x_, t_]   =  
        a[0]/2  + ag . as  +   bg  .  bs;

ListPlot[fxs, PlotStyle  ->  Hue[ .6], Axes ->  False,  
        PlotRange  -> {0, 7.5}, 
        PlotJoined  ->  
          True] ;δ  =   .0005 ;Plot[
            f[x, #], {x, -π, π}, PlotStyle  ->  Hue[ .6], 
            Axes ->  False,  
            PlotRange  -> {0, 7.5}] &  /@  (δ  Range[
              50]) ;