Bonjour,
je veux savoir comment faire une fft par bloc d'un fichier son.
merci d'avance de votre aide
-----
Bonjour,
je veux savoir comment faire une fft par bloc d'un fichier son.
merci d'avance de votre aide
ta demande est plutot TRES vague !
fft = ??
federation finlandaise de teleski ??
fft en matlab :transformée de fourier
Salut,
FFT veut dire Fast Fourier Transform, c'est l'algorithme utilise pour calculer la transformée de Fourier en discret.
Par contre, je ne sais pas ce que c'est qu'une "FFT par bloc".
je veux la faire non pas sur tout le signal mais sur un seul bloc
Je suis pas doué dans le traitement du signal...
Mais voilà un point de départ
http://www.codeproject.com/cpp/howtofft.asp
Tu as quoi comme données de départ ? Tu utilises quoi comme langage ?
En l'occurrence, une fft s'effectue sur un bloc de deux à une certaine puissance d'échantillons. Une solution pour arriver à ce nombre si on y est pas exactement est de remplir les échantillons manquants par des 0 (padding).
Dernière modification par b@z66 ; 11/04/2007 à 08h51.
La curiosité est un très beau défaut.
bonjour,
les données de départ que j'ai sont: un fichier son de 5s.
j'utilise matlab pour programmer
bonjour
j'ai pas bien compris.est ce que tu peux clarifier un peu ce que tu as dis.
salut
Pour lire un fichier wav sous matlab: wavread
pour faire une fft sous matlab: fft
ca donne quelque chose comme ca:
[s, Fs] = wavread ('mon_fichier.wav');
n = indice du premier echantillon du bloc;
m = Indice du dernier echantillon du bloc;
S = fft (s (n:m));
Attention, il faut que ton fichier soit mono. sinon récupère uniquement la voie qui t'intéresse.
Tu a aussi la fonction specgram (help specgram pour plus de détail) pour faire de la fft à court terme.
Je sais bien cela.
mais je veux présenter la fft entre -fe/2 et fe/2 pour un seul bloc.
en d'autre terme: S=fft(f,20*log10(s(n:m));
le problème c'est comment intialiser f?
Comme il n'y a pas d'information temporelle dans s, il n'y a pas d'information fréquentielle dans S = fft (s)... MATLAB c'est du calcul numérique... Et il est vrai que la fft de matlab (comme beaucoup d'autre implémentation de la fft d'ailleurs) retourne les fréquences positives ou nulles avant les frequences strictement négatives.
En résumé:
[s, Fs] = wavread ("monfichier.wav") te donne un vecteur s et la fréquence d'échantillonnage Fs, tu peux alors calculer ton support temporel t = (0:length (s)-1) / Fs.
S = fft (s(n:m)) est bien le spectre de ss entre les echantillons n et m, les indices sont alors appelés canaux frequentiels et son support frequentiel f est un peu plus compliqué:
fpos = Fs * (0lenght (S)-1)/2)/(lenght (S)-1) et
fneg = -fpos(end-1:-1:1) alors f = [fpos, fneg]
SdB = 10 * log10 (S.*conj(S)) est le spectre de puissance (en dB)
(c'est pas le signal qu'il faut passer en dB)
si tu veux avoir les fréquence négatives avant les fréquences positives tu remplace S par fftshift(S) et f=[fneg, fpos]
Si tu veux afficher la puissance spectral de ton signal avec sur l'axe des absisses les fréquences
plot (f, Sdb)
commme tu aurais fait plot(t, s) pour avoir une absisse en secondes et non en indice d'échantillons.
bon soir
merci beaucoup pour ton aide
cela a résolu le problème
bonjour,
s'il vous plait est ce que quelqu'un peut m'aider à calculer la fft d'un signal wave en matlab.
le problème que j'ai exécuté la commande suivante
y=fft(wavred(monfichier.wav))
j'ai trouvé que le résultat de la commande est sur un fichier énorme 400 MO!!
comment je peux modifier mes paramètres pour obtenir un taille moindre et comment je peux modifier les paramètres de sortie(car chaque ligne comporte seulement 2 valeurs)?
aidez moi s'il vous plait