Rapport Tsi Partie Signal

29
PROJET TSI : PARTIE SIGNAL REHAUSSEMENT DE LA PAROLE PAR LA METHODE DITE EN SOUSESPACES BENJAMIN GHIS MATTHIEU CHARPENTIER T2 ‐ TELECOM, S3, JANVIER 2008, ENSEIRB Professeur : Eric GRIVEL [email protected] | [email protected]

Transcript of Rapport Tsi Partie Signal

Page 1: Rapport Tsi Partie Signal

PROJETTSI:PARTIESIGNALREHAUSSEMENTDELAPAROLEPARLAMETHODEDITEEN

SOUS‐ESPACES

BENJAMINGHIS

MATTHIEUCHARPENTIER

T2‐TELECOM,S3,JANVIER2008,ENSEIRB

Professeur:EricGRIVEL

[email protected] | [email protected]

Page 2: Rapport Tsi Partie Signal

TraitementdusignalENSEIRB‐Janvier2008

Page2/29 MaDhieuCHARPENTIERBenjaminGHIS

Sommaire

I.IntroducLon ..................................................................................................................... 4

II.GénéraLond’unsignalbruitéavecunSNRdonné ........................................................... 4

III.Traitementtramepartrame........................................................................................... 6

III.1.Principe ............................................................................................................ 6

III.2.GesLondudécoupageentramessousMatlab ................................................. 7

III.3.ReconstrucLon ................................................................................................. 8

IV.Rehaussementdelaparoleparlaméthodediteensous‐espaces .................................. 9

IV.1.Principe............................................................................................................ 9

IV.2.Miseœuvredelaméthode ............................................................................ 10

V.Influencedelalongueurdestrames.............................................................................. 13

VI.OrgnaLsaLondesfichiersMatlab................................................................................. 14

VII.Conclusion................................................................................................................... 14

VIII.Bibliographie .............................................................................................................. 15

IX.Annexes........................................................................................................................ 16

IX.1.FoncLon«add_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

Page 3: Rapport Tsi Partie Signal

TraitementdusignalENSEIRB‐Janvier2008

Page3/29 MaDhieuCHARPENTIERBenjaminGHIS

Tabledesfigures

Figure1:Débruitagedusignaldeparole............................................................................................................... 4 Figure2:ReprésentaLontemporelleetdensitéspectraled’unetramenonvoisée ......................................... 4 Figure3:ReprésentaLontemporelleetdensitéspectraled’unevoisée............................................................ 5 Figure4:ReprésentaLondusignaloriginaletdesonspectrograme.................................................................. 6 Figure5:ReprésentaLondusignalbruité(SNR=10)etdesonspectrograme ................................................... 6 Figure6:SchémaLsaLonduprincipededécoupageentrames.......................................................................... 6 Figure7:SchémadelapremièreétapedelagesLondestrames....................................................................... 8 Figure8:SchémadelasecondeétapedelagesLondestrames ....................................................................... 8 Figure9:SchémadelatroisièmeétapedelagesLondestrames ...................................................................... 8 Figure10:ReprésentaLontemporelledusignaletdusignalreconstruit........................................................... 9 Figure11:TableaurecapitulaLfdutauxderehaussementendB..................................................................... 12 Figure12:Résultatobtenupourlerehaussementdusignaldeparole(SNR=5dB) ......................................... 12 Figure13:Résultatobtenupourlerehaussementdusignaldeparole(SNR=10dB) ........................................ 12 Figure14:Résultatobtenupourlerehaussementdusignaldeparole(SNR=15dB) ........................................ 13 Figure15:ReprésentaLondel’influencedestramessurletauxderehaussement........................................ 13

Page 4: Rapport Tsi Partie Signal

TraitementdusignalENSEIRB‐Janvier2008

Page4/29 MaDhieuCHARPENTIERBenjaminGHIS

I. IntroducLon

À l’heure où les communicaLons sont couramment uLlisées, il peut toujours être intéressantd’améliorerlaqualitédusignaltransmis.Eneffet,nombreusessont lesapplicaLons,danslesquelles,sanstraitementsupplémentairedusignal, celui‐ci serait inuLlisable. Ainsidansunmilieuambiant très sonorecomme le cockpit d’un avionoud’une formule 1, le signal que lemicro dupilote envoie ne serapas debonnequalitésansundébruitagedecelui‐ci.

