annotate userProgramsTim/speechmanipulation.m @ 38:c2204b18f4a2 tip

End nov big change
author Ray Meddis <rmeddis@essex.ac.uk>
date Mon, 28 Nov 2011 13:34:28 +0000
parents
children
rev   line source
rmeddis@38 1 function varargout = speechmanipulation(varargin)
rmeddis@38 2 % SPEECHMANIPULATION MATLAB code for speechmanipulation.fig
rmeddis@38 3 % SPEECHMANIPULATION, by itself, creates a new SPEECHMANIPULATION or raises the existing
rmeddis@38 4 % singleton*.
rmeddis@38 5 %
rmeddis@38 6 % H = SPEECHMANIPULATION returns the handle to a new SPEECHMANIPULATION or the handle to
rmeddis@38 7 % the existing singleton*.
rmeddis@38 8 %
rmeddis@38 9 % SPEECHMANIPULATION('CALLBACK',hObject,eventData,handles,...) calls the local
rmeddis@38 10 % function named CALLBACK in SPEECHMANIPULATION.M with the given input arguments.
rmeddis@38 11 %
rmeddis@38 12 % SPEECHMANIPULATION('Property','Value',...) creates a new SPEECHMANIPULATION or raises the
rmeddis@38 13 % existing singleton*. Starting from the left, property value pairs are
rmeddis@38 14 % applied to the GUI before speechmanipulation_OpeningFcn gets called. An
rmeddis@38 15 % unrecognized property name or invalid value makes property application
rmeddis@38 16 % stop. All inputs are passed to speechmanipulation_OpeningFcn via varargin.
rmeddis@38 17 %
rmeddis@38 18 % *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
rmeddis@38 19 % instance to run (singleton)".
rmeddis@38 20 %
rmeddis@38 21 % See also: GUIDE, GUIDATA, GUIHANDLES
rmeddis@38 22
rmeddis@38 23 % Edit the above text to modify the response to help speechmanipulation
rmeddis@38 24
rmeddis@38 25 % Last Modified by GUIDE v2.5 05-Oct-2011 11:21:58
rmeddis@38 26
rmeddis@38 27 % Begin initialization code - DO NOT EDIT
rmeddis@38 28 gui_Singleton = 1;
rmeddis@38 29 gui_State = struct('gui_Name', mfilename, ...
rmeddis@38 30 'gui_Singleton', gui_Singleton, ...
rmeddis@38 31 'gui_OpeningFcn', @speechmanipulation_OpeningFcn, ...
rmeddis@38 32 'gui_OutputFcn', @speechmanipulation_OutputFcn, ...
rmeddis@38 33 'gui_LayoutFcn', [] , ...
rmeddis@38 34 'gui_Callback', []);
rmeddis@38 35 if nargin && ischar(varargin{1})
rmeddis@38 36 gui_State.gui_Callback = str2func(varargin{1});
rmeddis@38 37 end
rmeddis@38 38
rmeddis@38 39 if nargout
rmeddis@38 40 [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
rmeddis@38 41 else
rmeddis@38 42 gui_mainfcn(gui_State, varargin{:});
rmeddis@38 43 end
rmeddis@38 44 % End initialization code - DO NOT EDIT
rmeddis@38 45
rmeddis@38 46
rmeddis@38 47 % --- Executes just before speechmanipulation is made visible.
rmeddis@38 48 function speechmanipulation_OpeningFcn(hObject, eventdata, handles, varargin)
rmeddis@38 49 % This function has no output args, see OutputFcn.
rmeddis@38 50 % hObject handle to figure
rmeddis@38 51 % eventdata reserved - to be defined in a future version of MATLAB
rmeddis@38 52 % handles structure with handles and user data (see GUIDATA)
rmeddis@38 53 % varargin command line arguments to speechmanipulation (see VARARGIN)
rmeddis@38 54 global wavfilescell;
rmeddis@38 55 global rateaxeshandle; %handle to axis6 is needed, if radiobuttons12 and 13 change
rmeddis@38 56
rmeddis@38 57
rmeddis@38 58 % Choose default command line output for speechmanipulation
rmeddis@38 59 handles.output = hObject;
rmeddis@38 60
rmeddis@38 61 % Update handles structure
rmeddis@38 62 guidata(hObject, handles);
rmeddis@38 63
rmeddis@38 64 % UIWAIT makes speechmanipulation wait for user response (see UIRESUME)
rmeddis@38 65 % uiwait(handles.figure1);
rmeddis@38 66 wavfiles = dir(['..' filesep 'wavFileStore' filesep '*.wav']);
rmeddis@38 67 for iCounter = 1:length(wavfiles)
rmeddis@38 68 wavfilescell{iCounter} = wavfiles(iCounter).name;
rmeddis@38 69 end
rmeddis@38 70 set(handles.popupmenu1,'String',wavfilescell);
rmeddis@38 71 set(handles.popupmenu2,'String',wavfilescell);
rmeddis@38 72 set(handles.uipanel8,'SelectionChangeFcn',@radiobuttonselected);
rmeddis@38 73 rateaxeshandle = handles.axes6;
rmeddis@38 74
rmeddis@38 75 % --- Outputs from this function are returned to the command line.
rmeddis@38 76 function varargout = speechmanipulation_OutputFcn(hObject, eventdata, handles)
rmeddis@38 77 % varargout cell array for returning output args (see VARARGOUT);
rmeddis@38 78 % hObject handle to figure
rmeddis@38 79 % eventdata reserved - to be defined in a future version of MATLAB
rmeddis@38 80 % handles structure with handles and user data (see GUIDATA)
rmeddis@38 81
rmeddis@38 82 % Get default command line output from handles structure
rmeddis@38 83 varargout{1} = handles.output;
rmeddis@38 84
rmeddis@38 85 function edit1_Callback(hObject, eventdata, handles)
rmeddis@38 86 function edit2_Callback(hObject, eventdata, handles)
rmeddis@38 87 function edit3_Callback(hObject, eventdata, handles)
rmeddis@38 88 function edit4_Callback(hObject, eventdata, handles)
rmeddis@38 89 function edit5_Callback(hObject, eventdata, handles)
rmeddis@38 90 function edit6_Callback(hObject, eventdata, handles)
rmeddis@38 91 function edit7_Callback(hObject, eventdata, handles)
rmeddis@38 92 function edit8_Callback(hObject, eventdata, handles)
rmeddis@38 93 function edit9_Callback(hObject, eventdata, handles)
rmeddis@38 94 function edit10_Callback(hObject, eventdata, handles)
rmeddis@38 95 function edit11_Callback(hObject, eventdata, handles)
rmeddis@38 96 function edit12_Callback(hObject, eventdata, handles)
rmeddis@38 97
rmeddis@38 98
rmeddis@38 99 % --- Executes on selection change in popupmenu1.
rmeddis@38 100 function popupmenu1_Callback(hObject, eventdata, handles)
rmeddis@38 101 % hObject handle to popupmenu1 (see GCBO)
rmeddis@38 102 % eventdata reserved - to be defined in a future version of MATLAB
rmeddis@38 103 % handles structure with handles and user data (see GUIDATA)
rmeddis@38 104
rmeddis@38 105 % Hints: contents = cellstr(get(hObject,'String')) returns popupmenu1 contents as cell array
rmeddis@38 106 % contents{get(hObject,'Value')} returns selected item from popupmenu1
rmeddis@38 107 %% CHOOSE AND LOAD WAVEFORM
rmeddis@38 108 global wavfilescell
rmeddis@38 109 global originalsignal
rmeddis@38 110 global actualsignal
rmeddis@38 111
rmeddis@38 112 %get the number from the popupmenu
rmeddis@38 113 selectedfileno = get(handles.popupmenu1,'Value');
rmeddis@38 114
rmeddis@38 115 %load it
rmeddis@38 116 [waveform,sfreq] = wavread(['..' filesep 'wavFileStore' filesep wavfilescell{selectedfileno}]);
rmeddis@38 117
rmeddis@38 118 %if it is from OLLO then cut it
rmeddis@38 119 if regexp(wavfilescell{selectedfileno}, 'S[0-9]*[A-Z]_L[0-9]*_V[0-9]_M[0-9]_N[0-9]_CS0.wav') %pattern for OLLO-files
rmeddis@38 120 waveform = cutsignal(waveform,sfreq,'a_a');
rmeddis@38 121 end
rmeddis@38 122
rmeddis@38 123 %store it in global variables
rmeddis@38 124 actualsignal.waveform = waveform;
rmeddis@38 125 actualsignal.sfreq = sfreq;
rmeddis@38 126 originalsignal.waveform = waveform;
rmeddis@38 127 originalsignal.sfreq = sfreq;
rmeddis@38 128
rmeddis@38 129 %plot it
rmeddis@38 130 multipleplot(actualsignal,handles);
rmeddis@38 131
rmeddis@38 132 % --- Executes during object creation, after setting all properties.
rmeddis@38 133 function popupmenu1_CreateFcn(hObject, eventdata, handles)
rmeddis@38 134 % hObject handle to popupmenu1 (see GCBO)
rmeddis@38 135 % eventdata reserved - to be defined in a future version of MATLAB
rmeddis@38 136 % handles empty - handles not created until after all CreateFcns called
rmeddis@38 137
rmeddis@38 138 % Hint: popupmenu controls usually have a white background on Windows.
rmeddis@38 139 % See ISPC and COMPUTER.
rmeddis@38 140 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
rmeddis@38 141 set(hObject,'BackgroundColor','white');
rmeddis@38 142 end
rmeddis@38 143
rmeddis@38 144
rmeddis@38 145 % --- Executes on button press in pushbutton1.
rmeddis@38 146 function pushbutton1_Callback(hObject, eventdata, handles)
rmeddis@38 147 % hObject handle to pushbutton1 (see GCBO)
rmeddis@38 148 % eventdata reserved - to be defined in a future version of MATLAB
rmeddis@38 149 % handles structure with handles and user data (see GUIDATA)
rmeddis@38 150 %% LOAD WAVEFORM
rmeddis@38 151 global wavfilescell
rmeddis@38 152 global originalsignal
rmeddis@38 153 global actualsignal
rmeddis@38 154
rmeddis@38 155 %get the number from the popupmenu
rmeddis@38 156 selectedfileno = get(handles.popupmenu1,'Value');
rmeddis@38 157
rmeddis@38 158 %load it
rmeddis@38 159 [waveform,sfreq] = wavread(['..' filesep 'wavFileStore' filesep wavfilescell{selectedfileno}]);
rmeddis@38 160
rmeddis@38 161 %if it is from OLLO then cut it
rmeddis@38 162 if regexp(wavfilescell{selectedfileno}, 'S[0-9]*[A-Z]_L[0-9]*_V[0-9]_M[0-9]_N[0-9]_CS0.wav') %pattern for OLLO-files
rmeddis@38 163 waveform = cutsignal(waveform,sfreq,'a_a');
rmeddis@38 164 end
rmeddis@38 165
rmeddis@38 166 %store it in global variables
rmeddis@38 167 actualsignal.waveform = waveform;
rmeddis@38 168 actualsignal.sfreq = sfreq;
rmeddis@38 169 originalsignal.waveform = waveform;
rmeddis@38 170 originalsignal.sfreq = sfreq;
rmeddis@38 171
rmeddis@38 172 %plot it
rmeddis@38 173 multipleplot(actualsignal,handles)
rmeddis@38 174
rmeddis@38 175
rmeddis@38 176 % --- Executes during object creation, after setting all properties.
rmeddis@38 177 function edit1_CreateFcn(hObject, eventdata, handles)
rmeddis@38 178 % hObject handle to edit1 (see GCBO)
rmeddis@38 179 % eventdata reserved - to be defined in a future version of MATLAB
rmeddis@38 180 % handles empty - handles not created until after all CreateFcns called
rmeddis@38 181
rmeddis@38 182 % Hint: edit controls usually have a white background on Windows.
rmeddis@38 183 % See ISPC and COMPUTER.
rmeddis@38 184 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
rmeddis@38 185 set(hObject,'BackgroundColor','white');
rmeddis@38 186 end
rmeddis@38 187
rmeddis@38 188
rmeddis@38 189 % --- Executes on button press in pushbutton2.
rmeddis@38 190 function pushbutton2_Callback(hObject, eventdata, handles)
rmeddis@38 191 % hObject handle to pushbutton2 (see GCBO)
rmeddis@38 192 % eventdata reserved - to be defined in a future version of MATLAB
rmeddis@38 193 % handles structure with handles and user data (see GUIDATA)
rmeddis@38 194 %% PLAY THE ACTUAL (MANIPULATED) SIGNAL
rmeddis@38 195 global actualsignal
rmeddis@38 196 global toplay
rmeddis@38 197
rmeddis@38 198 toplay = audioplayer(actualsignal.waveform,actualsignal.sfreq);
rmeddis@38 199 play(toplay);
rmeddis@38 200
rmeddis@38 201
rmeddis@38 202 % --- Executes on button press in pushbutton3.
rmeddis@38 203 function pushbutton3_Callback(hObject, eventdata, handles)
rmeddis@38 204 % hObject handle to pushbutton3 (see GCBO)
rmeddis@38 205 % eventdata reserved - to be defined in a future version of MATLAB
rmeddis@38 206 % handles structure with handles and user data (see GUIDATA)
rmeddis@38 207
rmeddis@38 208 %% MANIPULATE SIGNAL
rmeddis@38 209 global wavfilescell
rmeddis@38 210 global originalsignal
rmeddis@38 211 global actualsignal
rmeddis@38 212
rmeddis@38 213 actualsignal = originalsignal; %reset
rmeddis@38 214
rmeddis@38 215 %% speed factor change
rmeddis@38 216 speedfactor = str2num(get(handles.edit1,'String'));
rmeddis@38 217 newfakesfreq=actualsignal.sfreq*speedfactor;
rmeddis@38 218 if speedfactor == 1
rmeddis@38 219 else
rmeddis@38 220 actualsignal.waveform = resample(actualsignal.waveform,actualsignal.sfreq,newfakesfreq);
rmeddis@38 221 end
rmeddis@38 222
rmeddis@38 223 %% low and high pass filter (butterworth)
rmeddis@38 224 % get the desired filter from radio buttons
rmeddis@38 225 radiofilterhandles=get(handles.uipanel2,'Children');
rmeddis@38 226 for iCounter = 1:length(radiofilterhandles)
rmeddis@38 227 if get(radiofilterhandles(iCounter),'Value') == 1
rmeddis@38 228 filtertype = get(radiofilterhandles(iCounter),'String');
rmeddis@38 229 end
rmeddis@38 230 end
rmeddis@38 231 % read parameters
rmeddis@38 232 tmp = get(handles.edit3,'String');
rmeddis@38 233 cutofffreq=str2num(tmp{1});
rmeddis@38 234 tmp = get(handles.edit4,'String');
rmeddis@38 235 filterorder=str2num(tmp{1});
rmeddis@38 236 %do the filter calculations
rmeddis@38 237 switch filtertype
rmeddis@38 238 case 'none'
rmeddis@38 239 case 'High pass'
rmeddis@38 240 if isempty(cutofffreq) || isempty(filterorder)
rmeddis@38 241 error('Please specify cutoff frequency and/or filter order')
rmeddis@38 242 else
rmeddis@38 243 [a,b] = butter(filterorder,cutofffreq*2/actualsignal.sfreq,'high');
rmeddis@38 244 actualsignal.waveform=filter(a,b,actualsignal.waveform);
rmeddis@38 245 end
rmeddis@38 246 case 'Low pass'
rmeddis@38 247 if isempty(cutofffreq)|| isempty(filterorder)
rmeddis@38 248 error('Please specify cutoff frequency')
rmeddis@38 249 else
rmeddis@38 250 [a,b] = butter(filterorder,cutofffreq*2/actualsignal.sfreq,'low');
rmeddis@38 251 actualsignal.waveform=filter(a,b,actualsignal.waveform);
rmeddis@38 252 end
rmeddis@38 253 end
rmeddis@38 254
rmeddis@38 255 %additive noise
rmeddis@38 256 % get the desired filter from radio buttons
rmeddis@38 257 radionoisehandles=get(handles.uipanel4,'Children');
rmeddis@38 258 for iCounter = 1:length(radionoisehandles)
rmeddis@38 259 if get(radionoisehandles(iCounter),'Value') == 1
rmeddis@38 260 noisetype = get(radionoisehandles(iCounter),'String');
rmeddis@38 261 end
rmeddis@38 262 end
rmeddis@38 263 % read parameters
rmeddis@38 264 tmp = get(handles.edit5,'String');
rmeddis@38 265 snr=str2num(tmp{1});
rmeddis@38 266 %do the noise calculations
rmeddis@38 267 switch noisetype
rmeddis@38 268 case 'none'
rmeddis@38 269 case 'White noise'
rmeddis@38 270 if isempty(snr)
rmeddis@38 271 error('Please specify SNR')
rmeddis@38 272 else
rmeddis@38 273 whitenoise = rand(length(actualsignal.waveform),1)-0.5;
rmeddis@38 274 %set level
rmeddis@38 275 levelsignal = 20*log10(sqrt(mean(actualsignal.waveform.^2)));
rmeddis@38 276 levelnoise = levelsignal-snr;
rmeddis@38 277 whitenoise = whitenoise./sqrt(mean(whitenoise.^2)).*10^(levelnoise/20);
rmeddis@38 278 %20*log10(sqrt(mean(whitenoise.^2)))
rmeddis@38 279 actualsignal.waveform=actualsignal.waveform+whitenoise;
rmeddis@38 280 end
rmeddis@38 281 case 'From file'
rmeddis@38 282 if isempty(snr)
rmeddis@38 283 error('Please specify SNR')
rmeddis@38 284 else
rmeddis@38 285 selectedfileno = get(handles.popupmenu2,'Value');
rmeddis@38 286
rmeddis@38 287 [noisewaveform,noisesfreq] = wavread(['..' filesep 'wavFileStore' filesep wavfilescell{selectedfileno}]);
rmeddis@38 288 if noisesfreq == actualsignal.sfreq
rmeddis@38 289 else
rmeddis@38 290 noisewaveform = resample(noisewaveform,actualsignal.sfreq,noisesfreq);
rmeddis@38 291 noisesfreq = actualsignal.sfreq;
rmeddis@38 292 end
rmeddis@38 293 if length(noisewaveform) < length(actualsignal.waveform)
rmeddis@38 294 warning('Noise waveform too short. Noise is looped without fading at the endings!');
rmeddis@38 295 noisewaveform = repmat(noisewaveform, ceil(length(actualsignal.waveform)/length(noisewaveform)),1);
rmeddis@38 296 end
rmeddis@38 297 noisewaveform=noisewaveform(1:length(actualsignal.waveform));
rmeddis@38 298 %set level
rmeddis@38 299 levelsignal = 20*log10(sqrt(mean(actualsignal.waveform.^2)));
rmeddis@38 300 levelnoise = levelsignal-snr;
rmeddis@38 301 noisewaveform = noisewaveform./sqrt(mean(noisewaveform.^2)).*10^(levelnoise/20);
rmeddis@38 302 %20*log10(sqrt(mean(noisewaveform.^2)))
rmeddis@38 303 %finally add the two signals
rmeddis@38 304 actualsignal.waveform = actualsignal.waveform + noisewaveform;
rmeddis@38 305 end
rmeddis@38 306 end
rmeddis@38 307
rmeddis@38 308 %plot the resulting manipulated waveform
rmeddis@38 309 multipleplot(actualsignal,handles);
rmeddis@38 310
rmeddis@38 311 % --- Executes during object creation, after setting all properties.
rmeddis@38 312 function edit3_CreateFcn(hObject, eventdata, handles)
rmeddis@38 313 % hObject handle to edit3 (see GCBO)
rmeddis@38 314 % eventdata reserved - to be defined in a future version of MATLAB
rmeddis@38 315 % handles empty - handles not created until after all CreateFcns called
rmeddis@38 316
rmeddis@38 317 % Hint: edit controls usually have a white background on Windows.
rmeddis@38 318 % See ISPC and COMPUTER.
rmeddis@38 319 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
rmeddis@38 320 set(hObject,'BackgroundColor','white');
rmeddis@38 321 end
rmeddis@38 322
rmeddis@38 323
rmeddis@38 324 % --- Executes during object creation, after setting all properties.
rmeddis@38 325 function edit4_CreateFcn(hObject, eventdata, handles)
rmeddis@38 326 % hObject handle to edit4 (see GCBO)
rmeddis@38 327 % eventdata reserved - to be defined in a future version of MATLAB
rmeddis@38 328 % handles empty - handles not created until after all CreateFcns called
rmeddis@38 329
rmeddis@38 330 % Hint: edit controls usually have a white background on Windows.
rmeddis@38 331 % See ISPC and COMPUTER.
rmeddis@38 332 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
rmeddis@38 333 set(hObject,'BackgroundColor','white');
rmeddis@38 334 end
rmeddis@38 335
rmeddis@38 336
rmeddis@38 337 % --- Executes during object creation, after setting all properties.
rmeddis@38 338 function edit5_CreateFcn(hObject, eventdata, handles)
rmeddis@38 339 % hObject handle to edit5 (see GCBO)
rmeddis@38 340 % eventdata reserved - to be defined in a future version of MATLAB
rmeddis@38 341 % handles empty - handles not created until after all CreateFcns called
rmeddis@38 342
rmeddis@38 343 % Hint: edit controls usually have a white background on Windows.
rmeddis@38 344 % See ISPC and COMPUTER.
rmeddis@38 345 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
rmeddis@38 346 set(hObject,'BackgroundColor','white');
rmeddis@38 347 end
rmeddis@38 348
rmeddis@38 349
rmeddis@38 350 % --- Executes during object creation, after setting all properties.
rmeddis@38 351 function popupmenu2_CreateFcn(hObject, eventdata, handles)
rmeddis@38 352 % hObject handle to popupmenu2 (see GCBO)
rmeddis@38 353 % eventdata reserved - to be defined in a future version of MATLAB
rmeddis@38 354 % handles empty - handles not created until after all CreateFcns called
rmeddis@38 355
rmeddis@38 356 % Hint: popupmenu controls usually have a white background on Windows.
rmeddis@38 357 % See ISPC and COMPUTER.
rmeddis@38 358 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
rmeddis@38 359 set(hObject,'BackgroundColor','white');
rmeddis@38 360 end
rmeddis@38 361
rmeddis@38 362
rmeddis@38 363 % --- Executes on button press in pushbutton4.
rmeddis@38 364 function pushbutton4_Callback(hObject, eventdata, handles)
rmeddis@38 365 % hObject handle to pushbutton4 (see GCBO)
rmeddis@38 366 % eventdata reserved - to be defined in a future version of MATLAB
rmeddis@38 367 % handles structure with handles and user data (see GUIDATA)
rmeddis@38 368 %% PLAY THE ORIGINAL WAVEFORM
rmeddis@38 369 global originalsignal
rmeddis@38 370 global toplay
rmeddis@38 371 toplay = audioplayer(originalsignal.waveform,originalsignal.sfreq);
rmeddis@38 372 play(toplay)
rmeddis@38 373
rmeddis@38 374
rmeddis@38 375 % --- Executes on button press in pushbutton5.
rmeddis@38 376 function pushbutton5_Callback(hObject, eventdata, handles)
rmeddis@38 377 % hObject handle to pushbutton5 (see GCBO)
rmeddis@38 378 % eventdata reserved - to be defined in a future version of MATLAB
rmeddis@38 379 % handles structure with handles and user data (see GUIDATA)
rmeddis@38 380 global toplay
rmeddis@38 381 stop(toplay);
rmeddis@38 382
rmeddis@38 383
rmeddis@38 384 function edit6_Callback(hObject, eventdata, handles)
rmeddis@38 385 % hObject handle to edit6 (see GCBO)
rmeddis@38 386 % eventdata reserved - to be defined in a future version of MATLAB
rmeddis@38 387 % handles structure with handles and user data (see GUIDATA)
rmeddis@38 388
rmeddis@38 389 % Hints: get(hObject,'String') returns contents of edit6 as text
rmeddis@38 390 % str2double(get(hObject,'String')) returns contents of edit6 as a double
rmeddis@38 391
rmeddis@38 392
rmeddis@38 393 % --- Executes during object creation, after setting all properties.
rmeddis@38 394 function edit6_CreateFcn(hObject, eventdata, handles)
rmeddis@38 395 % hObject handle to edit6 (see GCBO)
rmeddis@38 396 % eventdata reserved - to be defined in a future version of MATLAB
rmeddis@38 397 % handles empty - handles not created until after all CreateFcns called
rmeddis@38 398
rmeddis@38 399 % Hint: edit controls usually have a white background on Windows.
rmeddis@38 400 % See ISPC and COMPUTER.
rmeddis@38 401 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
rmeddis@38 402 set(hObject,'BackgroundColor','white');
rmeddis@38 403 end
rmeddis@38 404
rmeddis@38 405 % --- Executes during object creation, after setting all properties.
rmeddis@38 406 function edit7_CreateFcn(hObject, eventdata, handles)
rmeddis@38 407 % hObject handle to edit7 (see GCBO)
rmeddis@38 408 % eventdata reserved - to be defined in a future version of MATLAB
rmeddis@38 409 % handles empty - handles not created until after all CreateFcns called
rmeddis@38 410
rmeddis@38 411 % Hint: edit controls usually have a white background on Windows.
rmeddis@38 412 % See ISPC and COMPUTER.
rmeddis@38 413 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
rmeddis@38 414 set(hObject,'BackgroundColor','white');
rmeddis@38 415 end
rmeddis@38 416
rmeddis@38 417
rmeddis@38 418 % --- Executes during object creation, after setting all properties.
rmeddis@38 419 function edit8_CreateFcn(hObject, eventdata, handles)
rmeddis@38 420 % hObject handle to edit8 (see GCBO)
rmeddis@38 421 % eventdata reserved - to be defined in a future version of MATLAB
rmeddis@38 422 % handles empty - handles not created until after all CreateFcns called
rmeddis@38 423
rmeddis@38 424 % Hint: edit controls usually have a white background on Windows.
rmeddis@38 425 % See ISPC and COMPUTER.
rmeddis@38 426 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
rmeddis@38 427 set(hObject,'BackgroundColor','white');
rmeddis@38 428 end
rmeddis@38 429
rmeddis@38 430
rmeddis@38 431 % --- Executes on button press in pushbutton6.
rmeddis@38 432 function pushbutton6_Callback(hObject, eventdata, handles)
rmeddis@38 433 % hObject handle to pushbutton6 (see GCBO)
rmeddis@38 434 % eventdata reserved - to be defined in a future version of MATLAB
rmeddis@38 435 % handles structure with handles and user data (see GUIDATA)
rmeddis@38 436
rmeddis@38 437 %% CALCULATE MAP 1.14 auditory nerve probability output
rmeddis@38 438 addpath(['..' filesep 'MAP']);
rmeddis@38 439 addpath(['..' filesep 'utilities']);
rmeddis@38 440 global actualsignal
rmeddis@38 441 global AN_HSRoutput
rmeddis@38 442
rmeddis@38 443 tmp = get(handles.edit6,'String');
rmeddis@38 444 level4MAP=str2num(tmp);
rmeddis@38 445 if isempty(level4MAP)
rmeddis@38 446 error('Please specify level');
rmeddis@38 447 end
rmeddis@38 448
rmeddis@38 449 tmp = get(handles.edit7,'String');
rmeddis@38 450 parameterfile=tmp;
rmeddis@38 451 if isempty(parameterfile)
rmeddis@38 452 error('Please specify parameter file');
rmeddis@38 453 end
rmeddis@38 454
rmeddis@38 455 % identify model parameter changes if any
rmeddis@38 456 paramChanges=get(handles.edit8,'string');
rmeddis@38 457 if ~strcmp(paramChanges, ';'), paramChanges=[paramChanges ';']; end
rmeddis@38 458 eval(paramChanges);
rmeddis@38 459
rmeddis@38 460 %set level
rmeddis@38 461 actualsignal.waveform = actualsignal.waveform./sqrt(mean(actualsignal.waveform.^2)).*10^(-(94-level4MAP)/20);
rmeddis@38 462 %20*log10(sqrt(mean(actualsignal.waveform.^2))/20e-6) %reference pressure: 20uPa
rmeddis@38 463
rmeddis@38 464 MAP1_14(actualsignal.waveform,actualsignal.sfreq,-1,parameterfile, ...
rmeddis@38 465 'probability',paramChanges);
rmeddis@38 466 global ANprobRateOutput savedBFlist
rmeddis@38 467
rmeddis@38 468 %take only the HSR fibers
rmeddis@38 469 AN_HSRoutput = ANprobRateOutput(size(ANprobRateOutput)/2+1:end,:);
rmeddis@38 470
rmeddis@38 471 %plot the auditory nerve firing probability as line plot
rmeddis@38 472 start_time = size(AN_HSRoutput,2)/2/actualsignal.sfreq-0.025; %start time to plot in s
rmeddis@38 473 end_time = start_time+0.05; %plot 50ms
rmeddis@38 474 plotIFRAN(AN_HSRoutput,start_time,end_time,actualsignal.sfreq,savedBFlist,handles.axes4);
rmeddis@38 475 set(handles.edit11,'String',num2str(1000*size(AN_HSRoutput,2)/2/actualsignal.sfreq));
rmeddis@38 476
rmeddis@38 477 %plot the fourierhistogram as image plot
rmeddis@38 478 formantpattern = fourierautocorrelationhistogram_direct(AN_HSRoutput,actualsignal.sfreq,handles.axes5);
rmeddis@38 479 caxis([0 2000]);
rmeddis@38 480 colorbar;
rmeddis@38 481
rmeddis@38 482 %plot the rate output
rmeddis@38 483 plotrateOutput(AN_HSRoutput,actualsignal.sfreq,handles.axes6,[33.7 300]);
rmeddis@38 484 set(handles.radiobutton12,'Value',1);
rmeddis@38 485
rmeddis@38 486 %calculate the IPIH
rmeddis@38 487 ipih=track_formants_from_IPI_guy(AN_HSRoutput, actualsignal.sfreq);
rmeddis@38 488 %the following code assumes that the bin width is 1/actualsignal.sfreq and
rmeddis@38 489 %the temporal step size is 3ms
rmeddis@38 490
rmeddis@38 491 ipihfreqaxis=1./[1/actualsignal.sfreq:1/actualsignal.sfreq:size(ipih,1)/actualsignal.sfreq];
rmeddis@38 492 ipihtimeaxis=[0:3:size(ipih,2)*3];
rmeddis@38 493 set(gcf,'CurrentAxes',handles.axes7);
rmeddis@38 494 YTickIdx = 1:floor(numel(ipihfreqaxis)/6):numel(ipihfreqaxis);
rmeddis@38 495 XTickIdx = 1:floor(numel(ipihtimeaxis)/6):numel(ipihtimeaxis);
rmeddis@38 496 imagesc(ipih);
rmeddis@38 497 set(gca, 'YTick', YTickIdx);
rmeddis@38 498 set(gca, 'YTickLabel', num2str( ipihfreqaxis(YTickIdx)', '%0.0f' ));
rmeddis@38 499 ylabel('best frequency (Hz)')
rmeddis@38 500 set(gca, 'XTick', XTickIdx);
rmeddis@38 501 set(gca, 'XTickLabel', XTickIdx.*3);
rmeddis@38 502 xlabel('Time (ms)');
rmeddis@38 503 caxis([0 8e4]); %set color
rmeddis@38 504 colorbar;
rmeddis@38 505
rmeddis@38 506 %calculate and plot summarized autocorrelation, code from Ray
rmeddis@38 507 method.dt=1/actualsignal.sfreq;
rmeddis@38 508 method.segmentNo=1;
rmeddis@38 509 method.nonlinCF=savedBFlist;
rmeddis@38 510
rmeddis@38 511 minPitch= 80; maxPitch= 4000; numPitches=100; % specify lags
rmeddis@38 512 pitches=10.^ linspace(log10(minPitch), log10(maxPitch),numPitches);
rmeddis@38 513 pitches=fliplr(pitches);
rmeddis@38 514 filteredSACFParams.lags=1./pitches; % autocorrelation lags vector
rmeddis@38 515 filteredSACFParams.acfTau= .003; % time constant of running ACF
rmeddis@38 516 filteredSACFParams.lambda= 0.12; % slower filter to smooth ACF
rmeddis@38 517 filteredSACFParams.lambda= 0.01; % slower filter to smooth ACF
rmeddis@38 518
rmeddis@38 519 filteredSACFParams.plotACFs=0; % special plot (see code)
rmeddis@38 520 filteredSACFParams.plotFilteredSACF=0; % 0 plots unfiltered ACFs
rmeddis@38 521 filteredSACFParams.plotMoviePauses=.5;%.3 % special plot (see code)
rmeddis@38 522
rmeddis@38 523 filteredSACFParams.usePressnitzer=0; % attenuates ACF at long lags
rmeddis@38 524 filteredSACFParams.lagsProcedure= 'useAllLags';
rmeddis@38 525 filteredSACFParams.criterionForOmittingLags=3;
rmeddis@38 526 filteredSACFParams.plotACFsInterval=50;%200;
rmeddis@38 527
rmeddis@38 528 % compute ACF
rmeddis@38 529 %switch saveAN_spikesOrProbability
rmeddis@38 530 % case 'probability'
rmeddis@38 531 inputToACF=ANprobRateOutput.^0.5;
rmeddis@38 532 % otherwise
rmeddis@38 533 % inputToACF=ANoutput;
rmeddis@38 534 %end
rmeddis@38 535
rmeddis@38 536 disp ('computing ACF...')
rmeddis@38 537 t=method.dt*(1:length(actualsignal.waveform));
rmeddis@38 538 [P, BFlist, sacf, boundaryValue] = ...
rmeddis@38 539 filteredSACF(inputToACF, method, filteredSACFParams);
rmeddis@38 540 P = real(P); %dont know why sometimes P can be (very slightly) complex
rmeddis@38 541 disp(' ACF done.')
rmeddis@38 542
rmeddis@38 543 % SACF
rmeddis@38 544 set(gcf,'CurrentAxes',handles.axes8);
rmeddis@38 545 imagesc(P)
rmeddis@38 546 ylabel('periodicities (Hz)')
rmeddis@38 547 xlabel('time (s)')
rmeddis@38 548 %title(['running smoothed (root) SACF. ' saveAN_spikesOrProbability ' input'])
rmeddis@38 549 pt=[1 get(gca,'ytick')]; % force top xtick to show
rmeddis@38 550 set(gca,'ytick',pt)
rmeddis@38 551 set(gca,'ytickLabel', round(pitches(pt)))
rmeddis@38 552 tt=get(gca,'xtick');
rmeddis@38 553 tt=tt(tt<length(t));
rmeddis@38 554 set(gca,'xtickLabel', round(100*t(tt))/100)
rmeddis@38 555 colorbar;
rmeddis@38 556
rmeddis@38 557 % --- Executes on button press in pushbutton7.
rmeddis@38 558 function pushbutton7_Callback(hObject, eventdata, handles)
rmeddis@38 559 % hObject handle to pushbutton7 (see GCBO)
rmeddis@38 560 % eventdata reserved - to be defined in a future version of MATLAB
rmeddis@38 561 % handles structure with handles and user data (see GUIDATA)
rmeddis@38 562
rmeddis@38 563 %% SHOW THE (PREVIOUSLY STORED) AUDITORY PROFILE CORRESPONDING TO THE
rmeddis@38 564 %% PARAMETER FILE
rmeddis@38 565 addpath(['..' filesep 'multithreshold 1.46' filesep]);
rmeddis@38 566 % read the parameter file
rmeddis@38 567 tmp = get(handles.edit7,'String');
rmeddis@38 568 parameterfile=tmp;
rmeddis@38 569 if isempty(parameterfile)
rmeddis@38 570 error('Please specify parameter file');
rmeddis@38 571 end
rmeddis@38 572
rmeddis@38 573 %what kind of profiles are in the profiles directory?
rmeddis@38 574 files_in_profiles = dir(['..' filesep 'profiles' filesep '*.m']);%if exist('',file)
rmeddis@38 575 done = 0;
rmeddis@38 576
rmeddis@38 577 %try to map the specified parameter file to these found in the directory
rmeddis@38 578 %and
rmeddis@38 579 for iCounter = 1:length(files_in_profiles)
rmeddis@38 580 if strfind(files_in_profiles(iCounter).name,parameterfile)
rmeddis@38 581 %ask the user if this is the correct file - because you'll never
rmeddis@38 582 %know ;)
rmeddis@38 583 stringtoask = ['Is ' files_in_profiles(iCounter).name ' the correct profile file?'];
rmeddis@38 584 Answer = questdlg(stringtoask,'Possible match found','Yes','No','Yes');
rmeddis@38 585 switch Answer,
rmeddis@38 586 case 'Yes'
rmeddis@38 587 plotprofile(files_in_profiles(iCounter).name(1:end-2),'profile_CMA_L');
rmeddis@38 588 done = 1;
rmeddis@38 589 case 'No'
rmeddis@38 590 end %switch
rmeddis@38 591 end %if
rmeddis@38 592 end
rmeddis@38 593 if ~done
rmeddis@38 594 msgbox('No match for this parameter file found.');
rmeddis@38 595 end
rmeddis@38 596
rmeddis@38 597 function multipleplot(actualsignal,handles)
rmeddis@38 598 %% FUNCTION TO DO 3 PLOTS
rmeddis@38 599 time_axis = [0:1/actualsignal.sfreq:(length(actualsignal.waveform)-1)/actualsignal.sfreq];
rmeddis@38 600
rmeddis@38 601 %waveform plot (temporal)
rmeddis@38 602 plot(handles.axes1,time_axis,actualsignal.waveform);
rmeddis@38 603 set(get(handles.axes1,'XLabel'),'String','Time (s)');
rmeddis@38 604 set(get(handles.axes1,'YLabel'),'String','Amplitude');
rmeddis@38 605 set(handles.axes1,'XLim',[0 length(actualsignal.waveform)/actualsignal.sfreq]);
rmeddis@38 606 highestabsampl = max(abs(actualsignal.waveform))*1.05;
rmeddis@38 607 set(handles.axes1,'YLim',[-highestabsampl highestabsampl]);
rmeddis@38 608
rmeddis@38 609 %average spectrum plot
rmeddis@38 610 complspectrum = fft(actualsignal.waveform)/(length(actualsignal.waveform));
rmeddis@38 611 frequency = [0:1/time_axis(end):1/(2*(time_axis(2)-time_axis(1)))];
rmeddis@38 612 plot(handles.axes2,frequency,20*log10(sqrt(2)*abs(complspectrum(1:round(length(complspectrum)/2)))));
rmeddis@38 613 set(get(handles.axes2,'XLabel'),'String','frequency (Hz)');
rmeddis@38 614 set(get(handles.axes2,'YLabel'),'String','fourier amplitude (dB)');
rmeddis@38 615 set(handles.axes2,'XLim',[100 10000]);
rmeddis@38 616 set(handles.axes2,'XScale','log');
rmeddis@38 617
rmeddis@38 618 %spectrogram plot (10 ms temporal resolution)
rmeddis@38 619 [s,f,t] = spectrogram(actualsignal.waveform,hann(round(0.01*actualsignal.sfreq)),[],[],actualsignal.sfreq); %10ms short term windows
rmeddis@38 620 set(gcf,'CurrentAxes',handles.axes3);
rmeddis@38 621 if max(f)>10000
rmeddis@38 622 [tmp,idx] = min(abs(f-10000));
rmeddis@38 623 imagesc(t,f(1:idx),20*log10(abs(s(1:idx,:))));
rmeddis@38 624 else
rmeddis@38 625 imagesc(t,f,20*log10(abs(s)));
rmeddis@38 626 end
rmeddis@38 627 axis xy;
rmeddis@38 628 set(get(handles.axes3,'YLabel'),'String','frequency (Hz)');
rmeddis@38 629 set(get(handles.axes3,'XLabel'),'String','Time (s)');
rmeddis@38 630
rmeddis@38 631
rmeddis@38 632 function plotrateOutput(ratepattern,sfreq,axeshandle,colorrange)
rmeddis@38 633 %% calculate rate representation and plot, code from Nick
rmeddis@38 634 global savedBFlist
rmeddis@38 635 %calculate rate representation
rmeddis@38 636 ANsmooth = [];%Cannot pre-allocate a size as it is unknown until the enframing
rmeddis@38 637 hopSize = 10; %ms
rmeddis@38 638 winSize = 25; %ms
rmeddis@38 639 winSizeSamples = round(winSize*sfreq/1000);
rmeddis@38 640 hann = hanning(winSizeSamples);
rmeddis@38 641 hopSizeSamples = round(hopSize*sfreq/1000);
rmeddis@38 642 for chan = 1:size(ratepattern,1)
rmeddis@38 643 f = enframe(ratepattern(chan,:), hann, hopSizeSamples);
rmeddis@38 644 ANsmooth(chan,:) = mean(f,2)';
rmeddis@38 645 end
rmeddis@38 646
rmeddis@38 647 %plot rate representation
rmeddis@38 648 time_axis_rate=[0:hopSize/1000:size(ratepattern,2)/sfreq];
rmeddis@38 649 set(gcf,'CurrentAxes',axeshandle);
rmeddis@38 650 YTickIdx = 1:floor(numel(savedBFlist)/6):numel(savedBFlist);
rmeddis@38 651 XTickIdx = 1:floor(numel(time_axis_rate)/6):numel(time_axis_rate);
rmeddis@38 652 imagesc(ANsmooth);
rmeddis@38 653 axis xy;
rmeddis@38 654 set(gca, 'YTick', YTickIdx);
rmeddis@38 655 set(gca, 'YTickLabel', num2str( savedBFlist(YTickIdx)', '%0.0f' ));
rmeddis@38 656 ylabel('best frequency (Hz)')
rmeddis@38 657 set(gca, 'XTick', XTickIdx);
rmeddis@38 658 set(gca, 'XTickLabel', XTickIdx.*10);
rmeddis@38 659 xlabel('Time (ms)');
rmeddis@38 660 caxis(colorrange); %set color from average spontaneous rate to a maximum of 600
rmeddis@38 661 colorbar;
rmeddis@38 662
rmeddis@38 663
rmeddis@38 664 % --- Executes if the radiobuttons hsr and lsr are changed
rmeddis@38 665 function radiobuttonselected(source, eventdata)
rmeddis@38 666
rmeddis@38 667 global rateaxeshandle
rmeddis@38 668 global ANprobRateOutput
rmeddis@38 669 global actualsignal
rmeddis@38 670
rmeddis@38 671 selected = get(get(source,'SelectedObject'),'String');
rmeddis@38 672
rmeddis@38 673 if isempty(ANprobRateOutput)
rmeddis@38 674 msgbox('Please calculate AN pattern first!');
rmeddis@38 675 elseif strcmp(selected,'HSR')
rmeddis@38 676 AN_HSRoutput = ANprobRateOutput(size(ANprobRateOutput)/2+1:end,:);
rmeddis@38 677 colorrange = [33.7 300];
rmeddis@38 678 plotrateOutput(AN_HSRoutput,actualsignal.sfreq,rateaxeshandle,colorrange);
rmeddis@38 679 else
rmeddis@38 680 AN_LSRoutput = ANprobRateOutput(1:size(ANprobRateOutput)/2,:);
rmeddis@38 681 colorrange = [10.7 100];
rmeddis@38 682 plotrateOutput(AN_LSRoutput,actualsignal.sfreq,rateaxeshandle,colorrange);
rmeddis@38 683 end
rmeddis@38 684
rmeddis@38 685
rmeddis@38 686 % --- Executes during object creation, after setting all properties.
rmeddis@38 687 function edit11_CreateFcn(hObject, eventdata, handles)
rmeddis@38 688 % hObject handle to edit11 (see GCBO)
rmeddis@38 689 % eventdata reserved - to be defined in a future version of MATLAB
rmeddis@38 690 % handles empty - handles not created until after all CreateFcns called
rmeddis@38 691
rmeddis@38 692 % Hint: edit controls usually have a white background on Windows.
rmeddis@38 693 % See ISPC and COMPUTER.
rmeddis@38 694 if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
rmeddis@38 695 set(hObject,'BackgroundColor','white');
rmeddis@38 696 end
rmeddis@38 697
rmeddis@38 698
rmeddis@38 699 % --- Executes on button press in pushbutton8.
rmeddis@38 700 function pushbutton8_Callback(hObject, eventdata, handles)
rmeddis@38 701 % hObject handle to pushbutton8 (see GCBO)
rmeddis@38 702 % eventdata reserved - to be defined in a future version of MATLAB
rmeddis@38 703 % handles structure with handles and user data (see GUIDATA)
rmeddis@38 704 %plot the auditory nerve firing probability as line plot after grabbing the
rmeddis@38 705 %time value from edit11
rmeddis@38 706 global AN_HSRoutput
rmeddis@38 707 global actualsignal
rmeddis@38 708 global savedBFlist
rmeddis@38 709
rmeddis@38 710 middletime = str2num(get(handles.edit11,'String'))/1000;
rmeddis@38 711
rmeddis@38 712 start_time = min([size(AN_HSRoutput,2)/actualsignal.sfreq-0.01 max([0 middletime-0.025])]); %start time to plot in s
rmeddis@38 713 end_time = max([start_time+0.01 min([start_time+0.05 size(AN_HSRoutput,2)/actualsignal.sfreq-0.01])]); %plot max 50ms
rmeddis@38 714 plotIFRAN(AN_HSRoutput,start_time,end_time,actualsignal.sfreq,savedBFlist,handles.axes4);