]> git.parisson.com Git - cnaq.git/commitdiff
* Add Load button and function
authoryomguy <yomguy@5fc3e0e6-29bc-4d03-b52b-c088cb822bde>
Sat, 12 Jan 2008 11:42:50 +0000 (11:42 +0000)
committeryomguy <yomguy@5fc3e0e6-29bc-4d03-b52b-c088cb822bde>
Sat, 12 Jan 2008 11:42:50 +0000 (11:42 +0000)
* Fix ID detect bug
* Arrange measurement window

git-svn-id: http://svn.parisson.org/svn/CNAQ/trunk@144 5fc3e0e6-29bc-4d03-b52b-c088cb822bde

CNAQ.fig
CNAQ.m
doc/latex/Manuel_CNAQ.pdf
doc/latex/Manuel_CNAQ.tex
doc/latex/img/logo_cnaq.png

index ae846479993e5c48e0353702818e2c13d1b8764e..26618f35c9115af090a936992c4e4588c5df10ca 100644 (file)
Binary files a/CNAQ.fig and b/CNAQ.fig differ
diff --git a/CNAQ.m b/CNAQ.m
index bbfdf090437379d319d7837fca4c5aa653a627f4..a7f96812c5b2260c2ba82b4fb55ba296663dbd8a 100644 (file)
--- a/CNAQ.m
+++ b/CNAQ.m
@@ -34,7 +34,7 @@ function varargout = CNAQ(varargin)
 \r
 %  Author: Guillaume Pellerin <guillaume.pellerin@cnam.fr>\r
 \r
-% Last Modified by GUIDE v2.5 07-Nov-2007 18:26:57\r
+% Last Modified by GUIDE v2.5 12-Jan-2008 11:35:34\r
 \r
 %      CNAQ, by itself, creates a new CNAQ or raises the existing\r
 %      singleton*.\r
@@ -208,6 +208,16 @@ function f_s = get_fs(handles)
     elseif fs_ind == 3\r
         f_s = 96000;\r
     end\r
+    \r
+function set_fs(handles, f_s)\r
+    if f_s == 44100\r
+        fs_ind = 1;\r
+    elseif f_s == 48000\r
+        fs_ind = 2;\r
+    elseif f_s == 96000\r
+        fs_ind = 3;\r
+    end\r
+    set(handles.f_s,'Value',fs_ind);\r
 \r
 function voices_out = get_voices_out(handles)\r
     vo_ind = get(handles.voices_out,'Value');\r
@@ -241,7 +251,14 @@ function nbits = get_nbits(handles)
         nbits = 24;\r
     end\r
 \r
-\r
+function set_nbits(handles, nbits)\r
+    if nbits == 16\r
+        nb_ind = 1;\r
+    elseif nbits == 24\r
+        nb_ind = 2;\r
+    end\r
+    set(handles.nbits,'Value', nb_ind);\r
+    \r
 %============================================\r
 % DONNEES\r
 %============================================\r
@@ -596,32 +613,10 @@ function mes_on_Callback(hObject, eventdata, handles, device)
     set(handles.ID,'UserData',sig_mes);\r
     set(handles.id_title,'UserData',sig_exc);\r
     set(handles.mes_on,'UserData',f);\r
