Se connecter / S'enregistrer
Votre question

programme en matlab pour karaoke

Tags :
  • Programme
  • Programmation
Dernière réponse : dans Programmation
29 Avril 2007 18:08:17

Bonjour à tous ,
je dois écrire un programme en matlab pour séparer la musique et paroles d'une chanson (principe du karaoke). J'ai trouvé quelques petits trucs, et j'ai même essayer de faire un code mais j'avoue que je suis un peu perdue (je n'ai que 3 mois de connaissance au niveau matlab).
Voici comment est fait mon programme:

-TFCT composée de trois etapes :

- decoupage de notre signal en trame de longueur L avec pourcentage de recouvrement p
- multiplication des T trames par une fenêtre de pondération wa
- calcul de la transformée de fourier discréte (TFD) sur N points de cacune des trames

-filtrage de wiener

-puis TFCT-1

J'aimerais savoir si c'est exact ou si je suis loin du compte et par la même occasion si vous avez des codes...

Merci à tous

Autres pages sur : programme matlab karaoke

3 Mai 2007 10:32:01

voici mon programme :

le fichier principal :
clear all;
close all;


[ y, fs, nbits ] = wavread( 'Blue20s.wav' );

hist(y(:,2),1000);
title('gaussienne distribution');

Ts = 1/fs
t=0:Ts:0.5;


left = y(:,1)';
right = y(:,2)';

figure;
subplot(2,1,1);
plot( t, left(1:length(t)) );
title( 'left ear' );
subplot(2,1,2);
plot( t, right(1:length(t)) );
title( 'right ear' );


%La s´eparation de sources s’effectue dans le domaine frequentiel. On represente les
%signaux par leur TFCT dont le calcul peut se decomposer en 3 etapes:

%decoupage avec un recouvrement de 1024 points soit 50% des points de la FFT

fs = 1/Ts;
N=2048; % nombre de points pris pour les fonctions à étuder
t=[1:N]/fs;

%parametre fct
NFFT = 2048; %nombre de points pris pour la FFT
fe = 8000; %frequence d'echantillonnage du signal
NBR = 1024; % nombre de points de recouvrement
fenetre = hamming(NFFT); % fenetre de recouvrement


s =[left' right']; %signal a etudie


t=1:length(s);
figure;
subplot(211);
plot(t, s);
title('concatenation de left et right');
subplot(212);
plot(fenetre);
figure;
i = 1;
IndInf = 1;
IndSup = NFFT;

while IndSup<length(s)
ss = s(IndInf : IndSup);
ss = ss.*fenetre'; %multiplication des T trames par une fenetre de ponderation
X(i,:)  = abs( fft(ss) ); %calcul de la Transformee de Fourier Discrete (TFD) sur N points de chacune
%d’elles
IndInf = IndInf + NFFT - NBR;
IndSup = IndSup + NFFT - NBR;
i=i+1;
end

%surf(X(:, 1: NFFT/2));
[L, c] = size(X);
mesh( [1:L], [1:NFFT/2]*fe/NFFT, X(:, 1:NFFT/2)');
title('representation de la TFCT ');

wiener(y,4,'carre',0.01,0.5);

while IndSup<length(s)
ss = y(IndInf : IndSup);
ss = ss.*fenetre'; %multiplication des T trames par une fenetre de ponderation
X(i,:)  = abs( ifft(ss) ); %calcul de la Transformee de Fourier Discrete (TFD) sur N points de chacune
%d’elles
IndInf = IndInf + NFFT - NBR;
IndSup = IndSup + NFFT - NBR;
i=i+1;
end
wavwrite(X,'Blue20s.wav' );

et la voici le fichier wiener.m qui decrit la fonction wiener que j'appelle

function wiener(y,sbox,type,sigma,alpha);


[L,c]=size(y); % Taille de l'image


% Convolution
box = zeros (L,c);

switch type
case 'carre'
box(1:sbox,1:sbox) = 1;
end

box = box / sum(box(:) );
Yy = fft2(y);
Hh = fft2(box,L,c);
Cc = Yy.*Hh;
co = real(ifft2(Cc));

% Calcul du bruit
sigma = sqrt(sigma);
noisy = (co + sigma*randn(size(co)) + 0);
noisy = max(0,min(noisy,1));
Gg = fft2(noisy);

% Filtre inverse
%Ffinv=Gg./([abs(Hh)<1e-1].*1e-1+Hh);
%finv=im2uint8(abs(ifft2(Ffinv)));

% Filtre de Wiener
H2=abs(Hh).^2;
Ffwin=H2.*Gg./([(H2+sigma).*Hh<1e-14].*1e-14+((H2+sigma).*Hh));
fwin=abs(ifft(Ffwin));

figure;
plot(fwin);
title('filtre de wiener');

Merci
5 Mai 2007 15:35:59

personne n'a la moindre idée?

même une idée générale serait la bienvenue...
Contenus similaires
12 Mai 2007 09:27:09

slt
moi aussi je ss un debutant et j'aimerai bien que tu m'aide pcq moi j'arrive meme pas a charger une chanson sur matlab apparement toi t'as deppassé set etape j'ai utilisé wavread mais je sais pas ou je colle mon fichier wav et c koi ""[ y, fs, nbits ] = wavread( 'Blue20s.wav' )""

fs ,nbits et y merci pour ton aide d'avance
14 Mai 2007 16:51:43

salut
bon déja tu peut regarder ce que donne la fonction wavread ds matlab ça te donne pas mal de renseignements (tu peut aussi taper demo puis ds search "wavread")
ensuite il faut que ton fichier .wav soit ds le même dossier que ton programme (ou peut être écire le chemin mais bon :S)
fs c la fréquence du signal, tu peut l'afficher après en tapant fs sans ";"
y c le nom de ton signal
nbits c le nombre de points pris

voila bon courage
Anonyme
1 Janvier 2009 17:06:41

salut , SVP je veux chercher un programme de matlab qui réalise une fonctin gaussiènne et me permet de simuler un signal ECG (ELECTROCARDIOGRAMME ) d'un sujet sain et d'autre malade et merci.
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS