Programmer un NCO sous MATLAB
Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

Programmer un NCO sous MATLAB



  1. #1
    Shagohod27

    Programmer un NCO sous MATLAB


    ------

    Bonjour,

    je cherche à programmer basiquement un Numerically Controlled oscillator :

    Voilà les étapes :

    1) j'ai un signal S1 en entrée dont je veux mesurer continuellement la phase S1 = sin(w1t+p1(t))

    2) Le NCO mixe ce S1 à un signal S2 issu de sa boucle S2 = cos(w2t + p2(t))
    On a donc S3 = S1 x S2

    3) ce signal est filtré pour ne récupérer que les basses fréquences donc en gros S3filtre = sin((w1-w2)t+p1(t)-p2(t))

    4) on va considérer que w1=w2 et que p1(t)-p2(t) = Dp(t) donc S3filtre = sin(Dp(t))

    5) cette différence de phase Dp(t) est utilisée pour corriger le S2(t) dans une boucle de retroaction donc typiquement le nouveau p2(t+1) = p2(t) + Dp(t) soit S2(t+1) = cos(w2t + p2(t+1))

    6) à chaque boucle le Dp(t) calculé est enregistré dans un tableau

    Voilà ce que j'ai essayé de faire et qui ne marche pas :

    CANenv1 est le signal S1 dont je veux mesurer la phase

    Code:
    [b,a]=butter(8,1500/(fph/2),'low');
    DeltaOmega = 0;
    dt = tt(2)-tt(1);
    
    for ii = 1:LL-1; 
    
        Mixenv1(ii+1) = CANenv1(ii+1) * slo1(ii+1);            % on mixe les signaux (étape 2)
        filt1(ii+1) = filter(b,a,Mixenv1(ii+1));                      % on filtre pour supprimer freq élevées (étape 3)
        omega(ii+1) = asin(filt1(ii+1));                               % on prend l'arcsin pour avoir la composante dans le sinus (pas du tout sur qu'on fait comme ça)
        DeltaOmega(ii+1) = omega(ii+1) - omega(ii);           % on calcule la différence par rapport au loop d'avant
        DeltaPhase(ii+1) = integral(DeltaOmega(ii+1),0,dt); % la phase est l'intégrale de la différence de fréquence
        slo1(ii+1) = sin(DeltaPhase(ii+1));                           % on calcule la nouvelle valeur de p2(t)
    
    end
    l'erreur qu'il me donne est celle là :

    "Error using integral (line 82)
    First input argument must be a function handle."

    donc le soucis c'est que l'intégrale est apparemment mal utilisée, cependant de manière générale je ne suis pas du tout sur que la méthode globale soit correcte ….

    -----

  2. #2
    Shagohod27

    Re : Programmer un NCO sous MATLAB

    Up help please

  3. #3
    Shagohod27

    Re : Programmer un NCO sous MATLAB

    up :/
    dites si y a besoin que je précise un truc

Discussions similaires

  1. programmer cette équation en pièce jointe sous Matlab
    Par normalise dans le forum Programmation et langages, Algorithmique
    Réponses: 11
    Dernier message: 27/03/2014, 08h50
  2. programmer sous Matlab un pid flou
    Par invite55a63a52 dans le forum Électronique
    Réponses: 0
    Dernier message: 04/05/2012, 12h32
  3. programmer sous MATLAB
    Par invite0fe432ab dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 12/04/2008, 18h40
  4. programmer recurrence matlab
    Par invitee98002ab dans le forum Mathématiques du supérieur
    Réponses: 3
    Dernier message: 27/06/2007, 15h36
  5. Aidez moi à programmer ça en Matlab
    Par invite7b453137 dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 06/01/2006, 06h30