L’objecLfdeceprojetestlerehaussementd’unsignaldeparolefondésurdestechniquesditesensous‐espaces.Partantdel’hypothèsequelesignaletlebruitsontdécorrélés,l’idéeestdedissocierl’espaceengendréparlesobservaLonsbruitéesendeuxsous‐espaces,l’unrelaLfausignal,l’autreserapportantaubruitblancaddiLf.

A l’aide du logicielMatlab, nous allons dans unpremier temps ajouter unbruit blanc gaussien ànotresignalinitial.Puis,nousallonsséparélesignalen«trames»quiserontd’abordfenêtréesavantd’êtretraitées séparément par la méthode dite en sous‐espaces. Enfin, les trames seront regroupées pourreconstruirelesignal.DansladernièreparLe,nouscommenteronslesrésultatsdurehaussementdusignaldeparoleetlaperLnencedelaméthode.

Figure1:Débruitagedusignaldeparole

II. GénéraLond’unsignalbruitéavecunSNRdonné

Pourcommencer, nousallons extrairedeux tramesde32msmaximumdenotresignal,uneditevoiséeetuneautreditenonvoisée.Nousavonsreprésentétemporellementcesdeuxtypesdetramesainsiqueleurdensitéspectraledepuissancesurlafigure2et3.

Figure2:Représentationtemporelleetdensitéspectraled’unetramenonvoisée

On voit de façon claire sur lafigure 2, plus précisément sur la densité spectrale depuissance, lecaractère«aléatoire»de la tramenonvoisée.Eneffet, le spectredepuissance est «dense», toutes lesfréquences y sont plus ou moins représentées. A contrario de la figure 3, ou l’on voit le caractèrepériodiqueoupseudopériodiquedelatramevoisée.Ilyadeuxraiessurladensitéspectraledepuissance.

Page 5: Rapport Tsi Partie Signal

TraitementdusignalENSEIRB‐Janvier2008

Page5/29 MaDhieuCHARPENTIERBenjaminGHIS

Figure3:ReprésentaMontemporelleetdensitéspectraled’unevoisée

Nous allons maintenant passer au bruitage du signal en ajoutant simplement à notre signal de

parole unbruit blanc gaussien addiLf demoyennenulle et de variance ! 2 . Il faut cependant quenousfassionscelaenuLlisantunrapportsignalàbruit(SNR)donnételque:

SNR = 10 ! log10 (Psignal

Pbruit) (1)

où Psignal etPbruit représententrespecLvementlapuissancedusignaletdubruit.

Pourcela,nousallonsparLrd’unbruitblancgaussiencentrédemoyennenulleetdevariance1quisefaitsousMatlabvia:

bruit _ initial = randn(1,N )

Pbruit

= ! 2 "Pbruit _ initial

#$%

&%avecNlenombred’échanLllonsdenotresignal (2)

L’expressionde ! vanouspermeDred’obtenirunepuissancedebruit constantequelquesoit laréalisaLonderandndenotrebruitiniLal.Del’équaLon(1),onLreP

bruit:

Pbruit =Psignal

10

SNR

10

(3)

EncouplantleséquaLons(2)et(3),ilvient:

!2"Pbruit _ initial =

Psignal

10

SNR

10

#! =Psignal

Pbruit _ initial "10

SNR

10

(4)

Nous pouvons donc ainsi générer notre bruit blanc gaussien centré de moyenne nulle et de

variance ! 2 (équaLon (5)) tel que sa puissance restera constance quelque soit la réalisaLon de randn.NousobLendronsdelasortenotreSNRdonné:

bruit = ! "bruit _ initial (5)

Ilnous resteplusqu’àajouter lebruitausignal. Ainsi,nousobtenonsalors le signalbruité sur lafigure5.

CeDeopéraLonestréaliséeparlafoncLonMatlab«add_noise.m».

Page 6: Rapport Tsi Partie Signal

TraitementdusignalENSEIRB‐Janvier2008

Page6/29 MaDhieuCHARPENTIERBenjaminGHIS

Al’aidedesspectrogrammesnousvoyonsmieuxquelesignal,horszonedesilence,estbruité.Eneffet, lebruitestvisiblesur lesignaltemporelmaisnousvoyonsbien,sur lespectrogramede lafigure5,quelesfréquencessontaDénuéesparrapportàcellesduspectrogramedelafigure4.

Figure4:ReprésentaMondusignaloriginaletdesonspectrograme

Figure5:ReprésentaMondusignalbruité(SNR=10)etdesonspectrograme

Il n’existe pas de filtres pour débruiter de façon certaine le signal. Néanmoins une méthodeconsisterait àajouter une infinitédebruit blanc gaussiencentrépourqu’ils se«compensent»etainsis’annulent.Nousallonsmaintenantpasseraudécoupagedusignalentrames.

III. Traitementtramepartrame

III.1. PrincipeUn signal de parole étant non staLonnaire, on effectue un traitement trame par trame sur des

duréesde20à40mssur lesquellesonconsidèreque le signalestquasi‐staLonnaire. Le caractèrequasistaLonnaireestnécessairepourque l’espérancedusignalnedépendepasdu temps.Pource faire,nousavonsfenêtrélesignalparunefenêtredeHamming.OnuLlisedeplusunrecouvrementdestramesde50%etce,danslebutd’effectuerparlasuiteunebonnereconstrucLondusignal.

Figure6:SchémaMsaMonduprincipededécoupageentrames

Page 7: Rapport Tsi Partie Signal

TraitementdusignalENSEIRB‐Janvier2008

Page7/29 MaDhieuCHARPENTIERBenjaminGHIS

D’aprèslafigure6,nousdéduisonslesformulesdefenêtrage(6):

Y (k) = X(k) !h1+ X(k) !h

2 (6)

Z(k) =Y (k)

h1+ h

2

(7)

Lefenêtrageavecunrecouvrementde50%permetdeuxchoses:

D’unepart,nousavonsdeuxesLmaLonsdusignalfenêtrépourchaqueéchanLllon,cequipermetd’obtenirunemeilleureesLmaLonpondéréedusignaldeparole.

D’autrepart,lerecouvrementà50%permetdeposiLonnerlemaximumd’unefenêtredelatrame2 sur la figure 6 (là où l’esLmaLon est la meilleure) en parallèle avec les extrémités des deuxtramesdepartetd’autredelaprécédente(làoùl’esLmaLonestlaplusmauvaise)afind’avoiruneréparLLonéquitabledel’ensembledesesLmaLonsdusignal.

L’uLlisaLond’unefenêtredeHammingestpréférableàcelled’uneporte.Eneffet,silatroncaturedusignalestréaliséedefaçonnonrectangulairemaisenfenêtrant lesignal, lestransiLonsdans lesignalseront alors plus douces. La porte a des disconLnuités fortes, ce qui entraîne une fuite spectraleimportante,c’est‐à‐direqu’onobserveunefuitedelapuissancesurleslignesfréquenLelles.Pluslafenêtrechoisie aura une grande durée temporelle, plus elle sera étroite dans le domaine fréquenLel. Ainsi, enprenantunefenêtreinfinimentlonguetemporellement,onabouLtàlalimiteàundiracenfréquence,quiest l'élément neutre du produit de convoluLon. Avec une fenêtre comme celle de Hamming, la fuitespectraleestnéanmoinstrèsamoindrie.

III.2. GesWondudécoupageentramessousMatlab

La longueur d’une trame n’est pas anodine. Il faut, comme cela a déjà été indiqué qu’ellecorresponde à uneduréedeparole de 20 à 40ms.Mais pour utiliser pleinement les performances de laTransformée de Fourier Rapide, il faut qu’elle soit une puissance de 2. Avec une fréquenced’échanLllonnagede8kHz,256échanLllonscorrespondentà32ms,ceDetailleconvientdonc.(pourplusdedétailsvoirlaparLeIV:simulaLon)

IlfautégalementsongeràrajouterdeszérosàlafindusignalpourobtenirunsignaldelongueurmulLpledelatailledestrames.CeciestimplémentéparuneboucleifquicalculesilatailledusignalestunmulLpledunombredetramesoupas.

LagesLondestramessepasseen3étapes:

1) On commencepar découper le signal en tramesde longueur donnéeque l’onmet dans unematrice (matrix_trames_sans_recouvrement). Puis onmulLplie toutes les colonnes de ceDematrice par notre vecteur de Hamming afin d’obtenir une nouvelle matrice(matrix_trames_sans_recouvrement_hamming).AnoterquelestramessontstockéesdanslescolonnesdeceDematrice.

2) Ensuite,onreprendlesignaliniLalpuisonledécoupeànouveauentramesmais,ceDefois‐ci,en décalant la première trame d’une demi trame pour ainsi obtenir une autre matrice(matrix_trames_decalees).Puis,demêmequepourlapremièreétape,nousmulLplionstoutesles trames ainsi obtenues par notre vecteur de Hamming et on obtient ainsi une nouvellematrice(matrix_trames_decalees_hamming).

