]> git.parisson.com Git - cnaq.git/commitdiff
Add Manu's farina method test
authoryomguy <yomguy@5fc3e0e6-29bc-4d03-b52b-c088cb822bde>
Mon, 17 Dec 2007 16:02:37 +0000 (16:02 +0000)
committeryomguy <yomguy@5fc3e0e6-29bc-4d03-b52b-c088cb822bde>
Mon, 17 Dec 2007 16:02:37 +0000 (16:02 +0000)
git-svn-id: http://svn.parisson.org/svn/CNAQ/trunk@142 5fc3e0e6-29bc-4d03-b52b-c088cb822bde

doc/latex/Manuel_CNAQ.pdf
doc/latex/Manuel_CNAQ.tex
tests/farina.m [new file with mode: 0644]

index be18a031ecf5f42d3d4cc84dabb7c5c1301bb73c..648cd75d35fb6603b793352ef44374957113c6a1 100644 (file)
Binary files a/doc/latex/Manuel_CNAQ.pdf and b/doc/latex/Manuel_CNAQ.pdf differ
index d192781cf86522580491b9fdbdc8689b2ff9f240..96f8e8242b17914296308f1b14f620e55785b7f9 100644 (file)
@@ -1,6 +1,7 @@
-\documentclass[pdftex,11pt,a4paper,twoside]{article}
+\documentclass[11pt,a4paper,twoside]{article}
 
 \usepackage{article_profile}
+%\input{article_profile.tex}
 %\graphicspath{{/figures}}
 
 %==================================================================
@@ -57,7 +58,7 @@
 
 CNAQ est un logiciel dédié à la mesure de fonctions de transfert des systèmes électriques ou électrodynamiques. Ecrit en langage Matlab, il permet d'utiliser une carte d'acquisition audio compatible avec la norme ASIO pour générer un signal de type sinus glissant (<< sweep >> ou << chirp >> en anglais), de quantifier la réponse temporelle du système puis d'en déterminer la fonction de transfert. Ce logiciel est développé dans le cadre de la rénovation des modules de travaux pratiques d'acoustique dispensés au CNAM de Paris.\\
 
-A l'avenir (version >= 0.2), la structure d'analyse de CNAQ utilisera la méthode d'Angelo Farina \cite{farina} qui, appliquée dans le domaine numérique, permet d'obtenir des réponses avec un grand nombre d'échantillons, même aux très basses fréquences, tout en suivant les harmoniques créés au cours du glissement en fréquence. Le calcul est en effet basé sur un produit de convolution dont la transformée de Fourier comporte le même nombre de points que le nombre d'échantillons dans le signal mesuré. Outre le fait que cette technique offre une souplesse d'utilisation supplémentaire par rapport aux autres méthodes, MLS par exemple, elle fournit des résolutions fréquentielles très élevés, notamment aux basses fréquences. Elle rend également aisée et rapide la déduction des taux de distortions du système mesuré \cite{muller}.\\
+A l'avenir (version >= 0.2), la structure d'analyse de CNAQ utilisera la méthode d'Angelo Farina \cite{farina} qui, appliquée dans le domaine numérique, permet d'obtenir des réponses avec un grand nombre d'échantillons, même aux très basses fréquences, tout en suivant les harmoniques créés au cours du glissement en fréquence. Le calcul est en effet basé sur un produit de convolution dont la transformée de Fourier comporte le même nombre de points que le nombre d'échantillons dans le signal mesuré. Outre le fait que cette technique offre une souplesse d'utilisation supplémentaire par rapport aux autres méthodes, MLS par exemple, elle fournit des résolutions fréquentielles très élevés, notamment aux basses fréquences. Elle rend également aisée et rapide la déduction des taux de distortions du système mesuré \cite{muller}. Un test (\verb|tests\farina.m|) permet de comparer la méthode Farina à celle du rapport des transformées de Fourier. Il apparaît que la première donne de meilleurs résultats dans le domaine temporel pour évaluer la réponse impulsionnelle alors que la deuxième semble optimum pour la détermination de la réponse fréquentielle.\\
 
 Le logiciel CNAQ offre ainsi une interface interactive pour mesurer et calculer les fonctions de transfert directement dans Matlab. Il s'inspire Il s'inspire entre autres de l'excellent logiciel libre QLoud \cite{qloud} fonctionnant sur système GNU/Linux.
 
