Académique Documents
Professionnel Documents
Culture Documents
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)
(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
#! =
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
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
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)
(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)
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
'
)
) $ 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_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]
[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);
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)));
%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
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);
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');
Traitementdusignal
ENSEIRBJanvier2008
Page17/29
MaDhieuCHARPENTIER
BenjaminGHIS
SNR=10;
Tech=1/fech;
N=0.032/Tech;
signal=fcno03fz;
M = length(signal);
signal_non_voisee = signal(40000:40255);
signal
signal_voisee = signal(10600:10855);
Traitementdusignal
ENSEIRBJanvier2008
Page18/29
MaDhieuCHARPENTIER
BenjaminGHIS
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');
Tech=1/fech;
N=t/Tech;
signal=fcno03fz';
%soundsc(signal)
M=length(signal);
Traitementdusignal
ENSEIRBJanvier2008
Page19/29
MaDhieuCHARPENTIER
BenjaminGHIS
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';
%definition du palie
%-----------------------------------------------%-Rehaussement de la sinusoide
%------------------------------------------------
Traitementdusignal
ENSEIRBJanvier2008
Page23/29
MaDhieuCHARPENTIER
BenjaminGHIS
%convertion de type
% on en deduit la nouvelle
%Changement des diagonales en
%vecteur LIGNE
signal_rehau = signal_rehau';
%vecteur colonne
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
%------------------------%-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;
L=150;
%L = nombre d echantillons dans la premiere
colonne de la matrice de hankel d une trame
Tech=1/fech;
N=t/Tech;
signal=fcno03fz;
M=length(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)
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)
Traitementdusignal
ENSEIRBJanvier2008
Page27/29
MaDhieuCHARPENTIER
BenjaminGHIS
Pbr = mean(abs(bruit_restant).^2);
SNR_final=10*log10(Psd/Pbr);
%calcul du SNR_final
%---------------------------------------------%---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