Algorithme traitement du signal
Bonjour à tous,
J'ai un travail à réaliser sur matlab en traitement du signal. Je dois écrire un algorithme pour comparer les fréquences de deux sons audio purs. Il doit renvoyer un résultat binaire : 1 si les deux fréquences sont les mêmes, à une marge d’erreur près, 0 sinon. On me donne seulement les informations suivantes :
- les fréquences sont dans l’intervalle [130Hz,4000Hz]
- Fe = 16KHz.
Je dois générer aléatoirement les autres paramètres des signaux (amplitude, fréquence et phase).
Le premier signal a obligatoirement une phase nulle, le deuxième doit en avoir une non nulle.
Pour l'instant, je sais qu'un son pur est de la forme : A*cos(2*pi*f*t + phi)). L'amplitude doit être strictement positive. Les deux signaux doivent être de même durée, et la durée doit être égale à alpha/f1, avec alpha >0.
J'ai pensé à écrire ceci :
Code:
1 2 3 4 5 6 7 8 9 10
| Fe =16000;
Te = 1/Fe;
f1 = randi([130,4000]);
f2 = randi([130,4000]);
t = 0:Te:D;
phi1 = 0;
x1 = A1*cos(2*pi*f1*t + phi1);
x2 = A2*cos(2*pi*f2*t+phi2);
plot(t, x1);
plot(t,x2); |
Cependant, pour la phase2 et l'amplitude, je ne sais pas comment les générer aléatoirement, parce qu'on ne m'a pas donné d'intervalle, je dois le déterminer moi même. Comment savoir ? Je ne sais pas non plus comment déterminer alpha.
Pour la deuxième partie de cet algorithme, je dois uniquement avoir accès aux signaux générés et aux paramètres deja fixés. On ne connait ni l'amplitude, ni la phase, ni la durée, et encore moins la fréquence, puisque c'est ce qui nous intéresse. On peut les estimer si besoin.
J'ai pensé à m'inspirer de l'intercorrélation, mais celle-ci sert à comparer deux signaux, et pas leur fréquence.
Pouvez-vous me guider sur la manière de procéder s'il vous plait?
Je précise que je n'ai pas encore appris à utiliser Fourier, donc au cas ou il serait utile, je ne peux pas m'en servir...
Merci d'avance pour votre aide.