3) CeDe 3ème étape consiste simplement à concaténer les deux matrices générées aux étapesprécédentes (matrix_trames_sans_recouvrement_hamming etmatrix_trames_decalees_hamming) en alternant des trames sans recouvrement dans lescolonnesd’indiceimpaireetdestramesdécaléesdanslescolonnesd’indicepair.

Page 8: Rapport Tsi Partie Signal

TraitementdusignalENSEIRB‐Janvier2008

Page8/29 MaDhieuCHARPENTIERBenjaminGHIS

Figure7:SchémadelapremièreétapedelagesMondestrames

Figure8:SchémadelasecondeétapedelagesMondestrames

Figure9:SchémadelatroisièmeétapedelagesMondestrames

III.3. ReconstrucWonPourlareconstrucLondusignal,oncommenceparfairelesopéraLonsinversesdécritesci‐dessus.

Onse retrouvedonccomme indiquépar lafigure6.Onconcatèneà la suite toutes les tramesdesdeuxmatrices générées aux étapes 1 et 2 (i.e. matrix_trames_sans_recouvrement_hamming etmatrix_trames_decalees_hamming) afin d’obtenir à nouveaux nos deux vecteurs ligne avec nos tramessansrecouvrementsetnostramesdécalées.Anoterqu’ilfautbienrajouterdeszérosdepartetd’autredevecteur lignequiconLennent lestramesdécaléesafinque latailledesdeuxvecteurs lignessoit lamême(cf.figure6).

On faitdemêmeavecnosdeuxmatricescontenant lescoefficientsdeHamming encolonneafind’obtenirfinalement4vecteurslignes.Puisaveclaformulededefnêtragedel’équaMon(7),nouspouvonsfacilement reconsLtuer le signal en addiLonant nos deux premiers vecteurs contenant les trames puisdivisantparlasommedesdeuxvecteursaveclescoefficientsdeHamming.

Page 9: Rapport Tsi Partie Signal

TraitementdusignalENSEIRB‐Janvier2008

Page9/29 MaDhieuCHARPENTIERBenjaminGHIS

Nouspouvonsvoirsurlafigure10quelareconstrucLonabienfoncLonné.Eneffet,onnepeutdisLnguerlesignaloriginaldusignalreconstruitcequisignifiequelaméthodefoncLonne.

LegrosavantagedelaméthodeparaddiLon‐recouvrementreposedanslefaitquenousavonsunemeilleureesLmaLondusignalenchoississantunrecouvrementde50%.Enprenantdestramesquineserecouvriraient pas, nous aurions des distorsions induites par le fenêtrage aux extrémités des trames. Sinousprenionsun recouvrementde25%, il yaurait les2 quartscentrauxdechaque tramepour lesquelsnous n’aurions qu’une seule esLmaLon. Enfin si nous avions pris un recouvrement de 75%, le nombred’esLmaLonsd’une observaLonde signal oscillerait entre 1 et 4, ce qui rendrait inégale l’esLmaLondusignal.

Figure10:ReprésentaMontemporelledusignaletdusignalreconstruit

Maintenantquenousavonsnotreméthoded’addiLon‐recouvrementquiestopéraLonnelle,nouspouvonspasseraurehaussementdusignalàproprementditparlaméthodediteensous‐espaces.

IV. Rehaussementdelaparoleparlaméthodediteensous‐espaces

IV.1. PrincipeSoitNlenombred’observaLonsdusignalbruitédisponible.L’algorithmeaucœurduprojetopère

en3étapes:

1.OnconstruitlamatricedeHankelHxdetailleLxMàparLrdesdonnéesbruitées:

Hx=

x(1) x(2) L x(M )

x(2) M M

M M x(N !1)

x(L) x(L +1) L x(N )

"

#

$$$$

%

&

