Vous êtes sur la page 1sur 29

PROJETTSI:PARTIESIGNAL

REHAUSSEMENTDELAPAROLEPARLAMETHODEDITEEN
SOUSESPACES

BENJAMINGHIS
MATTHIEUCHARPENTIER

T2TELECOM,S3,JANVIER2008,ENSEIRB

Professeur:EricGRIVEL

ghis@enseirb.fr | charpenm@enseirb.fr

Sommaire
I.IntroducLon ..................................................................................................................... 4
II.GnraLondunsignalbruitavecunSNRdonn ........................................................... 4
III.Traitementtramepartrame ........................................................................................... 6
III.1.Principe ............................................................................................................ 6
III.2.GesLondudcoupageentramessousMatlab ................................................. 7
III.3.ReconstrucLon ................................................................................................. 8
IV.Rehaussementdelaparoleparlamthodediteensousespaces .................................. 9
IV.1.Principe............................................................................................................ 9
IV.2.Miseuvredelamthode ............................................................................ 10
V.Inuencedelalongueurdestrames.............................................................................. 13
VI.OrgnaLsaLondeschiersMatlab ................................................................................. 14
VII.Conclusion................................................................................................................... 14
VIII.Bibliographie .............................................................................................................. 15
IX.Annexes........................................................................................................................ 16
IX.1.FoncLonadd_noise.m .............................................................................. 16
IX.2.FoncLondebruitage_trames .......................................................................... 16
IX.3.projet_signal_part1.m .............................................................................. 17
IX.4.projet_signal_part2.m .............................................................................. 19
IX.5.projet_signal_part3.m .............................................................................. 22
IX.6.projet_signal_part4.m .............................................................................. 25

Traitementdusignal
ENSEIRBJanvier2008

Page2/29

MaDhieuCHARPENTIER
BenjaminGHIS

Tabledesgures
Figure1:Dbruitagedusignaldeparole............................................................................................................... 4
Figure2:ReprsentaLontemporelleetdensitspectraledunetramenonvoise ......................................... 4
Figure3:ReprsentaLontemporelleetdensitspectraledunevoise............................................................ 5
Figure4:ReprsentaLondusignaloriginaletdesonspectrograme.................................................................. 6
Figure5:ReprsentaLondusignalbruit(SNR=10)etdesonspectrograme ................................................... 6
Figure6:SchmaLsaLonduprincipededcoupageentrames.......................................................................... 6
Figure7:SchmadelapremiretapedelagesLondestrames....................................................................... 8
Figure8:SchmadelasecondetapedelagesLondestrames ....................................................................... 8
Figure9:SchmadelatroisimetapedelagesLondestrames ...................................................................... 8
Figure10:ReprsentaLontemporelledusignaletdusignalreconstruit........................................................... 9
Figure11:TableaurecapitulaLfdutauxderehaussementendB..................................................................... 12
Figure12:Rsultatobtenupourlerehaussementdusignaldeparole(SNR=5dB) ......................................... 12
Figure13:Rsultatobtenupourlerehaussementdusignaldeparole(SNR=10dB) ........................................ 12
Figure14:Rsultatobtenupourlerehaussementdusignaldeparole(SNR=15dB) ........................................ 13
Figure15:ReprsentaLondelinuencedestramessurletauxderehaussement........................................ 13

Traitementdusignal
ENSEIRBJanvier2008

Page3/29

MaDhieuCHARPENTIER
BenjaminGHIS

I. IntroducLon
lheure o les communicaLons sont couramment uLlises, il peut toujours tre intressant
damliorerlaqualitdusignaltransmis.Eneet,nombreusessontlesapplicaLons,danslesquelles,sans
traitement supplmentaire du signal, celuici serait inuLlisable. Ainsi dans un milieu ambiant trs sonore
comme le cockpit dun avion ou dune formule 1, le signal que le micro du pilote envoie ne sera pas de
bonnequalitsansundbruitagedeceluici.
LobjecLfdeceprojetestlerehaussementdunsignaldeparolefondsurdestechniquesditesen
sousespaces.Partantdelhypothsequelesignaletlebruitsontdcorrls,lideestdedissocierlespace
engendrparlesobservaLonsbruitesendeuxsousespaces,lunrelaLfausignal,lautreserapportantau
bruitblancaddiLf.
A laide du logiciel Matlab, nous allons dans un premier temps ajouter un bruit blanc gaussien
notresignalinitial.Puis,nousallonssparlesignalentramesquiserontdabordfentresavantdtre
traites sparment par la mthode dite en sousespaces. Enn, les trames seront regroupes pour
reconstruirelesignal.DansladernireparLe,nouscommenteronslesrsultatsdurehaussementdusignal
deparoleetlaperLnencedelamthode.

Figure1:Dbruitagedusignaldeparole

II. GnraLondunsignalbruitavecunSNRdonn
Pour commencer, nous allons extraire deux trames de32 ms maximum de notre signal, une dite
voiseetuneautreditenonvoise.Nousavonsreprsenttemporellementcesdeuxtypesdetramesainsi
queleurdensitspectraledepuissancesurlagure2et3.

Figure2:Reprsentationtemporelleetdensitspectraledunetramenonvoise

On voit de faon claire sur la gure 2, plus prcisment sur la densit spectrale de puissance, le
caractre alatoire de la trame non voise. En eet, le spectre de puissance est dense, toutes les
frquences y sont plus ou moins reprsentes. A contrario de la gure 3, ou lon voit le caractre
priodiqueoupseudopriodiquedelatramevoise.Ilyadeuxraiessurladensitspectraledepuissance.

Traitementdusignal
ENSEIRBJanvier2008

Page4/29

MaDhieuCHARPENTIER
BenjaminGHIS


Figure3:ReprsentaMontemporelleetdensitspectraledunevoise