@@ -167,10 +168,10 @@ et remplacer les valeurs \verb|device| et \verb|latency| par celles d
  \item Exécuter le fichier CNAQ.m depuis le dossier décompressé de l'application CNAQ, par exemple \verb|C:\CNAQ|. Avant de démarrer, l'application demande de fournir un dossier de travail. Ce dossier peut être vide mais doit exister (le créer dans l'explorateur si nécessaire avec un nom explicite) : il intégrera l'ensemble des fichiers sauvegardés pendant les mesures. Une fenêtre semblable à la figure \ref{cnaq_default} doit alors s'afficher.
 
     \begin{figure}[htbp]
+     \label{cnaq_default}
       \centering
       \includegraphics[width=12cm]{img/cnaq_02}
       \caption{Fenêtre de démarrage par défaut du logiciel CNAQ.}
-      \label{cnaq_default}
     \end{figure}
 
  \item Remplir les champs << Nom d'utilisateur >> et << Commentaires >>.
diff --git a/tests/farina.m b/tests/farina.m
new file mode 100644 (file)
index 0000000..e71d05d
--- /dev/null
@@ -0,0 +1,123 @@
+% Cette routine permet de comparer deux méthodes de traitement
+% des sinus glissants (glissement logarithmique)
+% Le signal d'excitation est généré selon la méthode proposée par Farina
+% les deux méthodes de traitement sont :
+% - Fonction de Transfert 
+% - Déconvolution par filtre inverse
+% Le système de test est un filtre passe-bas (type RC)
+% les paramètres à faire varier sont  :
+% f1 et f2, les fréquences encadrant le signal généré
+% nwin le nombre de points sur lequel on fenêtre le signal (en début et en fin)
+% tmax : la durée du sinus glissant
+
+
+clear all
+close all
+%paramètres à faire varier
+f1=5; %fréquence de départ du sinus glissant (Hz)
+f2=8000; %fréquence d'arrivée du sinus glissant (Hz)
+nwin=400; % somme des nombres de point à fenêtrer en début et fin de signal
+tmax=0.5; %durée du sinus glissant (s)
+
+%Génération du chirp (Farina)
+fs=44100; %fréquence d'échantillonnage (Hz)
+dt=1/fs; %pas temporel
+t=0:dt:tmax; %vecteur temps
+om1=2*pi*f1; %pulsation basse
+om2=2*pi*f2; %pulsation haute
+K=tmax*om1/log(om2/om1);
+L=tmax/log(om2/om1);
+yc=sin(K*(exp(t./L)-1)); %Sinus glissant (Farina)
+
+%fenêtrage du chirp
+win=hanning(nwin);
+siz=length(yc);
+wint=ones(1,siz);
+wint(1:nwin/2)=win(1:nwin/2);
+wint(siz-nwin/2+1:siz)=win(nwin/2+1:nwin);
+y=yc.*wint; %Sinus glissant fenêtré
+% yinv=fliplr(y);
+% co=conv(y,yinv);
+% figure
+% plot(co)
+
+%test sur filtre passe-bas : contruction du signal filtré par méthode
+%récursive
+fc=400; %fréquence de coupuer du filtre
+RC=1/2/pi/fc; 
+alf=dt/(dt+RC);
+yf(1)=y(1);
+for n=2:siz
+    yf(n)=alf*y(n)+(1-alf)*yf(n-1); %Signal filtré
+end
+figure (1)
+plot(t,yf)
+xlabel('Time (s)')
+title('Input signal')
+grid on
+
+%Déconvolution par filtre inverse en temporel (Farina)
+yinv=fliplr(yc);
+fl=logspace(log10(f1),log10(f2),siz);
+yinv=yinv./fl;
+yinvf=yinv.*wint;
+IR=conv(yf,yinvf);
+figure(2)
+subplot(2,1,1)
+plot(IR)
+grid on
+xlabel('samples')
+title('Impulse response')
+ylabel('Deconvolution')
+sizi=length(IR);
+FR=fft(IR);
+FR=FR(1:sizi/2);
+fconv=0:fs/sizi:fs/2;
+fconv=fconv(1:sizi/2);
+LFR=20*log10(abs(FR));
+autoc=conv(yc,yinv);
+yeff=sqrt(sum(autoc.^2)*fs/2/(f2-f1));
+% yeff=sizi/2*(f2-f1)/fs
+% yeff=1
+sf=20*log10(yeff);
+LFR=LFR-sf;
+figure(3)
+subplot(2,1,1)
+% title('Frequency response (dB)')
+semilogx(fconv,LFR)
+title('Frequency response (dB)')
+axis([10 20000 -40 +5])
+grid on
+hold on
+FRT=abs(1./(1+j*2*pi*fconv*RC));
+LFRT=20*log10(FRT);
+semilogx(fconv,LFRT,'r')
+xlabel('Frequency (Hz)')
+legend('Processed','Theory',3)
+
+%Méthode de la fonction de transfert
+specy=fft(y);
+specyf=fft(yf);
+TF=specyf./specy;
+IR2=fftshift(ifft(TF));
+figure(2)
+subplot(2,1,2)
+plot(IR2)
+grid on
+xlabel('samples')
+ylabel('Inverse Transfer Function')
+TF2=TF(1:siz/2);
+f=0:fs/siz:fs/2;
+f=f(1:siz/2);
+LFR2=20*log10(abs(TF2));
+figure(3)
+subplot(2,1,2)
+semilogx(f,LFR2)
+axis([10 20000 -40 +5])
+grid on
+hold on 
+FRT2=abs(1./(1+j*2*pi*f*RC));
+LFRT2=20*log10(FRT2);
+semilogx(f,LFRT2,'r')
+xlabel('Frequency (Hz)')
+legend('Processed','Theory',3)