''''

(8)

UnematricedeHankelatoussescoefficients,membresd’uneanL‐diagonale,égaux.Deplus,lesNobservaLons du signal bruité sont stockées dans la première colonne et la dernière ligne de lamatricedeHankel.Enoutre,LetMvérifient L + M = N +1 etonprendrapar lasuite L > M .OneffectueensuiteunedécomposiLonenvaleurssingulières.

2.OnesLmeausensdesmoindrescarréslamatricedeHankeldusignal,enneconservantquelesKvaleurssingulières«prédominantes»delamatricedeHankelHy desobservaLonsbruitées.

Page 10: Rapport Tsi Partie Signal

TraitementdusignalENSEIRB‐Janvier2008

Page10/29 MaDhieuCHARPENTIERBenjaminGHIS

3.OnendéduituneesLmaLonde Hsignal ,ausensdesmoindrescarrés,notée Hsignal

LS .Puis,pour

restaurerlastructurede lamatricedeHankeldedonnéesdusignal,etobteniruneesLmaLondu

signal,onaffecteàchaquecoefficientdesanL‐diagonalesdelamatrice Hsignal

LS ,lavaleurmoyenne

desanL‐diagonales.OnobLentalorsuneesLmaLondusignalensélecLonnantlapremièrecolonneetladernièrelignedeceDematrice.

Maintenant que nous avons défini les grands axes de la méthode, nous pouvons passer à sonimplémentaLon.

IV.2. Miseœuvredelaméthode

Pour bien comprendre le rehaussement de la parole par laméthode dite en sous‐espaces, nousallons d’abord redéfinir la matrice d’autocorrélaLon, l’esLmer à l’aide d’un esLmateur, expliquer le lienentrelamatricedeHankeletlamatriced’auocorrélaLonetenfinesLmerlamatricedeHankel.

Soitnotresignalbruitédéfinici‐dessous:

x(t) = s(t) + b(t) (9)

Où s(t) estlesignaloriginaletb(t) estnotrebruitblancgaussiencentrédevariance! 2 .

SinousavonsNéchanLllons denotresignal,alors onpeut représenter Xcommeun vecteur telque:

X =

X(1)

M

X(N )

!

"

###

$

%

&&&

(10)

OnpeutainsiendéduirelafoncLond’autocorrélaLonquis’écritcommesuit:

RN=

Rxx(0) R

xx(!1) L R

xx(!N +1) R

xx(!N )

Rxx(1) R

xx(0) R

xx(0)

M O M

Rxx(N !1) O R

xx(!1)

Rxx(N ) R

xx(N !1) L R

xx(1) R

xx(0)

"

#

$$$$$$

%

&

''''''

(11)

Ensuite, nous allons esLmer la foncLon d’autocorrélaLon à l’aide d’un esLmateur biaisé et lafoncLond’autocorrélaLonesLmées’écrit:

%RN=1

N(X ! X

T) (12)

Oùle«T»représentel’opérateurtransposépuisquequ’ontravaillesurdeséchanWllonsàvaleursréels.

DanslaméthodeditededécomposiLonensous‐espaces,ilestpossibled’esLmerl’espacesignalet

l’espace bruit en calculant la décomposiLon en valeurs propres de lamatrice %RN. En juxtoposant les K

vecteursproprescorrespondantauxKvaleurspropres«prédominantes»deceDematrice,onobLentunematriceW dedimensionsNxKengendrant l’espacesignaletenjuxtaposant lesN‐Kautresvecteurs,onobLent une matrice W

! (On met un symbole d’orthogonalité car tous les vecteurs propres de ceDe

matrices sont orthogonaux aux vecteurs propres de lamatriceW )de dimensionsN x (N‐K) engendrantl’espacebruit.Ainsiona:

Page 11: Rapport Tsi Partie Signal

TraitementdusignalENSEIRB‐Janvier2008

Page11/29 MaDhieuCHARPENTIERBenjaminGHIS

RN= W |W

![ ] (13)

Nous allons maintenant détailler le rapport entre la matrice de Hankel et la matriced’autocorrélaLon.

Si nous développons le produit Hx!H

x

T , nous retombons sur la foncLon d’autocorrélaLon

RL(Celle‐ciestdetailleLxLetnondetailleNxN).Eneffet,ona:

x(1) x(2) L x(M )

x(2) M M

M M x(N !1)

x(L) x(L +1) L x(N )

"

#

$$$$

%

&

''''

x(1) x(2) L x(L)

x(2) M x(L +1

M M M

x(M ) L x(N !1) x(N )

"

#

$$$$

%

&

''''

=

x(k)2

k=1

M

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

M

( L

x(k) ) x(k !1)k=1

M

( O M

M O

L x(k)2

k=1

M

(

"

#

$$$$$$$$$

%

&

'''''''''

(14)

OnobserveranotammentlarelaLonavecl’esLmateurbiaisédelamatriced’autocorrélaLon:

%RL=

1

Mx(k)

2

k=1

M

!1

Mx(k) " x(k +1)

k=1

M

! L

1

Mx(k) " x(k #1)

k=1

M

! O M

M O

L1

Mx(k)

2

k=1

M

!

$

%

&&&&&&&&&

'

(

)))))))))

