File:Savitzky-golay pic gaussien bruite norme l1.svg

Original file(SVG file, nominally 486 × 442 pixels, file size: 160 KB)

Captions

Captions

Add a one-line explanation of what this file represents

Summary edit

Description
Français : Lissage d'un pic gaussien bruité, avec une verison modifiée de l'algorithme de Savitzky-Golay : le polynôme de degré 3 est ajusté par régression en utilisant la norme ℓ1 (somme des valeurs absolues des résidus) au lieu des moindres carrés.

Cette méthode est réputée moins sensible aux points aberrants.

Créé avec Scilab, modiufié avec Inkscape.
English: Smoothing of a noisy gaussian peak using a modified version of the Savitzky-Golay algorithm: the 3rd degree polynomial is determined by regression using the ℓ1 norm (sum of the absolute values of the residuals) instead of the least squares.

This method is supposed to be less sensitive to outliers.

Created with Scialb, modified with Inkscape.
Date
Source Own work. ame data as File:Savitzky-golay pic gaussien bruite.svg
Author Cdang

Scilab source

For the generation of the data, see File:Savitzky-golay pic gaussien bruite.svg.

For the use of the ℓ1 norm, we use the standard non-linear least square regression dunction, leastsq(), but the residual is defined as the square root of the difference.

// **********
// Constantes et initialisation
// **********

clear;
clf;
chdir('C:\Documents and Settings\christophe.dang\My Documents\documentation\algo\regression\')

// paramètres du lissage :
largeur = 9; // largeur de la fenêtre glissante (nb de pts)

// **********
// Fonctions
// **********

// polynôme de degré 3

function [y]=poldegtrois(A, x)
    // méthode de Horner
    y = ((A(1).*x + A(2)).*x + A(3)).*x + A(4);
endfunction

// régression avec le polynôme de degré 3

function [R] = residual(A, X, Y)
    // calcul du résidus selon la norme l1
    // sqrt : pour pouvoir utiliser leastsq(), car
    // (sqrt())^2 = abs()
    R = sqrt(abs(Y - poldegtrois(A, X)))
endfunction

function [Aopt]=regression(Ainit, X, Y)
    // X et Y : vecteurs colonne de 9 valeurs ;
    // détermine le polynôme de degré 3
    // a*x^2 + b*x^2 + c*x + d
    // par régression sur (X, Y)
    [S, Aopt] = leastsq(list(residual, X, Y), Ainit);
endfunction

// lissage, détermination de la dérivée et de la dérivée seconde

function [y, yprime, yseconde] = savitzkygolay(X, Y, larg)
    // X, Y : nuage de points
    // larg : largeur de fenêtre
    Ainit = [0, 0, 0, 0];
    n = size(X,'*');
    decalage = floor(larg/2);
    y=Y;
    yprime=zeros(Y);
    yseconde=yprime;
    for i=(decalage+1):(n-decalage)
        intervX = X((i-decalage):(i+decalage),1);
        intervY = Y((i-decalage):(i+decalage),1);
        Aopt = regression(Ainit, intervX, intervY);
        x = X(i);
        y(i) = poldegtrois(Aopt,x);
//        Yfoo=poldegtrois(Aopt,intervX);
//        subplot(3,1,1);plot(intervX, Yfoo, 'r')
        yprime(i) = (3*Aopt(1)*x + 2*Aopt(2))*x + Aopt(3); // Horner
        yseconde(i) = 6*Aopt(1)*x + 2*Aopt(2);
    end
endfunction

// **********
// Programme principal
// **********

// lecture des données

donnees = read('pic_gaussien_bruite.txt', -1, 2)
Xinit = donnees(:,1);
Yinit = donnees(:,2);

//subplot(3,1,1)
//plot(Xdef, Ydef, "b")

// Traitement des données

[Yliss, Yprime, Yseconde] = savitzkygolay(Xinit, Yinit, largeur);

// affichage

decal = floor(largeur/2);
nbpts=size(Xinit,'*');
X1=Xinit((decal+1):(nbpts-decal));
X2=Xinit((2*decal+1):(nbpts-2*decal));
Y1=Yprime((decal+1):(nbpts-decal));
Y2=Yseconde((2*decal+1):(nbpts-2*decal));

subplot(3,1,1)
plot(Xinit, Yinit, "b")
plot(Xinit, Yliss, "r")

subplot(3,1,2)
plot(X1, Y1, "b")

subplot(3,1,3)
plot(X2, Y2, "b")

Licensing edit

I, the copyright holder of this work, hereby publish it under the following license:
w:en:Creative Commons
attribution share alike
This file is licensed under the Creative Commons Attribution-Share Alike 3.0 Unported license.
You are free:
  • to share – to copy, distribute and transmit the work
  • to remix – to adapt the work
Under the following conditions:
  • attribution – You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.
  • share alike – If you remix, transform, or build upon the material, you must distribute your contributions under the same or compatible license as the original.

File history

Click on a date/time to view the file as it appeared at that time.

Date/TimeThumbnailDimensionsUserComment
current14:00, 7 March 2013Thumbnail for version as of 14:00, 7 March 2013486 × 442 (160 KB)Cdang (talk | contribs)User created page with UploadWizard

There are no pages that use this file.

Metadata