Nous allons maintenant passer au bruitage du signal en ajoutant simplement notre signal de
parole un bruit blanc gaussien addiLf de moyenne nulle et de variance ! 2 . Il faut cependant que nous
fassionscelaenuLlisantunrapportsignalbruit(SNR)donntelque:
SNR = 10 ! log10 (

Psignal
Pbruit

(1)

o Psignal et Pbruit reprsententrespecLvementlapuissancedusignaletdubruit.


Pourcela,nousallonsparLrdunbruitblancgaussiencentrdemoyennenulleetdevariance1qui
sefaitsousMatlabvia:
%#bruit _ initial = randn(1, N ) avecNlenombredchanLllonsdenotresignal
$
2
&% Pbruit = ! " Pbruit _ initial

(2)

Lexpression de ! va nous permeDre dobtenir une puissance de bruit constante quelque soit la
ralisaLonderandndenotrebruitiniLal.DelquaLon(1),onLre Pbruit :
Pbruit =

Psignal
10

SNR
10

(3)

EncouplantlesquaLons(2)et(3),ilvient:
! 2 " Pbruit _ initial =

Psignal
10

SNR
10

Psignal

#! =

Pbruit _ initial "10

SNR
10

(4)

Nous pouvons donc ainsi gnrer notre bruit blanc gaussien centr de moyenne nulle et de
variance ! 2 (quaLon (5)) tel que sa puissance restera constance quelque soit la ralisaLon de randn.
NousobLendronsdelasortenotreSNRdonn:
bruit = ! " bruit _ initial

(5)

Il nous reste plus qu ajouter le bruit au signal. Ainsi, nous obtenons alors le signal bruit sur la
gure5.

CeDeopraLonestraliseparlafoncLonMatlabadd_noise.m.

Traitementdusignal
ENSEIRBJanvier2008

Page5/29

MaDhieuCHARPENTIER
BenjaminGHIS

Alaidedesspectrogrammesnousvoyonsmieuxquelesignal,horszonedesilence,estbruit.En
eet, lebruitestvisiblesurlesignaltemporelmaisnousvoyonsbien,surlespectrogramede lagure5,
quelesfrquencessontaDnuesparrapportcellesduspectrogramedelagure4.

Figure4:ReprsentaMondusignaloriginaletdesonspectrograme

Figure5:ReprsentaMondusignalbruit(SNR=10)etdesonspectrograme

Il nexiste pas de ltres pour dbruiter de faon certaine le signal. Nanmoins une mthode
consisterait ajouter une innit de bruit blanc gaussien centr pour quils se compensent et ainsi
sannulent.Nousallonsmaintenantpasseraudcoupagedusignalentrames.

III. Traitementtramepartrame
III.1. Principe
Un signal de parole tant non staLonnaire, on eectue un traitement trame par trame sur des
dures de 20 40 ms sur lesquelles on considre que le signal est quasistaLonnaire. Le caractre quasi
staLonnaire est ncessaire pour que lesprance du signal ne dpende pas du temps. Pour ce faire, nous
avonsfentrlesignalparunefentredeHamming.OnuLlisedeplusunrecouvrementdestramesde50%
etce,danslebutdeectuerparlasuiteunebonnereconstrucLondusignal.

Figure6:SchmaMsaMonduprincipededcoupageentrames

Traitementdusignal
ENSEIRBJanvier2008

Page6/29

MaDhieuCHARPENTIER
BenjaminGHIS

Daprslagure6,nousdduisonslesformulesdefentrage(6):
Y (k) = X(k) ! h1 + X(k) ! h2
Z(k) =

Y (k)
h1 + h2

(6)
(7)

Lefentrageavecunrecouvrementde50%permetdeuxchoses:

Dunepart,nousavonsdeuxesLmaLonsdusignalfentrpourchaquechanLllon,cequipermet
dobtenirunemeilleureesLmaLonpondredusignaldeparole.

Dautrepart,lerecouvrement50%permetdeposiLonnerlemaximumdunefentredelatrame
2 sur la gure 6 (l o lesLmaLon est la meilleure) en parallle avec les extrmits des deux
tramesdepartetdautredelaprcdente(lolesLmaLonestlaplusmauvaise)andavoirune
rparLLonquitabledelensembledesesLmaLonsdusignal.

LuLlisaLondunefentredeHammingestprfrablecelleduneporte.Eneet,silatroncature
dusignal estralisedefaonnonrectangulaire maisenfentrant lesignal, lestransiLonsdans lesignal
seront alors plus douces. La porte a des disconLnuits fortes, ce qui entrane une fuite spectrale
importante,cestdirequonobserveunefuitedelapuissancesurleslignesfrquenLelles.Pluslafentre
choisie aura une grande dure temporelle, plus elle sera troite dans le domaine frquenLel. Ainsi, en
prenantunefentreinnimentlonguetemporellement,onabouLtlalimiteundiracenfrquence,qui
est l'lment neutre du produit de convoluLon. Avec une fentre comme celle de Hamming, la fuite
spectraleestnanmoinstrsamoindrie.

III.2. GesWondudcoupageentramessousMatlab
La longueur dune trame nest pas anodine. Il faut, comme cela a dj t indiqu quelle
corresponde une dure de parole de 20 40ms. Mais pour utiliser pleinement les performances de la
Transforme de Fourier Rapide, il faut quelle soit une puissance de 2. Avec une frquence
dchanLllonnagede8kHz,256 chanLllonscorrespondent32ms,ceDetailleconvientdonc.(pourplus
dedtailsvoirlaparLeIV:simulaLon)
Ilfautgalementsongerrajouterdeszroslandusignalpourobtenirunsignaldelongueur
mulLpledelatailledestrames.Ceciestimplmentparuneboucleifquicalculesilatailledusignalestun
mulLpledunombredetramesoupas.
LagesLondestramessepasseen3tapes:
1) On commence par dcouper le signal en trames de longueur donne que lon met dans une
matrice (matrix_trames_sans_recouvrement). Puis on mulLplie toutes les colonnes de ceDe
matrice par notre vecteur de Hamming an dobtenir une nouvelle matrice
(matrix_trames_sans_recouvrement_hamming).Anoterquelestramessontstockesdansles
colonnesdeceDematrice.
2) Ensuite,onreprendlesignaliniLalpuisonledcoupenouveauentramesmais,ceDefoisci,
en dcalant la premire trame dune demi trame pour ainsi obtenir une autre matrice
(matrix_trames_decalees).Puis,demmequepourlapremiretape,nousmulLplionstoutes
les trames ainsi obtenues par notre vecteur de Hamming et on obtient ainsi une nouvelle
matrice(matrix_trames_decalees_hamming).
3) CeDe 3me tape consiste simplement concatner les deux matrices gnres aux tapes
prcdentes
(matrix_trames_sans_recouvrement_hamming
et
matrix_trames_decalees_hamming) en alternant des trames sans recouvrement dans les
colonnesdindiceimpaireetdestramesdcalesdanslescolonnesdindicepair.

Traitementdusignal
ENSEIRBJanvier2008

Page7/29

MaDhieuCHARPENTIER
BenjaminGHIS


Figure7:SchmadelapremiretapedelagesMondestrames

Figure8:SchmadelasecondetapedelagesMondestrames

Figure9:SchmadelatroisimetapedelagesMondestrames

III.3. ReconstrucWon
PourlareconstrucLondusignal,oncommenceparfairelesopraLonsinversesdcritescidessus.
On se retrouve donc comme indiqu par la gure 6. On concatne la suite toutes les trames des deux
matrices gnres aux tapes 1 et 2 (i.e. matrix_trames_sans_recouvrement_hamming et
matrix_trames_decalees_hamming) an dobtenir nouveaux nos deux vecteurs ligne avec nos trames
sansrecouvrementsetnostramesdcales.Anoterquilfautbienrajouterdeszrosdepartetdautrede
vecteur lignequiconLennentlestramesdcalesanque latailledesdeuxvecteurslignessoitla mme
(cf.gure6).
On fait de mme avec nos deux matrices contenant les coecients de Hamming en colonne an
dobtenirnalement4vecteurslignes.PuisaveclaformulededefntragedelquaMon(7),nouspouvons
facilement reconsLtuer le signal en addiLonant nos deux premiers vecteurs contenant les trames puis
divisantparlasommedesdeuxvecteursaveclescoecientsdeHamming.
Traitementdusignal
ENSEIRBJanvier2008

Page8/29

MaDhieuCHARPENTIER
BenjaminGHIS

Nouspouvonsvoirsurlagure10quelareconstrucLonabienfoncLonn.Eneet,onnepeut
disLnguerlesignaloriginaldusignalreconstruitcequisigniequelamthodefoncLonne.
LegrosavantagedelamthodeparaddiLonrecouvrementreposedanslefaitquenousavonsune
meilleureesLmaLondusignal enchoississantunrecouvrementde50%.Enprenantdestramesquinese
recouvriraient pas, nous aurions des distorsions induites par le fentrage aux extrmits des trames. Si
nous prenions un recouvrement de 25%, il y aurait les 2 quarts centraux de chaque trame pour lesquels
nous naurions quune seule esLmaLon. Enn si nous avions pris un recouvrement de 75%, le nombre
desLmaLons dune observaLon de signal oscillerait entre 1 et 4, ce qui rendrait ingale lesLmaLon du
signal.