=

%Rxx(0) %R

xx(1) L

%Rxx(#1) O M

M O

L %Rxx(0)

$

%

&&&&

'

(

))))

(15)

La valeur M au dessus des deux sommes qui est le nombre d’échanWllons sur lesquels on vaapproximerlafoncWond’autocorrélaWonàuninstantdonné.

LelienentrelamatricedeHankeletlamatriced’autocorrélaLonrésidedanslefaitquelesvaleurspropresdelamatriced’autocorrélaLonsontlecarrédesvaleurssingulièresdelamatricedeHankel.

NouspassonsmaintenantàladécomposiLonenvaleurssingulièresdelamatricedeHankel:

Hx=U !S !V

T (16)

OùU est unematrice dedimensionL x L, VT est unematrice dedimensionMxM etS est unematricecontenantlesvaleurssingulièresdelamatricedeHankeletdedimensionLxM.

PouresLmerl’espacesignal,ilsuffitdenegarderquelesvaleurssingulières«prédominantes»denotrematriceS.Leseuilpourlesvaleursprédominantesaétéfixéà:

seuil =%!2

M

où %!2 représentelavarianceésLméedubruitsurunezonedesilencedusignaloriginal

(17)

On va uLliser pour cela la foncLon spdiags sous Matlab pour ne garder que les valeursprédominantes de la matrice S correspondant à seulement l’espace «signal» de notre signal bruité etaffectétouslesautrescoefficientsdelamatricepardeszéros.OnnoteceDenouvellematrice S

S.

OnreconstruitensuitenotrematricedeHankeleneffectuantl’opéraLonsuivante:

Page 12: Rapport Tsi Partie Signal

TraitementdusignalENSEIRB‐Janvier2008

Page12/29 MaDhieuCHARPENTIERBenjaminGHIS

%HS=U !S

S!V

T (18)

Ainsi la structure de la matrice de Hankel restauré en affectant à chaque coefficient des anL‐

diagonales de la matrice %HS la valeur moyenne des anL‐diagonales. Pour cela, nous avons uLlisé les

foncLonsfliplrpuisdiag.OnobLentainsiuneesLmaLondusignalensélecLonnantlapremièrecolonneetladernièrelignedeceDematrice.

Voicici‐dessousletableaurécapitulaLfdurehaussementdenotresignaldeparolebruité:

SNRfixé 5 10 15

Tauxderehaussement(dB) 2.1613 3.1918 4.8050

Figure11:TableaurecapitulaMfdutauxderehaussementendB

Figure12:Résultatobtenupourlerehaussementdusignaldeparole(SNR=5dB)

Figure13:Résultatobtenupourlerehaussementdusignaldeparole(SNR=10dB)

Page 13: Rapport Tsi Partie Signal

TraitementdusignalENSEIRB‐Janvier2008

Page13/29 MaDhieuCHARPENTIERBenjaminGHIS

Figure14:Résultatobtenupourlerehaussementdusignaldeparole(SNR=15dB)

Laméthodelapluséfficaceseraitsansdoutededébruiterlesignaltramepartrameaveclestramesvoiséesquiseraientplusfacilesàdébruiterdufaitdeleur«quasi‐périodicité».

V. Influencedelalongueurdestrames

Maintenant que nous avons plus ou moins réussi à débruiter notre signal, nous nous sommesintéressésà l’influencede la tailledes tramessur le rehaussement.En effet,plus les tramessontpeLtesplus nous avons une forte probabilité d’obtenir une quasi‐staLonnarité de nos trames mais nousaugmentonsenmêmetempsdecalculpourledébruitageparlaméthodediteensous‐espaces.

Figure15:ReprésentaMondel’influencedestramessurletauxderehaussement

LescourbesrougeetbleureprésenteletauxderehaussementpourunSNRiniLalde5et10dB.Onpeut voir que le taux de rehaussement augmentede façon logarithmique (dû au log des décibels) si onaugmentelatailledestrames.Enrevanchepourlacourbenoir,représentantunSNRiniLalà15dB,letaux

Page 14: Rapport Tsi Partie Signal

TraitementdusignalENSEIRB‐Janvier2008

Page14/29 MaDhieuCHARPENTIERBenjaminGHIS

derehaussementaugmentejusqu'àquel’onaitunetramd’environ32ms,aprèscela,lacourbemontrequelerehaussementestmoinsbon

La courbe verte représente le gainmoyen (pour le SNR = 5, 10 et 15 dB) pour une longueur detrame donnée. On peut notamment observé que la courbe tend asymptoLquement vers une valeur.Néanmoins,onserendcomptequepourunetramede32msceDevaleurest«quasiment»aDeinteetdeplus32estunepuissancede2cequifacilitelecalculdelaFFT.

Ilauraitpuêtreintéressantdetesternotreméthodederehaussementdelaparolepourbruitblancgaussiennoncentrémaisnousn’avonspaseuletempsdel’implémenter.

VI. OrgnaLsaLondesfichiersMatlab

IlyadeuxfoncLonsdansnotreprogrammaLonMatlab:

• «Add_noise.m»quirajouteunbruitblancgaussiencentrésurunsignalavecunSNRdonné

• «debruitage_trames.m» qui nous renvoie une matrice avec les trames débruitées dans lescolonnes

Ensuite,nousavons4fichiers«.m»quicorrespondentaux4parLesduprojet:

• «projet_signal_part1.m»estlecodepermeDantdebruiterlesignalavecunSNRconstant.

• «projet_signal_part2.m» est le code permeDant de créer un matrice contenant les tramesfenêtréesetlaméthodeaddiLonrecouvrement.

• «projet_signal_part3.m» est une applicaLon de la méthode de rehaussement dans l’exemplesimpled’unsinusbruitéavecunbruitdontonconnaîtl’avancelavariance.

• «projet_signal_part4.m» permet d’esLmer la variance du bruit ajouté sur une zone de silencepuisdebruiter lesignaltramepartrameà l’aided’unseuil,ensuite ilyareconstrucLondusignaldebruite.

VII. Conclusion

La technique de rehaussement est efficace pour débruiter toutes sortes de signaux vocaux émisdans un environnement bruyant. En effet, pour différents niveaux de bruit en décibels, le signal aprèstraitementestbiendébruitéetpeutdoncêtrecorrectementcomprispar lapersonnequireçoitcesignal.Des bruits parasites persistent néanmoins mais sont moins présents que dans le signal bruité avantdébruitageparlaméthodediteensous‐espace.Deplus,bienqu’ilnécessiteunephasededécoupageetdereconstrucLon, le traitement trame par trame et notamment la superposiLon de ces dernières permetd’opLmiserlerehaussement.

CeDeméthode, qui peut‐être uLlisée dans des domaines aussi variés que la course automobile(voix du pilote perturbée par le bruit de la voiture) ou le reportage sous‐marin ou encore lors d’uneéchographie(baDementsdecœurdel’enfantperturbésparceuxdelamère),risquedeconnaîtreungrandnombred’autresapplicaLonsdansl’avenir.

Page 15: Rapport Tsi Partie Signal

TraitementdusignalENSEIRB‐Janvier2008

Page15/29 MaDhieuCHARPENTIERBenjaminGHIS

VIII. Bibliographie

[1] Roland BADEAU, «Méthodes à hautes résoluMon pour l’ésMmaMon et le suivi de sinusoïdesmodulées.ApplicaMonauxsignauxdemusique»,thèse,TELECOMPARIS.

[2] hDp://fr.wikipedia.org/

Page 16: Rapport Tsi Partie Signal

TraitementdusignalENSEIRB‐Janvier2008

Page16/29 MaDhieuCHARPENTIERBenjaminGHIS

IX. Annexes

IX.1. FoncWon«add_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); %puissance du signal Pbi = mean(abs(bruit_initial).^2); %puissance du bruit initial sigma = sqrt(Ps/(Pbi*10^(SNR/10))); %calcul de l'ecart-type du nouveau %bruit bruit = sigma * bruit_initial; %generation du bruit a SNR constant Pb = mean(abs(bruit_initial).^2); %puissance du bruit signal_bruite = signal + bruit'; %bruitage du signal

