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);
|