Tom's Guide > Forum > Programmation > programme en matlab pour karaoke

programme en matlab pour karaoke

Forum Programmation : programme en matlab pour karaoke

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

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

Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

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

Répondre à manda13

personne n'a la moindre idée?

même une idée générale serait la bienvenue...

Répondre à manda13

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

Répondre à cha-ali

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

Répondre à manda13

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.

Répondre à Anonyme
Tom's Guide > Forum > Programmation > programme en matlab pour karaoke
Aller à :

Il y a 2082 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens