Bonjour,

J'ai besoin de générer une sinus dont la fréquence évolue dans le temps en suivant une consigne.

J'ai donc utilisé comme exemple le programme suivant qui devrait me générer une sinus de 1000 points allant progressivement de 10KHz à 7.5KHz (Fe = 100KHz)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
Fe=100000; %Fréquence d'échantillonnage
F1=10000; % Fréquence initiale
F2=7500;   % Fréquence finale
Nb=1000;   % Nombre de points
Fc=F1:(F2-F1)/(Nb-1):F2;   % Vecteur de taille 1000 contenant la consigne de variation de fréquence
X=sin(2*pi*Fc.*(1:Nb)/Fe); %Construction du signal
Constat : j'obtiens bien une sinusoïde à fréquence décroissante mais en 1000 points elle passe de 10KHz à 5KHz au lieu de 7.5KHz !!!
En changeant la fréquence finale j'obtiens toujours une décroissance 2 fois plus rapide que la consigne (ex : 10KHz à 9KHz devient de 10KHz à 8KHz)

Est-ce que quelqu'un saurait m'expliquer pourquoi ?

Merci


REPONSE : Entre temps je viens de trouver ma réponse alors plutôt que d'effacer mon message je vous la transmets au cas où ça vous intéresse.

La manière de construire X ci-dessus est mauvaise car le nième point de X ne dépend pas de la phase du point n-1. La continuité temporelle n'est pas respectée. Par exemple si Fc décroit plus vite que (1:Nb)/Fe la phase peut même remonter dans le temps, ce qui n'aurait aucun sens physique.

Pour réaliser correctement il faut incrémenter la phase point par point comme dans le programme ci-dessous.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
X=zeros(1,nb);
Phase=zeros(1,Nb);
for n=2:Nb
   Phase(n)=Phase(n-1)+2*pi*Fc(n)/Fe;
   X(n)=sin(Phase(n));
end
Merci de votre attention !
a+