Précédent   Forum des professionnels en informatique > Environnements de développement > MATLAB > Signal
Signal Forum d'entraide sur le traitement du signal en MATLAB
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/01/2012, 21h44   #1
Invité de passage
 
Homme
Inscription : janvier 2012
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Somme (Picardie)

Informations forums :
Inscription : janvier 2012
Messages : 12
Points : 0
Points : 0
Par défaut Explications de code

Bonjour,

est ce que quelqu'un peut me donner une explication du fonctionnement de ce programme
si c'est possible pouvez-vous ajouter des commentaires
(ce programme cree une note de piano mais j'arrive pas a comprendre cette partie du programme
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
for i=1:25 
    y(i,:)=1.5e-4.*Af(i,2).*exp(-3.5.*t)...
    .*heaviside(t).*sin(2.*pi.*f(i).*t);         )

clear
f0=493.88;
f=f0.*(1:30);

%harmonique
Af=493.88*[
      0.8897,    2.0001;
    1.7834,    0.7463;
    2.6808,    1.2558;
    3.5879,    0.9798;
    4.4991,    0.3173;
    5.4244,    0.1693;
    6.3598,    0.2432;
    7.3115,    0.1432;
    8.2915,    0.0108;
    9.2715,    0.0494;
   10.2697,    0.0554;
   11.2902,    0.0431;
   12.3107,    0.0209;
   13.4324,    0.0131;
   14.5339,    0.0322;
   15.6657,    0.0071;
   16.8219,    0.0052;
   18.0165,    0.0010;
   19.2294,    0.0018;
   20.4908,    0.0008;
   21.7867,    0.0012;
   23.0825,    0.0009;
   24.4391,    0.0003;
   25.8565,    0.0003;
   27.2941,    0.0004;
   28.7114,    0.0001;
   30.2705,    0.0001;
   31.6271,    0.0001;
   32.3965,    0.0011;
   33.1862,    0.0006];   
t=0:1/44.1e3:4;
for i=1:25 
    y(i,:)=1.5e-4.*Af(i,2).*exp(-3.5.*t)...
    .*heaviside(t).*sin(2.*pi.*f(i).*t);
                                        

end

Y=sum(y);


subplot(211)
plot(t,Y)
sound(Y,44.1e3)
jmour est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2012, 22h30   #2
Modérateur
 
Inscription : août 2007
Messages : 3 579
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 3 579
Points : 4 406
Points : 4 406
Bonjour,

quelles sont précisément les lignes de code qui te posent problèmes?
__________________
Pour une bonne utilisation des balises code c'est ici!
Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


La nature est un livre écrit en langage mathématique. Galilée.
magelan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2012, 22h43   #3
Invité de passage
 
Homme
Inscription : janvier 2012
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Somme (Picardie)

Informations forums :
Inscription : janvier 2012
Messages : 12
Points : 0
Points : 0
Citation:
Envoyé par magelan Voir le message
Bonjour,

quelles sont précisément les lignes de code qui te posent problèmes?
De la ligne 41 jusqu'à 44
jmour est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2012, 23h00   #4
Modérateur
 
Inscription : août 2007
Messages : 3 579
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 3 579
Points : 4 406
Points : 4 406
Et bien la ligne 41 :
permet de créer un vecteur de valeurs allant de 0 à 4 avec un pas de 1/44.1e3, et les 3 lignes suivantes :
Code :
1
2
3
4
for i=1:25 
    y(i,:)=1.5e-4.*Af(i,2).*exp(-3.5.*t)...
    .*heaviside(t).*sin(2.*pi.*f(i).*t);
end
permettent de calculer la fonction 1.5e-4.*Af.*exp(-3.5.*t).*heaviside(t).*sin(2.*pi.*f(i).*t) pour chaque valeur de Af. Chaque ligne de y correspondra à une valeur de Af et contient les valeurs de la fonction pour toutes les valeurs de t.
__________________
Pour une bonne utilisation des balises code c'est ici!
Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