IX.2. FoncWondebruitage_tramesfunction [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 %------------------------------------------------

Page 17: Rapport Tsi Partie Signal

TraitementdusignalENSEIRB‐Janvier2008

Page17/29 MaDhieuCHARPENTIERBenjaminGHIS

[U valeurs_singulieres V] = svd(HAN); %matrices singulieres diago = svd(HAN); %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; %fech = frequence d'echantillonnage load('fcno03fz.mat');

Page 18: Rapport Tsi Partie Signal

TraitementdusignalENSEIRB‐Janvier2008

Page18/29 MaDhieuCHARPENTIERBenjaminGHIS

SNR=10; %SNR = Rapport signal sur bruit en db Tech=1/fech; %Tech = periode d'echantillonnage N=0.032/Tech; %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); %Selection d'une trame non-voisee dans le signal signal_voisee = signal(10600:10855); %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 %--------------------------------------------------------------------------

Page 19: Rapport Tsi Partie Signal

TraitementdusignalENSEIRB‐Janvier2008

Page19/29 MaDhieuCHARPENTIERBenjaminGHIS

%------------------------------------------------------------------ %---- 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; %fech = frequence d'echantillonnage t=0.025; %t = duree de la trame load('fcno03fz.mat'); Tech=1/fech; %Tech = periode d'echantillonnage N=t/Tech; %N = nombre d'echantillons dans %UNE trame signal=fcno03fz'; %Stockage du signal dans un vecteur LIGNE %soundsc(signal) %lecture du signal original M=length(signal); %nombre d'echantillons du signal

Page 20: Rapport Tsi Partie Signal

TraitementdusignalENSEIRB‐Janvier2008

Page20/29 MaDhieuCHARPENTIERBenjaminGHIS

%----------------------------------------------------------------------- %----- 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 %---------------------------------------------------------------------

Page 21: Rapport Tsi Partie Signal

TraitementdusignalENSEIRB‐Janvier2008

Page21/29 MaDhieuCHARPENTIERBenjaminGHIS

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);

Page 22: Rapport Tsi Partie Signal

TraitementdusignalENSEIRB‐Janvier2008

Page22/29 MaDhieuCHARPENTIERBenjaminGHIS

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 %-------------------------------------------------------------------------- %%-------------------------------------------------------------------------

Page 23: Rapport Tsi Partie Signal

TraitementdusignalENSEIRB‐Janvier2008

Page23/29 MaDhieuCHARPENTIERBenjaminGHIS

% 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); %Decomposition de la matrice de Hankel diago = svd(HAN); %vecteur colonne contenant les valeurs singulieres de la matrice de Hankel %------------------------------------------------ %-- Rehaussement de la sinusoide %------------------------------------------------

Page 24: Rapport Tsi Partie Signal

TraitementdusignalENSEIRB‐Janvier2008

Page24/29 MaDhieuCHARPENTIERBenjaminGHIS

% selection des valeurs singulieres dominantes de la matrice de Hankel valeurs_dominantes = (diago > palie).*diago; valeurs_dominantes = double(valeurs_dominantes); %convertion de type seuil = zeros(L,M_hank); seuil = spdiags(valeurs_dominantes,0,seuil); 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 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)); %puissance du signal debruite bruit_restant = x - signal_rehau; %Calcul du bruit restant dans le signal debruite Pbr = (1/N)*sum(abs(bruit_restant')*abs(bruit_restant)); %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 %------------------------- 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');

Page 25: Rapport Tsi Partie Signal

TraitementdusignalENSEIRB‐Janvier2008

Page25/29 MaDhieuCHARPENTIERBenjaminGHIS

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; %fech = frequence d'echantillonnage t=0.032; %t = duree de la trame SNR=5; %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; %Tech = periode d'echantillonnage N=t/Tech; %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);

Page 26: Rapport Tsi Partie Signal

TraitementdusignalENSEIRB‐Janvier2008

Page26/29 MaDhieuCHARPENTIERBenjaminGHIS

palie = estimated_variance/sqrt(N+1-L); %on fixe le palie pour le debruitage plutard (M = N+1-L) %------------------------------------------------------------------------- %---- 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)];

Page 27: Rapport Tsi Partie Signal

TraitementdusignalENSEIRB‐Janvier2008

Page27/29 MaDhieuCHARPENTIERBenjaminGHIS

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'; %Verification que la reconstruction est parfaite (sauf aux extremites) %------------------------------------------------------------------------- %------------------------------------------------------------------------- %---- 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);

Page 28: Rapport Tsi Partie Signal

TraitementdusignalENSEIRB‐Janvier2008

Page28/29 MaDhieuCHARPENTIERBenjaminGHIS

%---------------------------------------------------------------------- %---- 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); %puissance du signal debruite bruit_restant = signal - signal_debruite; %Calcul du bruit restant dans le signal debruite 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'); %

Page 29: Rapport Tsi Partie Signal

TraitementdusignalENSEIRB‐Janvier2008

Page29/29 MaDhieuCHARPENTIERBenjaminGHIS

% 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')