-    \r
-    % Get infos\r
-    username = get(handles.username,'String');\r
-    comment = get(handles.comment,'String');\r
-    id = get(handles.ID,'String');\r
-    \r
-    % Compute excitation spectrum\r
-    [rep_imp_exc, spec_exc] = fonc_trans(f, sig_exc, sig_exc);\r
-    len_spec_exc = length(spec_exc);\r
-    spec_exc = spec_exc(1:len_spec_exc/2);\r
-    \r
-    % Compute all Ris and specs\r
-    for i=1:n_col_sig_mes\r
-        voice = num2str(i);\r
-        [rep_imp_mes, spec_mes] = fonc_trans(f, sig_exc, sig_mes(:,i));\r
-        len_spec_mes = length(spec_mes);    \r
-        spec_mes = spec_mes(1:len_spec_mes/2);\r
-        % Plot results\r
-        f_lin = [0:f_s/len_spec_mes:f_s/2];\r
-        f_lin = f_lin(1:length(f_lin)-1);\r
-        plot_mes(t, f_lin, f_s, f_min, f_max, sig_exc, sig_mes(:,i), rep_imp_mes, spec_mes, spec_exc, id, voice, username, comment, i);\r
-    end\r
-    \r
-    set(handles.close_button,'UserData',f_lin');\r
     set(handles.plot,'UserData',t);\r
-\r
+    \r
+    % Plot\r
+    plot_Callback(hObject, eventdata, handles)\r
     \r
 % Close all figures\r
 % --- Executes on button press in close_button.\r
@@ -631,7 +626,7 @@ function close_button_Callback(hObject, eventdata, handles)
 % handles    structure with handles and user data (see GUIDATA)\r
      close all;\r
         \r
-\r
+     \r
 % --- Executes on button press in plot.\r
 function plot_Callback(hObject, eventdata, handles)\r
 % hObject    handle to plot (see GCBO)\r
@@ -672,6 +667,9 @@ function plot_Callback(hObject, eventdata, handles)
         plot_mes(t, f_lin, f_s, f_min, f_max, sig_exc, sig_mes(:,i), rep_imp_mes, spec_mes, spec_exc, id, voice, username, comment, i);\r
     end\r
 \r
+    set(handles.close_button,'UserData',f_lin');\r
+    set(handles.plot,'UserData',t);\r
+    \r
     \r
 % SAVE all data in a mat file \r
 function save_button_Callback(hObject, eventdata, handles)  \r
@@ -686,6 +684,8 @@ function save_button_Callback(hObject, eventdata, handles)
     f_lin = get(handles.close_button,'UserData');\r
     f_s = get_fs(handles);\r
     nbits = get_nbits(handles);\r
+    f = get(handles.mes_on,'UserData');\r
+    t = get(handles.plot,'UserData');\r
     f_min = str2double(get(handles.f_gen_min,'String'));\r
     f_max = str2double(get(handles.f_gen_max,'String'));\r
     time = get(handles.time_gen,'Value');\r
@@ -706,4 +706,37 @@ function save_button_Callback(hObject, eventdata, handles)
     % Increment ID\r
     increment_id(handles);\r
     \r
-   
\ No newline at end of file
+% --- Executes on button press in load.\r
+function load_Callback(hObject, eventdata, handless)\r
+% hObject    handle to load (see GCBO)\r
+% eventdata  reserved - to be defined in a future version of MATLAB\r
+% handles    structure with handles and user data (see GUIDATA)\r
+\r
+    [filename, pathname, filterindex] = uigetfile('*.mat', 'Pick a saved MAT file');\r
+    load([pathname filename]);\r
+    \r
+    % Set data\r
+    set(handless.username,'String',username);\r
+    set(handless.home_dir_box,'String',home_dir);\r
+    set(handless.comment,'String',comment);\r
+    set(handless.id_title,'UserData',sig_exc);\r
+    set(handless.ID,'UserData',sig_mes);\r
+    set(handless.mes_on,'UserData',f_log);\r
+    set(handless.close_button,'UserData',f_lin);\r
+    set_fs(handless, f_s);\r
+    set_nbits(handless, nbits);\r
+    set(handless.mes_on,'UserData', f);\r
+    set(handless.plot,'UserData', t);\r
+    set(handless.f_gen_min,'String', num2str(f_min));\r
+    set(handless.f_gen_max,'String', num2str(f_max));\r
+    set(handless.f_gen,'Value', f);\r
+    set(handles.freq_value,'String',num2str(f));\r
+    set(handless.time_gen,'Value', time);\r
+    set(handles.time_value,'String',num2str(time));\r
+    set(handless.gain_in,'Value', gain_in);\r
+    set(handless.gain_out,'Value', gain_out);\r
+    set(handless.gain_in_value,'String',num2str(gain_in));\r
+    set(handless.gain_out_value,'String',num2str(gain_out));\r
+    \r
+    \r
+    
\ No newline at end of file
index 648cd75d35fb6603b793352ef44374957113c6a1..7aa14eeaa88cef999f6d69c44334543134a679bc 100644 (file)
Binary files a/doc/latex/Manuel_CNAQ.pdf and b/doc/latex/Manuel_CNAQ.pdf differ
index 96f8e8242b17914296308f1b14f620e55785b7f9..d345814b1a2ae93220ab1a557eefa5e833c1bc74 100644 (file)
@@ -58,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}. 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.\\
+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 optimale 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.
 
index 1d60cae301d995f87d4736c220661fd6908fa5d8..cc6dc815616e9d0443aa0e1b682938803791e0c5 100644 (file)
Binary files a/doc/latex/img/logo_cnaq.png and b/doc/latex/img/logo_cnaq.png differ