La nature est un livre écrit en langage mathématique. Galilée.
magelan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2012, 23h30   #5
Modérateur
 
Avatar de Winjerome
 
Homme Jérôme
Inscription : septembre 2009
Messages : 3 598
Détails du profil
Informations personnelles :
Nom : Homme Jérôme
Âge : 24
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : septembre 2009
Messages : 3 598
Points : 6 824
Points : 6 824
Bonjour,

Pour compléter la réponse de magelan, t=0:1/44.1e3:4; créé le vecteur temps d'une durée de 4s avec une fréquence d'échantillonnage de 44.1kHz.
  • Le terme exp(-3.5.*t) permet l'atténuation du signal au fil du temps.
  • Le terme heaviside(t) n'a ici pas grande utilité ici vu que ton vecteur temps t d'entrée est positif. If ne fait que mettre des NaN sur les premières valeurs y(:,1).
  • Le terme sin(2.*pi.*f(i).*t) permet de générer le signal à la fréquence d'harmonique f(i).
  • Le terme Af(i,2) permet de fixer l'amplitude de l'harmonique correspondante.
Tu as alors à la fin de la boucle une harmonique sur chaque ligne y(i,:) de ton tableau y.
Ton signal final Y est la somme de toutes ces harmoniques Y=sum(y);.

Remarque: Tu omets ici 5 harmoniques vu que ta boucle for ne va que jusqu'à 25 au lieu de size(Af,1) = 30
__________________
Débutant en MATLAB? Vous voulez faire une Interface Graphique? Les Tutoriels et la FAQ sont là pour vous aider
Une erreur? FAQ : Messages d'erreur et avertissements
"Ça ne marche pas" n'est pas une réponse acceptable Expliquez clairement votre problème (erreurs, résultats non attendus...).
Citation:
En essayant continuellement on finit par réussir. Donc: plus ça rate, plus on a de chance que ça marche. - Jacques Rouxel
L'expérience, c'est le nom que chacun donne à ses erreurs - Oscar Wilde
Je suis régulièrement sur le chat DVP - Pas de question technique par MP, Merci
Winjerome est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2012, 23h30   #6
Invité de passage
 
Homme
Inscription : janvier 2012
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Somme (Picardie)

Informations forums :
Inscription : janvier 2012
Messages : 12
Points : 0
Points : 0
Citation:
Envoyé par magelan Voir le message
Et bien la ligne 41 :
permet de créer un vecteur de valeurs allant de 0 à 4 avec un pas de 1/44.1e3, et les 3 lignes suivantes :
Code :
1
2
3
4
for i=1:25 
y(i,:)=1.5e-4.*Af(i,2).*exp(-3.5.*t)...
.*heaviside(t).*sin(2.*pi.*f(i).*t);
end
permettent de calculer la fonction 1.5e-4.*Af.*exp(-3.5.*t).*heaviside(t).*sin(2.*pi.*f(i).*t) pour chaque valeur de Af. Chaque ligne de y correspondra à une valeur de Af et contient les valeurs de la fonction pour toutes les valeurs de t.
Merci bien mon amis pour ton aide
jmour est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 10h43   #7
Invité de passage
 
Homme
Inscription : janvier 2012
Messages : 12
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Somme (Picardie)

Informations forums :
Inscription : janvier 2012
Messages : 12
Points : 0
Points : 0
merci mes amis pour votre aide cela m'a été très utile
mais maintenant il faut que j'écrive ce code en c pour pouvoir l'intégrer dans une carte DSP
je suis pas un débutant en langage c mais j'ai vraiment du mal a programmer ce code surtout avec :
la matrice de harmonique ( Af )
t=0:1/44.1e3:4;
heaviside(t)
jmour est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h56.


 
 
 
 
Partenaires

Hébergement Web