IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Signal Discussion :

code watermarking audio


Sujet :

Signal

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 4
    Points : 1
    Points
    1
    Par défaut code watermarking audio
    Bonjour,

    je possède un fichier .wav codé sur 16 bits que j'ai compressé sur 8 bits et remis entre -1 et 1. Il a 368382 échantillons de longueur. D'autre part, j'ai encodé un texte et l'ai mis sous forme de 226 échantillons qui ont pour valeur soit 1 soit -1.

    Mon but est désormais de tatouer ce signal "texte" dans mon signal "son". Je cherche donc de l'aide pour coder cela. A priori, une bonne méthode serait de tramer mon signal audio en intervalles réguliers puis, sur chaque trame, de chercher la composante basse fréquence (à l'aide d'une FFT), de la retirer de mon signal "audio" et d'ajouter à ce signal mon "texte" multiplié par la puissance du signal "audio" sur la trame et par un facteur d'échelle (assurant que le texte soit en dessous du seuil d'audibilité). Il ne resterait alors qu'à regrouper mes trames modifiées.

    J'espère avoir été assez clair dans mes explications.

    Merci d'avance pour vos idées ou solutions.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir 7homa5,

    Où se situe ton problème exactement?
    Le chargement de ton fichier .wav?
    Le calcul de la fft, la puissance....
    Ton problème est plutôt au niveau de Matlab ou de la théorie?

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonsoir,

    déjà je ne suis pas sûr que la méthode soit la bonne. Mais en supposant que ce soit correct, mon souci se situe plutôt au niveau du découpage de mon signal son en trames. J'ai écris cela pour l'instant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Taille_trame = round((Q * length(Son_comp)) / (2 * length(Texte_comp))); % Son_comp est codé sur Q bits et Texte_comp est codé sur 2 bits
    N = floor( length(Son_comp) / Taille_trame ); % Nombre de trames
     
    for k = 1:N-1
        Signal_trame = Son_comp((k-1)*Taille_trame + 1:k*Taille_trame);
    end
    Son_comp est mon fichier son compressé et Texte_comp mon texte quantifié.
    Je ne sais pas si ma Taille de trame est très pertinente, ni si je ne vais pas avoir un problème à la recomposition avec la dernière trame...
    Enfin, dois-je réaliser toutes les étapes de "ma" méthode (FFT, soustraction, tatouage) dans la même boucle ?
    Merci.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Ta méthode me semble bonne, à part que tu peux inclure un trame supplémentaire sans souci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Taille_trame = round((Q * length(Son_comp)) / (2 * length(Texte_comp))); % Son_comp est codé sur Q bits et Texte_comp est codé sur 2 bits
    N = floor( length(Son_comp) / Taille_trame ); % Nombre de trames
    
    for k = 1:N
        Signal_trame = Son_comp((k-1)*Taille_trame + 1:k*Taille_trame);
    end
    étant donné que
    arrondi à l'entier inférieur

    Pour ce qui est de la taille de ta trame, j'ai vu ici qu'ils prenaient des trames de 90ms. Mais je ne saurai pas te dire ce qui est le mieux.
    dois-je réaliser toutes les étapes de "ma" méthode (FFT, soustraction, tatouage) dans la même boucle ?
    Je dirai que oui, d'après ce que j'ai vu, le processus est réalisé sur chaque trame.

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    oui j'avais déjà lu le contenu de ton lien. Mais ailleurs j'ai trouvé comme valeur de trame 110ms. Passons sur cette durée qui n'est pas vraiment le coeur de mon problème. Je vais reprendre mon code en continuant ma boucle par la méthode du lien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Son_wm = [];
    for k = 1:N
        Signal_trame = Son_comp((k-1)*Taille_trame + 1:k*Taille_trame);
        Signal_FFT = abs(fftshift(Signal_trame)); % calcul de la fft
        Signal_pw = mean( abs(fft( xcorr(Signal_trame) )) ); % calcul de puissance moyenne sur la trame
        Signal_DCless = Signal_trame - ifft(Signal_FFT(1)); % Signal audio sans sa composante BF
        Signal_tatoue = Signal_DCless + Signal_pw * Texte_comp(k) ; % Tatouage du texte
        Son_wm = [Son_wm ; Signal_tatoue]; % assemblage des trames
    end
    Son_wm = [Son_wm ; Son_comp(N*Taille_trame + 1 : length(Son_comp))]; % ajout de la partie du son non tramée
    Ce code ne donne pas grand chose de bon. J'ai repris un peu bêtement les étapes du lien. Je ne sais pas si je dois moyenné la puissance, comment soustraire la composante basse fréquence (je devrais filtrer normalement, non? et pas faire comme je l'ai fait), ni comment intégrer mon filigrane (à quoi correspond mon facteur d'échelle?)

    merci pour tes réponses en tout cas, Winjerome.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonsoir 7homa5,

    J'ai remarqué certaines choses qui ne vont pas:
    Signal_FFT = abs(fftshift(Signal_trame));
    fftshift ne calcule pas la fft, il ne fait qu'inverser la première et seconde moitié du vecteur résultat de la fft pour une meilleure visualisation.
    Pour la calculer, il faut utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Signal_FFT = abs(fft(Signal_trame));
    Ensuite,
    Signal_pw = mean(abs(fft( xcorr(Signal_trame) )) );
    à remplacer par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Signal_pw = 1/(Taille_trame/2 +1)*sum(Signal_FFT.*Signal_FFT);
    la fonction mean calcule la moyenne du vecteur
    Pour la soustraction de la DC, ne passe pas par l'ifft, fais-le directement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Signal_DCless = Signal_trame - 2*Signal_FFT(1)/Taille_trame
    Puis n'oublie pas le facteur Ks du lien, sans quoi tu auras de très brusques variations.
    Voilà j'espère t'avoir aidé, n'hésite pas si tu as des questions

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup.

    J'ai apporté les corrections proposées (le fftshift était une erreur de recopie, ayant fait un test et ne l'ayant pas retiré). J'obtiens un résultat satisfaisant mais qui peut sûrement être amélioré encore en jouant sur Ks. Pour l'instant, j'ai posé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Ks = xcorr(Signal_trame) / (2 * length(Signal_trame) ); % facteur d'échelle
    Ks = Ks(1:round(length(Ks)/2));
    En fait, j'ai surtout un problème sur mon dernier échantillon de chaque trame maintenant. Si quelqu'un a une idée sur comment corriger cela, je suis preneur.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour 7homa5,

    j'ai surtout un problème sur mon dernier échantillon de chaque trame maintenant
    Quel est ton problème exactement?

Discussions similaires

  1. Code de détection Matlab (traitement d’un signal audio)
    Par Maxime.Robertet dans le forum Signal
    Réponses: 1
    Dernier message: 03/04/2013, 12h01
  2. code java audio
    Par ingenieurasma dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 22/10/2009, 21h23
  3. De la rapidité du code
    Par jfloviou dans le forum Contribuez
    Réponses: 233
    Dernier message: 29/05/2009, 02h17
  4. [ImageMagick] WaterMark empéchant l'affichage du reste du code
    Par mickado dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 18/07/2007, 18h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo