From 351aec677366238398324f2d68d8c2c09bdf2f5b Mon Sep 17 00:00:00 2001 From: yomguy Date: Tue, 8 Apr 2008 16:19:40 +0000 Subject: [PATCH] * Global voice -> channel * Add analysis spec : type, method, domain git-svn-id: http://svn.parisson.org/svn/CNAQ/trunk@178 5fc3e0e6-29bc-4d03-b52b-c088cb822bde --- CNAQ.fig | Bin 13775 -> 13859 bytes CNAQ.m | 58 +++++++++++++++++++++-- tools/generator.m | 9 ++-- tools/get_fs.m | 12 ++--- tools/get_nbits.m | 6 +-- tools/get_ri_spec.m | 6 +-- tools/monitor.m | 9 ++-- tools/plot_main.m | 14 +++--- tools/plot_mes.m | 109 +++++++++++++++++++++++--------------------- tools/save_mes.m | 4 +- 10 files changed, 142 insertions(+), 85 deletions(-) diff --git a/CNAQ.fig b/CNAQ.fig index d4f963f0bec572c7cd3714afea84a0d6cfc1baa2..45880fbb02095d2cdc400e96f1a47c221c239c73 100644 GIT binary patch delta 5593 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 delta 5508 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 -% Last Modified by GUIDE v2.5 08-Apr-2008 16:23:22 +% Last Modified by GUIDE v2.5 08-Apr-2008 18:19:43 % CNAQ, by itself, creates a new CNAQ or raises the existing % singleton*. @@ -169,7 +169,9 @@ set(handles.sig_type,'String','Sinus|Chirp|White noise|Pink noise'); set(handles.channels_in,'String','1|1 2|1 2 3|1 2 3 4|1 2 3 4 5 6 7 8'); set(handles.channels_out,'String','1|1 2|1 2 3|1 2 3 4|1 2 3 4 5 6 7 8'); -set(handles.mes_type,'String','Transfert function|Impulse response'); +set(handles.analysis_type,'String','Default'); +set(handles.analysis_method,'String','Transfert function|Deconvolution'); +set(handles.analysis_domain,'String','Frequency|Time'); set(handles.in_on_off,'UserData',device); set(handles.save_button,'UserData',latency); @@ -357,9 +359,9 @@ function gen_on_off_Callback(hObject, eventdata, handles) % MEASUREMENT %============================================ -function mes_type_Callback(hObject, eventdata, handles) +function analysis_method_Callback(hObject, eventdata, handles) -function mes_type_CreateFcn(hObject, eventdata, handles) +function analysis_method_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end @@ -421,3 +423,51 @@ function load_Callback(hObject, eventdata, handless) % set(handles.time_value,'String',num2str(time)); + + +% --- Executes on selection change in analysis_type. +function analysis_type_Callback(hObject, eventdata, handles) +% hObject handle to analysis_type (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: contents = get(hObject,'String') returns analysis_type contents as cell array +% contents{get(hObject,'Value')} returns selected item from analysis_type + + +% --- Executes during object creation, after setting all properties. +function analysis_type_CreateFcn(hObject, eventdata, handles) +% hObject handle to analysis_type (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: popupmenu controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + +% --- Executes on selection change in analysis_domain. +function analysis_domain_Callback(hObject, eventdata, handles) +% hObject handle to analysis_domain (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: contents = get(hObject,'String') returns analysis_domain contents as cell array +% contents{get(hObject,'Value')} returns selected item from analysis_domain + + +% --- Executes during object creation, after setting all properties. +function analysis_domain_CreateFcn(hObject, eventdata, handles) +% hObject handle to analysis_domain (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: popupmenu controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + + diff --git a/tools/generator.m b/tools/generator.m index f2165a3..af3801b 100644 --- a/tools/generator.m +++ b/tools/generator.m @@ -9,9 +9,8 @@ function generator(handles) f_s = get_fs(fs_id); nbits = get_nbits(nb_id); time = get(handles.time_gen,'Value'); - voices_out = get_voices_out(handles); - %voice_first = voices_out(1); - %voice_last = voices_out(length(voices_out)); + ch_out_id = get(handles.channels_out,'Value'); + channels_out = get_channels_in(ch_out_id); gain_out = get(handles.gain_out,'Value'); gain_out = 10^(gain_out/20); t = [0:1/f_s:time]; @@ -32,13 +31,13 @@ function generator(handles) end sig_out = []; - for i=1:length(voices_out) + for i=1:length(channels_out) sig_out(:,i) = sig'; end % Matlab way (needs Data Acquisition Toolbox) % ao = analogoutput('winsound', 0); -% addchannel(ao, voices_out); +% addchannel(ao, channels_out); % set(ao, 'StandardSampleRates', 'Off'); % set(ao, 'SampleRate', f_s); % diff --git a/tools/get_fs.m b/tools/get_fs.m index 41815d4..e8be091 100644 --- a/tools/get_fs.m +++ b/tools/get_fs.m @@ -1,14 +1,14 @@ -function f_s = get_fs(fs_ind) +function f_s = get_fs(fs_id) - if fs_ind == 1 + if fs_id == 1 f_s = 44100; - elseif fs_ind == 2 + elseif fs_id == 2 f_s = 48000; - elseif fs_ind == 3 + elseif fs_id == 3 f_s = 88200; - elseif fs_ind == 4 + elseif fs_id == 4 f_s = 96000; - elseif fs_ind == 5 + elseif fs_id == 5 f_s = 192000; end diff --git a/tools/get_nbits.m b/tools/get_nbits.m index 8fae0f8..2b83943 100644 --- a/tools/get_nbits.m +++ b/tools/get_nbits.m @@ -1,8 +1,8 @@ -function nbits = get_nbits(nb_ind) +function nbits = get_nbits(nb_id) - if nb_ind == 1 + if nb_id == 1 nbits = 16; - elseif nb_ind == 2 + elseif nb_id == 2 nbits = 24; end diff --git a/tools/get_ri_spec.m b/tools/get_ri_spec.m index 21efd8a..eff6c73 100644 --- a/tools/get_ri_spec.m +++ b/tools/get_ri_spec.m @@ -1,10 +1,10 @@ -function [ri, spec] = get_spec_ri(f, sig_exc, sig_mes, f_s, mes_type) +function [ri, spec] = get_spec_ri(f, sig_exc, sig_mes, f_s, method) % Return the impulse response and the spectrum compute with the given method - if mes_type == 1 + if method == 1 % Frequency method [ri, spec] = fonc_trans(f, sig_exc, sig_mes, f_s); - elseif mes_type == 2 + elseif method == 2 % Temporal method [ri, spec] = RI_FT(f, sig_exc, sig_mes, f_s); end diff --git a/tools/monitor.m b/tools/monitor.m index 0160c59..e19cee6 100644 --- a/tools/monitor.m +++ b/tools/monitor.m @@ -13,14 +13,15 @@ function monitor(handles) freq = 2*(f_max-f_min)/buffer; f = [0:f_s/buffer:f_s/2]; f = f(1:length(f)-1); - voices_in = get_voices_in(handles); - voice_first = voices_in(1); - voice_last = voices_in(length(voices_in)); + ch_in_id = get(handles.channels_in,'Value'); + channels_in = get_channels_in(ch_in_id); + channel_first = channels_in(1); + channel_last = channels_in(length(channels_in)); while get(handles.in_on_off,'Value') == 1 % TIME_GEN %sig_in = wavrecord(buffer,f_s,2); - sig_in = pa_wavrecord(voice_first, voice_last, buffer, f_s, device, 'asio'); + sig_in = pa_wavrecord(channel_first, channel_last, buffer, f_s, device, 'asio'); sig_in = sig_in(:,1); axes(handles.plot_in_temp); cla; diff --git a/tools/plot_main.m b/tools/plot_main.m index 38b3d43..5350094 100644 --- a/tools/plot_main.m +++ b/tools/plot_main.m @@ -18,23 +18,25 @@ function plot_main(handles) username = get(handles.username,'String'); comment = get(handles.comment,'String'); id = get(handles.ID,'String'); - mes_type = get(handles.mes_type,'Value'); - + type = get(handles.analysis_type,'Value'); + method = get(handles.analysis_method,'Value'); + domain = get(handles.analysis_domain,'Value'); + % Compute excitation spectrum - [rep_imp_exc, spec_exc] = get_ri_spec(f, sig_exc, sig_exc, f_s, mes_type); + [rep_imp_exc, spec_exc] = get_ri_spec(f, sig_exc, sig_exc, f_s, method); len_spec_exc = length(spec_exc); spec_exc = spec_exc(1:len_spec_exc/2); % Compute all Ris and specs for i=1:n_col_sig_mes - voice = num2str(i); - [rep_imp_mes, spec_mes] = get_ri_spec(f, sig_exc, sig_mes(:,i), f_s, mes_type); + channel = num2str(i); + [rep_imp_mes, spec_mes] = get_ri_spec(f, sig_exc, sig_mes(:,i), f_s, method); len_spec_mes = length(spec_mes); spec_mes = spec_mes(1:len_spec_mes/2); % Plot results f_lin = [0:f_s/len_spec_mes:f_s/2]; f_lin = f_lin(1:length(f_lin)-1); - 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); + plot_mes(t, f_lin, f_s, f_min, f_max, sig_exc, sig_mes(:,i), rep_imp_mes, spec_mes, spec_exc, id, channel, username, comment, i, domain); end set(handles.close_button,'UserData',f_lin'); diff --git a/tools/plot_mes.m b/tools/plot_mes.m index 06d3ce2..77e2e7a 100644 --- a/tools/plot_mes.m +++ b/tools/plot_mes.m @@ -1,57 +1,62 @@ -function plot_mes(t, f, f_s, f_min, f_max, sig_exc, sig_mes, rep_imp_mes, spec_mes, spec_exc, id, channel, group, comment, i); +function plot_mes(t, f, f_s, f_min, f_max, sig_exc, sig_mes, rep_imp_mes, spec_mes, spec_exc, id, channel, group, comment, i, domain); len_spec_mes = length(spec_mes); %spec = spec(1:len_spec); -% Time -figure; -subplot(2,1,1); -plot(t, sig_mes); -%semilogx(t, sig_mes); -axis([0 t(length(t)) min(sig_mes)-0.01 max(sig_mes)+0.01]); -%axis([1 t(length(t)) min(sig_mes)-0.01 max(sig_mes)+0.01]); -xlabel('Time (s)'); -ylabel('Amplitude'); -title(['Measured temporal signal (group: ' group ', id: ' id ', channel : ' channel ')']); -grid on; - -subplot(2,1,2); -len_ri = length(rep_imp_mes); -t_ri = [(-len_ri)/(2*f_s):1/f_s:(len_ri)/(2*f_s)]; -%t_ri = [0:1/f_s:len_ri/f_s]; -t_ri = t_ri(1:length(t_ri)-1); -plot(t_ri,rep_imp_mes); -axis([-t_ri(len_ri) t_ri(len_ri) min(rep_imp_mes)-0.01 max(rep_imp_mes)+0.01]); -xlabel('Time (s)'); -ylabel('Amplitude'); -title(['Measured impulse response (group: ' group ', id: ' id ', channel : ' channel ')']); -grid on; - - -% Freq -f_max_list = find(f > f_max); -f_max_ind = f_max_list(1); -f_min_list = find(f < f_min); -f_min_ind = f_min_list(length(f_min_list)); - -figure; -subplot(2,1,1); -spec_mes_log = 10*log10(abs(spec_mes)); -semilogx(f, spec_mes_log); -axis([f_min f_max min(spec_mes_log(f_min_ind:f_max_ind-1000))-6 max(spec_mes_log(f_min_ind:f_max_ind))+6]); -xlabel('Frequency (Hz)'); -ylabel('Amplitude (dB)'); -title(['Modulus of the transfert function (group: ' group ', id: ' id ', channel : ' channel ')']); -grid on; - -subplot(2,1,2); -angle_exc = angle(spec_exc); -angle_mes = angle(spec_mes); -ang = unwrap(angle_mes - angle_exc) + 2*pi; -semilogx(f, ang); -axis([f_min f_max min(ang(f_min_ind:f_max_ind)) max(ang(f_min_ind:f_max_ind))]); -grid on; -xlabel('Fréquence (Hz)'); -ylabel('Phase (rad)'); -title(['Phasis of the transfert function (group: ' group ', id: ' id ', channel : ' channel ')']); +if domain == 1 + % Freq + f_max_list = find(f > f_max); + f_max_ind = f_max_list(1); + f_min_list = find(f < f_min); + f_min_ind = f_min_list(length(f_min_list)); + + figure; + subplot(2,1,1); + spec_mes_log = 10*log10(abs(spec_mes)); + semilogx(f, spec_mes_log); + axis([f_min f_max min(spec_mes_log(f_min_ind:f_max_ind-1000))-6 max(spec_mes_log(f_min_ind:f_max_ind))+6]); + xlabel('Frequency (Hz)'); + ylabel('Amplitude (dB)'); + title(['Modulus of the transfert function (group: ' group ', id: ' id ', channel : ' channel ')']); + grid on; + + subplot(2,1,2); + angle_exc = angle(spec_exc); + angle_mes = angle(spec_mes); + ang = unwrap(angle_mes - angle_exc) + 2*pi; + semilogx(f, ang); + axis([f_min f_max min(ang(f_min_ind:f_max_ind)) max(ang(f_min_ind:f_max_ind))]); + grid on; + xlabel('Fréquence (Hz)'); + ylabel('Phase (rad)'); + title(['Phasis of the transfert function (group: ' group ', id: ' id ', channel : ' channel ')']); + +elseif domain == 2 + % Time + figure; + subplot(2,1,1); + plot(t, sig_mes); + %semilogx(t, sig_mes); + axis([0 t(length(t)) min(sig_mes)-0.01 max(sig_mes)+0.01]); + %axis([1 t(length(t)) min(sig_mes)-0.01 max(sig_mes)+0.01]); + xlabel('Time (s)'); + ylabel('Amplitude'); + title(['Measured temporal signal (group: ' group ', id: ' id ', channel : ' channel ')']); + grid on; + + subplot(2,1,2); + len_ri = length(rep_imp_mes); + t_ri = [(-len_ri)/(2*f_s):1/f_s:(len_ri)/(2*f_s)]; + %t_ri = [0:1/f_s:len_ri/f_s]; + t_ri = t_ri(1:length(t_ri)-1); + plot(t_ri,rep_imp_mes); + axis([-t_ri(len_ri) t_ri(len_ri) min(rep_imp_mes)-0.01 max(rep_imp_mes)+0.01]); + xlabel('Time (s)'); + ylabel('Amplitude'); + title(['Measured impulse response (group: ' group ', id: ' id ', channel : ' channel ')']); + grid on; + +end + + diff --git a/tools/save_mes.m b/tools/save_mes.m index 2df08d5..8ea5952 100644 --- a/tools/save_mes.m +++ b/tools/save_mes.m @@ -18,9 +18,9 @@ function save_mes(handles) f_min = str2double(get(handles.f_gen_min,'String')); f_max = str2double(get(handles.f_gen_max,'String')); time = get(handles.time_gen,'Value'); - voices_in = get_voices_in(handles); + channels_in = get_channels_in(handles); gain_in = get(handles.gain_in,'Value'); - voices_out = get_voices_out(handles); + channels_out = get_channels_out(handles); gain_out = get(handles.gain_out,'Value'); % Save it -- 2.39.5