Figure10:ReprsentaMontemporelledusignaletdusignalreconstruit

Maintenantquenousavonsnotre mthodedaddiLonrecouvrementqui estopraLonnelle,nous


pouvonspasseraurehaussementdusignalproprementditparlamthodediteensousespaces.

IV. Rehaussementdelaparoleparlamthodediteensousespaces
IV.1. Principe
SoitNlenombredobservaLonsdusignalbruitdisponible.Lalgorithmeaucurduprojetopre
en3tapes:
1.OnconstruitlamatricedeHankel H x detailleLxMparLrdesdonnesbruites:
x(2)
L x(M ) %
" x(1)
$ x(2)
'
M
M
'
Hx = $
$ M
M
x(N ! 1) '
$
'
x(N ) &
# x(L) x(L + 1) L

(8)

UnematricedeHankelatoussescoecients,membresduneanLdiagonale,gaux.Deplus,lesN
observaLons du signal bruit sont stockes dans la premire colonne et la dernire ligne de la
matricede Hankel.Enoutre,L et Mvrient L + M = N + 1 etonprendraparlasuite L > M .
OneectueensuiteunedcomposiLonenvaleurssingulires.
2.OnesLmeausensdesmoindrescarrslamatricedeHankeldusignal,enneconservantquelesK
valeurssinguliresprdominantesdelamatricedeHankel H y desobservaLonsbruites.

Traitementdusignal
ENSEIRBJanvier2008

Page9/29

MaDhieuCHARPENTIER
BenjaminGHIS

LS
3.On endduituneesLmaLonde H signal ,ausensdesmoindrescarrs,note H signal
. Puis,pour

restaurerlastructurede lamatricede Hankeldedonnesdusignal, etobtenirune esLmaLondu


LS
signal,onaectechaquecoecientdesanLdiagonalesdelamatrice H signal
,lavaleurmoyenne
desanLdiagonales.OnobLentalorsuneesLmaLondusignalenslecLonnantlapremirecolonne
etladernirelignedeceDematrice.
Maintenant que nous avons dni les grands axes de la mthode, nous pouvons passer son
implmentaLon.

IV.2. Miseuvredelamthode
Pour bien comprendre le rehaussement de la parole par la mthode dite en sousespaces, nous
allons dabord rednir la matrice dautocorrlaLon, lesLmer laide dun esLmateur, expliquer le lien
entrelamatricedeHankeletlamatricedauocorrlaLonetennesLmerlamatricedeHankel.
Soitnotresignalbruitdnicidessous:
x(t) = s(t) + b(t)

(9)

O s(t) estlesignaloriginalet b(t) estnotrebruitblancgaussiencentrdevariance ! 2 .


Si nous avons N chanLllons de notre signal, alors on peut reprsenter X comme un vecteur tel
que:
! X(1) $
X = ## M &&
#" X(N ) &%

(10)

OnpeutainsiendduirelafoncLondautocorrlaLonquiscritcommesuit:
Rxx (!1) L Rxx (!N + 1) Rxx (!N ) %
" Rxx (0)
$ R (1)
Rxx (0)
Rxx (0) '
xx
$
'
'
M
O
M
RN = $
$
'
O
Rxx (!1) '
$ Rxx (N ! 1)
$# Rxx (N )
Rxx (N ! 1) L
Rxx (1)
Rxx (0) '&

(11)

Ensuite, nous allons esLmer la foncLon dautocorrlaLon laide dun esLmateur biais et la
foncLondautocorrlaLonesLmescrit:
1
R% N = (X ! X T )
N

(12)

OleTreprsenteloprateurtranspospuisquequontravaillesurdeschanWllonsvaleurs
rels.
DanslamthodeditededcomposiLonensousespaces,ilestpossibledesLmerlespacesignalet
lespace bruit en calculant la dcomposiLon en valeurs propres de la matrice R% N . En juxtoposant les K
vecteursproprescorrespondantauxKvaleurspropresprdominantesdeceDematrice,onobLentune
matrice W dedimensionsN xK engendrantlespacesignaletenjuxtaposantlesNKautres vecteurs,on
obLent une matrice W! (On met un symbole dorthogonalit car tous les vecteurs propres de ceDe
matrices sont orthogonaux aux vecteurs propres de la matrice W )de dimensions N x (NK) engendrant
lespacebruit.Ainsiona:
Traitementdusignal
ENSEIRBJanvier2008

Page10/29

MaDhieuCHARPENTIER
BenjaminGHIS

RN = [W | W! ]

(13)

Nous allons maintenant dtailler le rapport entre la matrice de Hankel et la matrice


dautocorrlaLon.
Si nous dveloppons le produit H x ! H x T , nous retombons sur la foncLon dautocorrlaLon
RL (CelleciestdetailleLxLetnondetailleNxN).Eneet,ona:

M
"
( x(k)2
$
x(2)
L x(M ) % " x(1) x(2)
L
x(L) % $ M k =1
" x(1)
$
$ x(2)
' $ x(2)
M
M
M
x(L + 1' $ ( x(k) ) x(k ! 1)
$
' $
' = k =1
$ M
M
x(N ! 1) ' $ M
M
M ' $
M
$
' $
' $
x(N ) & # x(M ) L x(N ! 1) x(N ) & $
# x(L) x(L + 1) L
$
$#

( x(k) ) x(k + 1)
k =1

%
'
'
'
M
'
'
'
O
'
M
2'
x(k)
(
'&
k =1
L

(14)

OnobserveranotammentlarelaLonaveclesLmateurbiaisdelamatricedautocorrlaLon:
1 M
$
! x(k)2
&
M
k =1
&
&1 M
& ! x(k) " x(k # 1)
R% L = & M k =1
&
M
&
&
&%

1
M

! x(k) " x(k + 1)


k =1

'
)
) $ R% xx (0) R% xx (1) L
'
) &
)
M
O
M )
) & R% xx (#1)
=
) & M
)
O
) &
O
)
%
L
Rxx (0) (
) %
M
1
! x(k)2 ))
M k =1
(
L

(15)

La valeur M au dessus des deux sommes qui est le nombre dchanWllons sur lesquels on va
approximerlafoncWondautocorrlaWonuninstantdonn.
LelienentrelamatricedeHankeletlamatricedautocorrlaLonrsidedanslefaitquelesvaleurs
propresdelamatricedautocorrlaLonsontlecarrdesvaleurssinguliresdelamatricedeHankel.
NouspassonsmaintenantladcomposiLonenvaleurssinguliresdelamatricedeHankel:
H x = U ! S !V T

(16)

O U est une matrice de dimension L x L, V est une matrice de dimension M x M et S est une
matricecontenantlesvaleurssinguliresdelamatricedeHankeletdedimensionLxM.

PouresLmerlespacesignal,ilsutdenegarderquelesvaleurssinguliresprdominantesde
notrematriceS.Leseuilpourlesvaleursprdominantesatx:
seuil =

!% 2
M

(17)

o !% reprsentelavariancesLmedubruitsurunezonedesilencedusignaloriginal
2

On va uLliser pour cela la foncLon spdiags sous Matlab pour ne garder que les valeurs
prdominantes de la matrice S correspondant seulement lespace signal de notre signal bruit et
aecttouslesautrescoecientsdelamatricepardeszros.OnnoteceDenouvellematrice SS .
OnreconstruitensuitenotrematricedeHankeleneectuantlopraLonsuivante:

Traitementdusignal
ENSEIRBJanvier2008

Page11/29

MaDhieuCHARPENTIER
BenjaminGHIS

H% S = U ! SS !V T

(18)

Ainsi la structure de la matrice de Hankel restaur en aectant chaque coecient des anL
diagonales de la matrice H% S la valeur moyenne des anLdiagonales. Pour cela, nous avons uLlis les
foncLonsiplrpuisdiag.OnobLentainsiuneesLmaLondusignalenslecLonnantlapremirecolonneet
ladernirelignedeceDematrice.
VoicicidessousletableaurcapitulaLfdurehaussementdenotresignaldeparolebruit:
SNRx

10

15

Tauxderehaussement(dB)

2.1613

3.1918

4.8050

Figure11:TableaurecapitulaMfdutauxderehaussementendB

Figure12:Rsultatobtenupourlerehaussementdusignaldeparole(SNR=5dB)

Figure13:Rsultatobtenupourlerehaussementdusignaldeparole(SNR=10dB)

Traitementdusignal
ENSEIRBJanvier2008

Page12/29

MaDhieuCHARPENTIER
BenjaminGHIS


Figure14:Rsultatobtenupourlerehaussementdusignaldeparole(SNR=15dB)

Lamthodelapluscaceseraitsansdoutededbruiterlesignaltramepartrameaveclestrames
voisesquiseraientplusfacilesdbruiterdufaitdeleurquasipriodicit.

V. Inuencedelalongueurdestrames
Maintenant que nous avons plus ou moins russi dbruiter notre signal, nous nous sommes
intresss linuence de la taille des trames sur le rehaussement. En eet, plus les trames sont peLtes
plus nous avons une forte probabilit dobtenir une quasistaLonnarit de nos trames mais nous
augmentonsenmmetempsdecalculpourledbruitageparlamthodediteensousespaces.

Figure15:ReprsentaMondelinuencedestramessurletauxderehaussement

LescourbesrougeetbleureprsenteletauxderehaussementpourunSNRiniLalde5et10dB.On
peut voir que le taux de rehaussement augmente de faon logarithmique (d au log des dcibels) si on
augmentelatailledestrames.Enrevanchepourlacourbenoir,reprsentantunSNRiniLal15dB,letaux

Traitementdusignal
ENSEIRBJanvier2008

Page13/29

MaDhieuCHARPENTIER
BenjaminGHIS

derehaussementaugmentejusqu'quelonaitunetramdenviron32ms,aprscela,lacourbemontreque
lerehaussementestmoinsbon
La courbe verte reprsente le gain moyen (pour le SNR = 5, 10 et 15 dB) pour une longueur de
trame donne. On peut notamment observ que la courbe tend asymptoLquement vers une valeur.
Nanmoins,onserendcomptequepourunetramede32msceDevaleurestquasimentaDeinteetde
plus32estunepuissancede2cequifacilitelecalculdelaFFT.
Ilauraitputreintressantdetesternotremthodederehaussementdelaparolepourbruitblanc
gaussiennoncentrmaisnousnavonspaseuletempsdelimplmenter.

VI. OrgnaLsaLondeschiersMatlab
IlyadeuxfoncLonsdansnotreprogrammaLonMatlab:

Add_noise.mquirajouteunbruitblancgaussiencentrsurunsignalavecunSNRdonn

debruitage_trames.m qui nous renvoie une matrice avec les trames dbruites dans les
colonnes

Ensuite,nousavons4chiers.mquicorrespondentaux4parLesduprojet:

projet_signal_part1.mestlecodepermeDantdebruiterlesignalavecunSNRconstant.

projet_signal_part2.m est le code permeDant de crer un matrice contenant les trames


fentresetlamthodeaddiLonrecouvrement.

projet_signal_part3.m est une applicaLon de la mthode de rehaussement dans lexemple


simpledunsinusbruitavecunbruitdontonconnatlavancelavariance.

projet_signal_part4.m permet desLmer la variance du bruit ajout sur une zone de silence
puisdebruiter lesignaltramepartramelaidedunseuil,ensuiteilyareconstrucLondusignal
debruite.

VII. Conclusion
La technique de rehaussement est ecace pour dbruiter toutes sortes de signaux vocaux mis
dans un environnement bruyant. En eet, pour dirents niveaux de bruit en dcibels, le signal aprs
traitementestbiendbruitetpeutdonctrecorrectementcomprisparlapersonnequireoitcesignal.
Des bruits parasites persistent nanmoins mais sont moins prsents que dans le signal bruit avant
dbruitageparlamthodediteensousespace.Deplus,bienquilncessiteunephasededcoupageetde
reconstrucLon, le traitement trame par trame et notamment la superposiLon de ces dernires permet
dopLmiserlerehaussement.
CeDe mthode, qui peuttre uLlise dans des domaines aussi varis que la course automobile
(voix du pilote perturbe par le bruit de la voiture) ou le reportage sousmarin ou encore lors dune
chographie(baDementsdecurdelenfantperturbsparceuxdelamre),risquedeconnatreungrand
nombredautresapplicaLonsdanslavenir.

Traitementdusignal
ENSEIRBJanvier2008

Page14/29

MaDhieuCHARPENTIER
BenjaminGHIS

VIII. Bibliographie
[1]

Roland BADEAU, Mthodes hautes rsoluMon pour lsMmaMon et le suivi de sinusodes


modules.ApplicaMonauxsignauxdemusique,thse,TELECOMPARIS.

[2]

hDp://fr.wikipedia.org/

Traitementdusignal
ENSEIRBJanvier2008

Page15/29

MaDhieuCHARPENTIER
BenjaminGHIS

IX. Annexes
IX.1. FoncWonadd_noise.m
function [signal_bruite Pb]= add_noise (signal,SNR)
%----------------------------------------------------------------%
%Cette fonction prend en parametre un signal (un vecteur COLONNE)
%et un SNR et elle rend un signal bruite (COLONNE) avec un SNR constant
%(celui donne en parametre) et la puissance du BBGC.
%
%-----------------------------------------------------------------M = length(signal);
bruit_initial = randn(1,M);

%Generation d'un BBGC initial

Ps = mean(abs(signal).^2);
Pbi = mean(abs(bruit_initial).^2);

%puissance du signal
%puissance du bruit initial

sigma = sqrt(Ps/(Pbi*10^(SNR/10)));

%calcul de l'ecart-type du nouveau


%bruit

bruit = sigma * bruit_initial;


Pb = mean(abs(bruit_initial).^2);

%generation du bruit a SNR constant


%puissance du bruit

signal_bruite = signal + bruit';

%bruitage du signal

IX.2. FoncWondebruitage_trames
function [matrice_de_trames_debruitees] = debruite_trames
(matrice_trame_bruitees,N,L,palie)
%fonction qui prend en parametre une matrice avec des trames d'un signal
%qui sont bruitees, N, qui est le nombre d'echantillons du signal original, L,
%qui est le nombre de ligne de la matrice de hankel que l'on va utiliser et
%palie qui est celui qu'on utlise pour debruite le signal.
%
%Ces trames sont necessairement dans les colonnes de la matrice qu'on donne
%en parametre.
%
%La fonction renvoie une matrice avec les trames de depart mais debruitees

barre = waitbar(0,'Debruitage des trames ...');


[nl1 nc1] = size (matrice_trame_bruitees);
matrice_de_trames_debruitees = [];
for k = 1:nc1
trame_k = matrice_trame_bruitees(:,k);
%---------------------------------------------------------------------%-- Generation de la matrice de Hankel et du palier propre a UNE trame
%---------------------------------------------------------------------HAN = hankel(trame_k(1:L),trame_k(L:N));
[L_hank M_hank] = size(HAN);
%-----------------------------------------------%-- Calcul des valeurs propres et singulieres
%------------------------------------------------

Traitementdusignal
ENSEIRBJanvier2008

Page16/29

MaDhieuCHARPENTIER
BenjaminGHIS

[U valeurs_singulieres V] = svd(HAN);
diago = svd(HAN);

%matrices singulieres
%vecteur colonne contenant
%les valeurs singuli?res

%-----------------------------------------------%-Rehaussement de la trame
%-----------------------------------------------% selection des valeurs singulieres dominantes de la matrice de Hankel
valeurs_dominantes = (diago > palie).*diago;
seuil = zeros(L_hank,M_hank);
seuil = spdiags(valeurs_dominantes,0,seuil);%On ne garde que
%l'espace signal
hank_reconstruite = U*seuil*V';
%on en deduit la
%nouvelle matrice de Hankel
hank_flip = fliplr(hank_reconstruite);

%Changement des diagonales


%en anti-diagonales

%procedure pour faire la moyenne de tous les ?lements des diagonales


%--------------------------------------------------------------------trame_estimated_reverse = [];
for ii = (-L+1):(M_hank-1)
trame_estimated_reverse = [trame_estimated_reverse
sum(diag(hank_flip,ii))/numel(diag(hank_flip,ii))];
end
%--------------------------------------------------------------------trame_rehau = fliplr(trame_estimated_reverse);
matrice_de_trames_debruitees = [ matrice_de_trames_debruitees trame_rehau ];
waitbar(k/nc1)
end
close(barre);
matrice_de_trames_debruitees = matrice_de_trames_debruitees';

IX.3. projet_signal_part1.m
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
PROJET SIGNAL - GHIS/CHARPENTIER
%
%
PR207 - 2007/2008
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all;
close all;
clc
%-------------------------------------------------------------------------%%------------------------------------------------------------------------%
Partie I
%%------------------------------------------------------------------------%--------------------------------------------------------------------------

%-------------------------------%----Parametres
------%-------------------------------fech=8000;
load('fcno03fz.mat');

%fech = frequence d'echantillonnage

Traitementdusignal
ENSEIRBJanvier2008

Page17/29

MaDhieuCHARPENTIER
BenjaminGHIS

SNR=10;

%SNR = Rapport signal sur bruit en db

Tech=1/fech;
N=0.032/Tech;

%Tech = periode d'echantillonnage


%N = nombre d'echantillons dans UNE trame

signal=fcno03fz;

%Stockage du signal dans un vecteur COLONNE

M = length(signal);

%M = nombre d'echantillon du signal

signal_non_voisee = signal(40000:40255);
signal
signal_voisee = signal(10600:10855);

%Selection d'une trame non-voisee dans le


%Selection d'une trame voisee dans le signal

%-------------------------------------------------------------------------%-- Representation des trames (voisees et non-voisee) extraites du signal


%-------------------------------------------------------------------------%---------------------------------------------%----Calcul des PSD
%---------------------------------------------PSD_signal_non_voisee=abs(fftshift((fft(signal_non_voisee,N)))).^2;
PSD_signal_voisee=abs(fftshift((fft(signal_voisee,N)))).^2;
%---------------------------------------------%---Figures
%---------------------------------------------valeurs_temporelles = (1:length(signal))*Tech;
valeurs_temporelles_signal_non_voisee=(1:length(signal_non_voisee))*Tech;
valeurs_temporelles_signal_voisee=(1:length(signal_voisee))*Tech;
figure(2)
subplot 121
plot(valeurs_temporelles_signal_non_voisee,signal_non_voisee);
xlim([1 length(signal_non_voisee)]*Tech);
xlabel('temps en secondes');
ylabel('snv(t)');
title('signal non voisee');
subplot 122
plot(([0:N-1]/N-0.5)*fech,PSD_signal_non_voisee);
xlim([-fech/2 fech/2]);
xlabel('frequences (Hz)');
ylabel('PSD');
title('Densite spectrale de puissance du signal non voisee');
figure (3)
subplot 121
plot(valeurs_temporelles_signal_voisee,signal_voisee);
xlim([1 length(signal_voisee)]*Tech);
xlabel('temps en secondes');
ylabel('sv(t)');
title('signal voisee');
subplot 122
plot(([0:N-1]/N-0.5)*fech,PSD_signal_voisee);
xlim([-fech/2 fech/2]);
xlabel('frequences (Hz)');
ylabel('PSD');
title('Densite spectrale de puissance du signal voisee');
%-------------------------------------------------------------------------%
Representation des signaux bruites et non bruites avec les spectrogrames
%--------------------------------------------------------------------------

Traitementdusignal
ENSEIRBJanvier2008

Page18/29

MaDhieuCHARPENTIER
BenjaminGHIS

%-----------------------------------------------------------------%---Generation du bruit avec le SNR constant


%-----------------------------------------------------------------[signal_bruite Pb]= add_noise (signal,SNR);
%---------------------------------------------%---Figures
%---------------------------------------------figure(4)
subplot 121
plot(valeurs_temporelles,signal);
xlim([1 length(signal)]*Tech);
xlabel('temps en secondes');
ylabel('s(t)');
%title('signal non bruite');
subplot 122
specgram(signal,512,fech);
colorbar;
figure (5)
subplot 121
plot(valeurs_temporelles,signal_bruite);
xlim([1 length(signal_bruite)]*Tech);
xlabel('temps en secondes');
ylabel('s(t)');
%title('signal bruite (SNR=10)');
subplot 122
specgram(signal_bruite,512,fech);
colorbar;

IX.4. projet_signal_part2.m
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
PROJET SIGNAL - GHIS/CHARPENTIER
%
%
PR207 - 2007/2008
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all;
close all;
clc
%-------------------------------------------------------------------------%%------------------------------------------------------------------------%
Partie II
%%------------------------------------------------------------------------%--------------------------------------------------------------------------

%-------------------------------%----Parametres
------%-------------------------------fech=8000;
t=0.025;
load('fcno03fz.mat');

%fech = frequence d'echantillonnage


%t = duree de la trame

Tech=1/fech;
N=t/Tech;

%Tech = periode d'echantillonnage


%N = nombre d'echantillons dans
%UNE trame
%Stockage du signal dans un vecteur LIGNE
%lecture du signal original
%nombre d'echantillons du signal

signal=fcno03fz';
%soundsc(signal)
M=length(signal);

Traitementdusignal
ENSEIRBJanvier2008

Page19/29

MaDhieuCHARPENTIER
BenjaminGHIS

%----------------------------------------------------------------------%----affichage du signal original en temporel


-------%----------------------------------------------------------------------valeurs_temporelles = (1:length(signal))*Tech;
figure (1)
plot(valeurs_temporelles,signal);
xlim([1 length(signal)]*Tech);
xlabel('temps en secondes');
ylabel('s(t)');
title('signal original');

%------------------------------------------------------------------------%---Tramage de notre signal avec un recouvrement de 50%


%------------------------------------------------------------------------%Pour generer nos trames et ensuite les fentres par une fenetre de
%Hamming, nous avons procede en 3 etapes:
%
%
1/ On decoupe le signal en trames de longueur donnees que l'ont met
%
dans une matrice (matrix_trames_sans_recouvrement). Puis on
%
multiplie toutesles colonnes de cette matrice par notre vecteur
%
%
de Hamming afin d'obtenir une autre matrice:
%
(matrix_trames_sans_recouvrement_hamming)
%
%
RQ: Les trames sont stock?es dans les COLONNES
%
%
2/ On reprend le signal initial puis on le redecoupe en trames mais,
%
cette fois-ci, en decalant la premiere trame d'une demi trame et
%
ainsi, on obtient une nouvelle matrice (matrix_trames_decalees).
%
Enfin, de meme que pour l'operation du dessus, nous multiplions
%
toutes les trames ainsi generees par notre vecteur de Hamming
%
et on obtient une nouvelle matrice:
%
matrix_trames_decalees_hamming
%
%
RQ: Les trames sont stock?es dans les COLONNES
%
%
3/ Enfin, on concatene les deux matrices generees aux etapes
%
precedentes en alternant des trames sans recouvrement dans les
%
colonnes d'indices impaires et des trames decalees dans les
%
colonnes d'indices paires
%
%
4/ Reconstruction du signal puis verification que la
%
reconstruction ainsi effectuee n'altere pas le signal
%Remarque:
%
%
%
%
%
%
%
%
%

La petite boucle if ci-dessous nous permet de distinguer 3


cas en completant. la dernire trame par des zeros si besoin
est. En effet, il peut arriver que la derniere trame ne
contiennent pas exactement le bon nombre d'echantillons.
Exemple:
La derniere trame ne contient que 234
echantillons et on a mis en parametre une duree de trame
de 0.032ms (ce qui equivaut a 256 echantillons) alors,
a ce moment la, on rajoute:
256 - 234 = 22 zeros

%--------------------------------------------------------------------%---- 1/ Generation de la matrice Contenant les trames non decalees


%---------------------------------------------------------------------

Traitementdusignal
ENSEIRBJanvier2008

Page20/29

MaDhieuCHARPENTIER
BenjaminGHIS

diff1 = M -(N*round(M/N));
vector_hamming = hamming(N);
if diff1 < 0
signal = [signal zeros(1,abs(diff1))];
matrix_trames_sans_recouvrement = reshape(signal,N,round(M/N));
matrix_hamming = vector_hamming * ones(1,round(M/N));
elseif diff1 > 0
M1 = (round(M/N)+1)*N;
signal = [signal zeros(1,M1-M)];
matrix_trames_sans_recouvrement = reshape(signal,N,round(M1/N));
matrix_hamming = vector_hamming * ones(1,round(M1/N));
else
matrix_trames_sans_recouvrement = reshape(signal,N,round(M/N));
matrix_hamming = vector_hamming * ones(1,round(M/N));
end
matrix_trames_sans_recouvrement_hamming = matrix_hamming .*
matrix_trames_sans_recouvrement;
%---------------------------------------------------------------------%---2/ Generation de la matrice contenant les trames decalees de N/2
%---------------------------------------------------------------------signal_trames_decalees = signal(N/2+1:M-N/2);
M2=length(signal_trames_decalees);
diff2 = M2-(N*round(M2/N));
if diff2 < 0
signal_trames_decalees = [signal_trames_decalees zeros(1,abs(diff2))];
matrix_trames_decalees=reshape(signal_trames_decalees,N,round(M2/N));
matrix_hamming2 = vector_hamming * ones(1,round(M2/N));
elseif diff2 > 0
M3 = (round(M2/N)+1)*N;
signal_trames_decalees = [signal_trames_decalees zeros(1,M3-M2)];
matrix_trames_decalees = reshape(signal_trames_decalees,N,round(M3/N));
matrix_hamming2 = vector_hamming * ones(1,round(M3/N));
else
matrix_trames_decalees = reshape(signal_trames_decalees,N,round(M2/N));
matrix_hamming2 = vector_hamming * ones(1,round(M2/N));
end
matrix_trames_decalees_hamming = matrix_hamming2 .* matrix_trames_decalees;
%---------------------------------------------------------------------%---3/ Concatenation de nos 2 matrices pour obtenir l'ensemble des
%---trames avec 50% de recouvrement.
%---------------------------------------------------------------------[l1 c1] = size (matrix_trames_sans_recouvrement);
[l2 c2] = size (matrix_trames_decalees);

Traitementdusignal
ENSEIRBJanvier2008

Page21/29

MaDhieuCHARPENTIER
BenjaminGHIS

matrix_all_trames = zeros(N,c1+c2);
%Stockage des trames sans recouvrement dans les colonnes d'indices
%impaires
for i = 1:c1
matrix_all_trames (:,2*i-1) = matrix_trames_sans_recouvrement(:,i);
end
%Stockage des trames avec recouvrement dans les colonnes d'indices
%paires
for j = 1:c2
matrix_all_trames (:,2*j) = matrix_trames_decalees(:,j);
end
%---------------------------------------------------------------------%---4/ Reconstruction et verification
%---------------------------------------------------------------------TRAME1 = matrix_trames_sans_recouvrement_hamming(:)';
HAMM1 = matrix_hamming(:)';
[Lll Hll] = size(HAMM1);
HAMM2 = [zeros(1,N/2),HAMM1(1:(Hll-N)),zeros(1,N/2)];
TRAME2 = [zeros(1,N/2),matrix_trames_decalees_hamming(:)',zeros(1,N/2)];
SOMME = TRAME1+TRAME2;
signal_reconstruit = SOMME./(HAMM1+HAMM2);
VERIF = signal_reconstruit - signal;
%soundsc(signal_reconstruit)
%---------------------------------------------------------------------%---Figures
%---------------------------------------------------------------------valeurs_temporelles = (1:length(signal))*Tech;
figure (2)
plot(valeurs_temporelles,signal);
xlim([1 length(signal)]*Tech);
xlabel('temps en secondes');
title('signal original original');
hold on
plot(valeurs_temporelles,signal_reconstruit,'r');
xlim([1 length(signal_reconstruit)]*Tech);
xlabel('temps en secondes');
title('signal reconstruit');
legend('Signal original','Signal reconstruit')
title('Representation du signal temporellement')

IX.5. projet_signal_part3.m
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
PROJET SIGNAL - GHIS/CHARPENTIER
%
%
PR207 - 2007/2008
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all;
close all;
clc
%-------------------------------------------------------------------------%%-------------------------------------------------------------------------

Traitementdusignal
ENSEIRBJanvier2008

Page22/29

MaDhieuCHARPENTIER
BenjaminGHIS

%
Partie III : REHAUSSEMENT DE LA SINUSOIDE
%%------------------------------------------------------------------------%-------------------------------------------------------------------------%---------------------------------------------%----Parametres de la sinusoide
------%---------------------------------------------N = 255;

%N = nombre d echantillons

L=150;
%parametre pour la matrice de hankel (nombre d
echantillons qui sont dans la premiere colonne!!!
fech=8000;
%fech = frequence d echantillonnage
Tech=1/fech;
%Tech = periode d echantillonnage
SNR = 1;
%SNR = rapport signal sur bruit
t = (1:N)/fech;
%---------------------------------------------%----Generation de la sinusoide
------%---------------------------------------------x = sin(2*pi*t*440);
x = x';

%transposition afin d'avoir une colonne

%---------------------------------------------%----Bruitage puis debruitage


------%---------------------------------------------%----------------------------%-- Bruitage de la sinusoide
%----------------------------[perturb Pb]= add_noise (x,SNR);
%-----------------------------------------------%-- Calcul des densites spectrales de puissance
%-----------------------------------------------Densite_spectrale_puissance_signalbruiteed=abs(fftshift((fft(perturb,N)))).^2;
Densite_spectrale_puissance_signal=abs(fftshift((fft(x,N)))).^2;
%-----------------------------------------------%-- Generation de la matrice de Hankel
%-----------------------------------------------HAN = hankel(perturb(1:L),perturb(L:N));
[L M_hank] = size(HAN);
palie = 50;

%definition du palie

%-----------------------------------------------%-- Calcul des valeurs propres et singulieres


%-----------------------------------------------[U S V] = svd(HAN);
diago = svd(HAN);
singulieres de la matrice de Hankel

%Decomposition de la matrice de Hankel


%vecteur colonne contenant les valeurs

%-----------------------------------------------%-Rehaussement de la sinusoide
%------------------------------------------------

Traitementdusignal
ENSEIRBJanvier2008

Page23/29

MaDhieuCHARPENTIER
BenjaminGHIS

% selection des valeurs singulieres dominantes de la matrice de Hankel


valeurs_dominantes = (diago > palie).*diago;
valeurs_dominantes = double(valeurs_dominantes);
seuil = zeros(L,M_hank);
seuil = spdiags(valeurs_dominantes,0,seuil);
hank_reconstruite = U*seuil*V';
matrice de Hankel
hank_flip = fliplr(hank_reconstruite);
anti-diagonales

%convertion de type

% on en deduit la nouvelle
%Changement des diagonales en

%procedure pour faire la moyenne de tous les ?lements des diagonales


signal_estimated_reverse = [];
for ii = (-L+1):(M_hank-1)
signal_estimated_reverse = [signal_estimated_reverse
sum(diag(hank_flip,ii))/numel(diag(hank_flip,ii))];
end
%--------------------------------------------------------------signal_rehau = fliplr(signal_estimated_reverse);

%vecteur LIGNE

signal_rehau = signal_rehau';

%vecteur colonne

%---------------------------------------------%---Comparaison SNR et SNR_final


%---------------------------------------------Psd = (1/N)*sum(abs(x')*abs(x));
bruit_restant = x - signal_rehau;

%puissance du signal debruite


%Calcul du bruit restant dans le signal debruite

Pbr = (1/N)*sum(abs(bruit_restant')*abs(bruit_restant));
du bruit restant

%calcul de la puissance

SNR_final=10*log10(Psd/Pbr);

%calcul du SNR_final

gain = SNR_final - SNR

%calcul du gain (gagner lors du d?bruitage) en dB

%------------------------%-Figures
%------------------------figure(1)
subplot 221
plot(t,x)
xlim([1 length(x)]*Tech);
xlabel('temps (t)');
ylabel('x(t)');
subplot 222
plot(((1:N)-N/2)/fech,Densite_spectrale_puissance_signal)
xlabel('frequences (Hz)');
ylabel('PSD');
subplot 223
plot(t,perturb)
xlim([1 length(x)]*Tech);
xlabel('temps (t)');
ylabel('x(t) bruite');
subplot 224
plot(((1:N)-N/2)/fech,Densite_spectrale_puissance_signalbruiteed)
xlabel('frequences (Hz)');
ylabel('PSD');

Traitementdusignal
ENSEIRBJanvier2008

Page24/29

MaDhieuCHARPENTIER
BenjaminGHIS

figure (2)
subplot 211
plot(diago,'rx')
subplot 212
plot((1:N)/fech,signal_rehau)
xlim([1 length(signal_rehau)]*Tech);
xlabel('temps (t)');
ylabel('x(t) rehau');

IX.6. projet_signal_part4.m
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
PROJET SIGNAL - GHIS/CHARPENTIER
%
%
PR207 - 2007/2008
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all;
close all;
clc
%-------------------------------------------------------------------------%%------------------------------------------------------------------------%
Partie IV
%%------------------------------------------------------------------------%-------------------------------------------------------------------------%-------------------------------%----Parametres
------%-------------------------------load('fcno03fz.mat');
fech=8000;
t=0.032;
SNR=5;

%fech = frequence d'echantillonnage


%t = duree de la trame
%Rapport signal sur bruit de notre signal

L=150;
%L = nombre d echantillons dans la premiere
colonne de la matrice de hankel d une trame
Tech=1/fech;
N=t/Tech;

%Tech = periode d'echantillonnage


%N = nombre d'echantillons dans UNE trame

signal=fcno03fz;

%Stockage du signal dans un vecteur COLONNE

M=length(signal);

%nombre d'echantillons du signal

%soundsc(signal);
%-----------------------------------------------------------------%---Generation du bruit avec le SNR constant
%-----------------------------------------------------------------[signal_bruite Pb]= add_noise (signal,SNR);
%-----------------------------------------------------------------%---Estimation de la variance du bruit
%-----------------------------------------------------------------zone_silence = signal_bruite(15:768);
estimated_variance = var(zone_silence);

Traitementdusignal
ENSEIRBJanvier2008

Page25/29

MaDhieuCHARPENTIER
BenjaminGHIS

palie = estimated_variance/sqrt(N+1-L);
plutard (M = N+1-L)

%on fixe le palie pour le debruitage

%------------------------------------------------------------------------%---Tramage de notre signal avec un recouvrement de 50%


%------------------------------------------------------------------------%--------------------------------------------------------------------%---- 1/ Generation de la matrice Contenant les trames non decalees
%---------------------------------------------------------------------

diff1 = M -(N*round(M/N));
vector_hamming = hamming(N);
if diff1 < 0
signal_bruite = [signal_bruite;zeros(abs(diff1),1)];
signal = [signal;zeros(abs(diff1),1)];
%on ajoute des ze?ros de padding au
signal aussi pour avoir les m?emes dimensions de matrice
matrix_trames_sans_recouvrement = reshape(signal_bruite,N,round(M/N));
matrix_hamming = vector_hamming * ones(1,round(M/N));
elseif diff1 > 0
M1 = (round(M/N)+1)*N;
signal_bruite = [signal_bruite;zeros(M1-M,1)];
signal = [signal;zeros(M1-M,1)];
%on ajoute des ze?ros de padding au
signal aussi pour avoir les m?emes dimensions de matrice
matrix_trames_sans_recouvrement = reshape(signal_bruite,N,round(M1/N));
matrix_hamming = vector_hamming * ones(1,round(M1/N));
else
matrix_trames_sans_recouvrement = reshape(signal_bruite,N,round(M/N));
matrix_hamming = vector_hamming * ones(1,round(M/N));
end
matrix_trames_sans_recouvrement_hamming = matrix_hamming .*
matrix_trames_sans_recouvrement;
%---------------------------------------------------------------------%---2/ Generation de la matrice contenant les trames decalees de N/2
%---------------------------------------------------------------------signal_trames_decalees = signal_bruite(N/2+1:M-N/2);
M2=length(signal_trames_decalees);
diff2 = M2-(N*round(M2/N));
if diff2 < 0
signal_trames_decalees = [signal_trames_decalees;zeros(abs(diff2),1)];
matrix_trames_decalees=reshape(signal_trames_decalees,N,round(M2/N));
matrix_hamming2 = vector_hamming * ones(1,round(M2/N));
elseif diff2 > 0
M3 = (round(M2/N)+1)*N;
signal_trames_decalees = [signal_trames_decalees;zeros(M3-M2,1)];

Traitementdusignal
ENSEIRBJanvier2008

Page26/29

MaDhieuCHARPENTIER
BenjaminGHIS

matrix_trames_decalees = reshape(signal_trames_decalees,N,round(M3/N));
matrix_hamming2 = vector_hamming * ones(1,round(M3/N));
else
matrix_trames_decalees = reshape(signal_trames_decalees,N,round(M2/N));
matrix_hamming2 = vector_hamming * ones(1,round(M2/N));
end
matrix_trames_decalees_hamming = matrix_hamming2 .* matrix_trames_decalees;
%---------------------------------------------------------------------%---3/ Concatenation de nos 2 matrices pour obtenir l'ensemble des
%---trames avec 50% de recouvrement.
%---------------------------------------------------------------------[l1 c1] = size (matrix_trames_sans_recouvrement);
[l2 c2] = size (matrix_trames_decalees);
matrix_all_trames = zeros(N,c1+c2);
%Pour les indices impaires
for i = 1:c1
matrix_all_trames (:,2*i-1) = matrix_trames_sans_recouvrement(:,i);
end
%Pour les indices paires
for j = 1:c2
matrix_all_trames (:,2*j) = matrix_trames_decalees(:,j);
end
%---------------------------------------------------------------------%---4/ Reconstruction et verification
%---------------------------------------------------------------------TRAME1 = matrix_trames_sans_recouvrement_hamming(:)';
HAMM1 = matrix_hamming(:)';
[Lll Hll] = size(HAMM1);
HAMM2 = [zeros(1,N/2),HAMM1(1:(Hll-N)),zeros(1,N/2)];
TRAME2 = [zeros(1,N/2),matrix_trames_decalees_hamming(:)',zeros(1,N/2)];
SOMME = TRAME1+TRAME2;
SIGNAL_BRUITE = SOMME./(HAMM1+HAMM2);
VERIF = SIGNAL_BRUITE-signal_bruite';
est parfaite (sauf aux extremites)

%Verification que la reconstruction

%------------------------------------------------------------------------%------------------------------------------------------------------------%---Rehaussement de notre signal bruite trame par trame


%------------------------------------------------------------------------%------------------------------------------------------------------------%1/Debruitage des trames sans recouvrement
matrix_trames_debruitees1 =
debruite_trames(matrix_trames_sans_recouvrement_hamming,N,L,palie);
%2/Debruitage des trames avec recouvrement de 50%
matrix_trames_debruitees2 =
debruite_trames(matrix_trames_decalees_hamming,N,L,palie);

Traitementdusignal
ENSEIRBJanvier2008

Page27/29

MaDhieuCHARPENTIER
BenjaminGHIS

%---------------------------------------------------------------------%---Reconstruction du signal a partir des trames debruitees


%---------------------------------------------------------------------TRAMES_debruitees_1 = matrix_trames_debruitees1(:)';
HAMM1 = matrix_hamming(:)';
[Lll Hll] = size(HAMM1);
HAMM2 = [zeros(1,N/2),HAMM1(1:(Hll-N)),zeros(1,N/2)];
TRAMES_debruitees_2 = [zeros(1,N/2),matrix_trames_debruitees2(:)',zeros(1,N/2)];
SOMME = TRAMES_debruitees_1 + TRAMES_debruitees_2;
signal_debruite = SOMME./(HAMM1 + HAMM2);
signal_debruite = signal_debruite';
soundsc(signal_debruite);

%---------------------------------------------------------------------%---Comparaison avant et apres debruitage


%---------------------------------------------------------------------%---------------------------------------------%----Calcul des PSD
%---------------------------------------------PSD_bruite = abs(fftshift((fft(signal_bruite,N)))).^2;
PSD_debruite = abs(fftshift((fft(signal_debruite,N)))).^2;
PSD_original = abs(fftshift((fft(signal,N)))).^2;
%---------------------------------------------%---Comparaison SNR et SNR_final
%---------------------------------------------Psd = mean(abs(signal_debruite).^2);
bruit_restant = signal - signal_debruite;
signal debruite

%puissance du signal debruite


%Calcul du bruit restant dans le

Pbr = mean(abs(bruit_restant).^2);

%calcul de la puissance du bruit restant

SNR_final=10*log10(Psd/Pbr);

%calcul du SNR_final

gain = SNR_final - SNR

%calcul du gain (gagner lors du d?bruitage) en dB

%---------------------------------------------%---Figures
%---------------------------------------------valeurs_temporelles = (1:length(signal))*Tech;
%
%
%
%
%
%
%
%
%

figure(1)
subplot 231
plot(valeurs_temporelles,signal);
xlim([1 length(signal)]*Tech);
xlabel('temps en secondes');
ylabel('s(t)');
title('signal debruite');

Traitementdusignal
ENSEIRBJanvier2008

Page28/29

MaDhieuCHARPENTIER
BenjaminGHIS

%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%

subplot 232
plot(valeurs_temporelles,signal_bruite);
xlim([1 length(signal_bruite)]*Tech);
xlabel('temps en secondes');
ylabel('s(t)');
title('signal original bruite');
subplot 233
plot(valeurs_temporelles,signal_debruite);
xlim([1 length(signal_debruite)]*Tech);
xlabel('temps en secondes');
ylabel('s(t)');
title('signal debruite');
subplot 234
specgram(signal,512,fech);
colorbar;
subplot 235
specgram(signal_bruite,512,fech);
colorbar;
subplot 236
specgram(signal_debruite,512,fech);
colorbar;
figure(1)
subplot 121
plot(valeurs_temporelles,signal);
xlim([1 length(signal_bruite)]*Tech);
xlabel('temps en secondes');
title('signal original original');
hold on
plot(valeurs_temporelles,signal_debruite,'r');
xlim([1 length(signal_debruite)]*Tech);
xlabel('temps en secondes');
title('signal debruite');
legend('Signal original','Signal debruite')
title('Representation du signal temporellement')
subplot 122
specgram(signal_debruite,512,fech);
colorbar;

%
%
%
%
%
%
%
%
%
%
%
%
%
%
%

figure (2)
plot(valeurs_temporelles,signal);
xlim([1 length(signal_bruite)]*Tech);
xlabel('temps en secondes');
title('signal original original');
hold on
plot(valeurs_temporelles,signal_debruite,'r');
xlim([1 length(signal_debruite)]*Tech);
xlabel('temps en secondes');
title('signal debruite');
legend('Signal original','Signal debruite')
title('Representation du signal temporellement')

Traitementdusignal
ENSEIRBJanvier2008

Page29/29

MaDhieuCHARPENTIER
BenjaminGHIS