rmeddis@38: function varargout = speechmanipulation(varargin) rmeddis@38: % SPEECHMANIPULATION MATLAB code for speechmanipulation.fig rmeddis@38: % SPEECHMANIPULATION, by itself, creates a new SPEECHMANIPULATION or raises the existing rmeddis@38: % singleton*. rmeddis@38: % rmeddis@38: % H = SPEECHMANIPULATION returns the handle to a new SPEECHMANIPULATION or the handle to rmeddis@38: % the existing singleton*. rmeddis@38: % rmeddis@38: % SPEECHMANIPULATION('CALLBACK',hObject,eventData,handles,...) calls the local rmeddis@38: % function named CALLBACK in SPEECHMANIPULATION.M with the given input arguments. rmeddis@38: % rmeddis@38: % SPEECHMANIPULATION('Property','Value',...) creates a new SPEECHMANIPULATION or raises the rmeddis@38: % existing singleton*. Starting from the left, property value pairs are rmeddis@38: % applied to the GUI before speechmanipulation_OpeningFcn gets called. An rmeddis@38: % unrecognized property name or invalid value makes property application rmeddis@38: % stop. All inputs are passed to speechmanipulation_OpeningFcn via varargin. rmeddis@38: % rmeddis@38: % *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one rmeddis@38: % instance to run (singleton)". rmeddis@38: % rmeddis@38: % See also: GUIDE, GUIDATA, GUIHANDLES rmeddis@38: rmeddis@38: % Edit the above text to modify the response to help speechmanipulation rmeddis@38: rmeddis@38: % Last Modified by GUIDE v2.5 05-Oct-2011 11:21:58 rmeddis@38: rmeddis@38: % Begin initialization code - DO NOT EDIT rmeddis@38: gui_Singleton = 1; rmeddis@38: gui_State = struct('gui_Name', mfilename, ... rmeddis@38: 'gui_Singleton', gui_Singleton, ... rmeddis@38: 'gui_OpeningFcn', @speechmanipulation_OpeningFcn, ... rmeddis@38: 'gui_OutputFcn', @speechmanipulation_OutputFcn, ... rmeddis@38: 'gui_LayoutFcn', [] , ... rmeddis@38: 'gui_Callback', []); rmeddis@38: if nargin && ischar(varargin{1}) rmeddis@38: gui_State.gui_Callback = str2func(varargin{1}); rmeddis@38: end rmeddis@38: rmeddis@38: if nargout rmeddis@38: [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); rmeddis@38: else rmeddis@38: gui_mainfcn(gui_State, varargin{:}); rmeddis@38: end rmeddis@38: % End initialization code - DO NOT EDIT rmeddis@38: rmeddis@38: rmeddis@38: % --- Executes just before speechmanipulation is made visible. rmeddis@38: function speechmanipulation_OpeningFcn(hObject, eventdata, handles, varargin) rmeddis@38: % This function has no output args, see OutputFcn. rmeddis@38: % hObject handle to figure rmeddis@38: % eventdata reserved - to be defined in a future version of MATLAB rmeddis@38: % handles structure with handles and user data (see GUIDATA) rmeddis@38: % varargin command line arguments to speechmanipulation (see VARARGIN) rmeddis@38: global wavfilescell; rmeddis@38: global rateaxeshandle; %handle to axis6 is needed, if radiobuttons12 and 13 change rmeddis@38: rmeddis@38: rmeddis@38: % Choose default command line output for speechmanipulation rmeddis@38: handles.output = hObject; rmeddis@38: rmeddis@38: % Update handles structure rmeddis@38: guidata(hObject, handles); rmeddis@38: rmeddis@38: % UIWAIT makes speechmanipulation wait for user response (see UIRESUME) rmeddis@38: % uiwait(handles.figure1); rmeddis@38: wavfiles = dir(['..' filesep 'wavFileStore' filesep '*.wav']); rmeddis@38: for iCounter = 1:length(wavfiles) rmeddis@38: wavfilescell{iCounter} = wavfiles(iCounter).name; rmeddis@38: end rmeddis@38: set(handles.popupmenu1,'String',wavfilescell); rmeddis@38: set(handles.popupmenu2,'String',wavfilescell); rmeddis@38: set(handles.uipanel8,'SelectionChangeFcn',@radiobuttonselected); rmeddis@38: rateaxeshandle = handles.axes6; rmeddis@38: rmeddis@38: % --- Outputs from this function are returned to the command line. rmeddis@38: function varargout = speechmanipulation_OutputFcn(hObject, eventdata, handles) rmeddis@38: % varargout cell array for returning output args (see VARARGOUT); rmeddis@38: % hObject handle to figure rmeddis@38: % eventdata reserved - to be defined in a future version of MATLAB rmeddis@38: % handles structure with handles and user data (see GUIDATA) rmeddis@38: rmeddis@38: % Get default command line output from handles structure rmeddis@38: varargout{1} = handles.output; rmeddis@38: rmeddis@38: function edit1_Callback(hObject, eventdata, handles) rmeddis@38: function edit2_Callback(hObject, eventdata, handles) rmeddis@38: function edit3_Callback(hObject, eventdata, handles) rmeddis@38: function edit4_Callback(hObject, eventdata, handles) rmeddis@38: function edit5_Callback(hObject, eventdata, handles) rmeddis@38: function edit6_Callback(hObject, eventdata, handles) rmeddis@38: function edit7_Callback(hObject, eventdata, handles) rmeddis@38: function edit8_Callback(hObject, eventdata, handles) rmeddis@38: function edit9_Callback(hObject, eventdata, handles) rmeddis@38: function edit10_Callback(hObject, eventdata, handles) rmeddis@38: function edit11_Callback(hObject, eventdata, handles) rmeddis@38: function edit12_Callback(hObject, eventdata, handles) rmeddis@38: rmeddis@38: rmeddis@38: % --- Executes on selection change in popupmenu1. rmeddis@38: function popupmenu1_Callback(hObject, eventdata, handles) rmeddis@38: % hObject handle to popupmenu1 (see GCBO) rmeddis@38: % eventdata reserved - to be defined in a future version of MATLAB rmeddis@38: % handles structure with handles and user data (see GUIDATA) rmeddis@38: rmeddis@38: % Hints: contents = cellstr(get(hObject,'String')) returns popupmenu1 contents as cell array rmeddis@38: % contents{get(hObject,'Value')} returns selected item from popupmenu1 rmeddis@38: %% CHOOSE AND LOAD WAVEFORM rmeddis@38: global wavfilescell rmeddis@38: global originalsignal rmeddis@38: global actualsignal rmeddis@38: rmeddis@38: %get the number from the popupmenu rmeddis@38: selectedfileno = get(handles.popupmenu1,'Value'); rmeddis@38: rmeddis@38: %load it rmeddis@38: [waveform,sfreq] = wavread(['..' filesep 'wavFileStore' filesep wavfilescell{selectedfileno}]); rmeddis@38: rmeddis@38: %if it is from OLLO then cut it rmeddis@38: 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: waveform = cutsignal(waveform,sfreq,'a_a'); rmeddis@38: end rmeddis@38: rmeddis@38: %store it in global variables rmeddis@38: actualsignal.waveform = waveform; rmeddis@38: actualsignal.sfreq = sfreq; rmeddis@38: originalsignal.waveform = waveform; rmeddis@38: originalsignal.sfreq = sfreq; rmeddis@38: rmeddis@38: %plot it rmeddis@38: multipleplot(actualsignal,handles); rmeddis@38: rmeddis@38: % --- Executes during object creation, after setting all properties. rmeddis@38: function popupmenu1_CreateFcn(hObject, eventdata, handles) rmeddis@38: % hObject handle to popupmenu1 (see GCBO) rmeddis@38: % eventdata reserved - to be defined in a future version of MATLAB rmeddis@38: % handles empty - handles not created until after all CreateFcns called rmeddis@38: rmeddis@38: % Hint: popupmenu controls usually have a white background on Windows. rmeddis@38: % See ISPC and COMPUTER. rmeddis@38: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@38: set(hObject,'BackgroundColor','white'); rmeddis@38: end rmeddis@38: rmeddis@38: rmeddis@38: % --- Executes on button press in pushbutton1. rmeddis@38: function pushbutton1_Callback(hObject, eventdata, handles) rmeddis@38: % hObject handle to pushbutton1 (see GCBO) rmeddis@38: % eventdata reserved - to be defined in a future version of MATLAB rmeddis@38: % handles structure with handles and user data (see GUIDATA) rmeddis@38: %% LOAD WAVEFORM rmeddis@38: global wavfilescell rmeddis@38: global originalsignal rmeddis@38: global actualsignal rmeddis@38: rmeddis@38: %get the number from the popupmenu rmeddis@38: selectedfileno = get(handles.popupmenu1,'Value'); rmeddis@38: rmeddis@38: %load it rmeddis@38: [waveform,sfreq] = wavread(['..' filesep 'wavFileStore' filesep wavfilescell{selectedfileno}]); rmeddis@38: rmeddis@38: %if it is from OLLO then cut it rmeddis@38: 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: waveform = cutsignal(waveform,sfreq,'a_a'); rmeddis@38: end rmeddis@38: rmeddis@38: %store it in global variables rmeddis@38: actualsignal.waveform = waveform; rmeddis@38: actualsignal.sfreq = sfreq; rmeddis@38: originalsignal.waveform = waveform; rmeddis@38: originalsignal.sfreq = sfreq; rmeddis@38: rmeddis@38: %plot it rmeddis@38: multipleplot(actualsignal,handles) rmeddis@38: rmeddis@38: rmeddis@38: % --- Executes during object creation, after setting all properties. rmeddis@38: function edit1_CreateFcn(hObject, eventdata, handles) rmeddis@38: % hObject handle to edit1 (see GCBO) rmeddis@38: % eventdata reserved - to be defined in a future version of MATLAB rmeddis@38: % handles empty - handles not created until after all CreateFcns called rmeddis@38: rmeddis@38: % Hint: edit controls usually have a white background on Windows. rmeddis@38: % See ISPC and COMPUTER. rmeddis@38: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@38: set(hObject,'BackgroundColor','white'); rmeddis@38: end rmeddis@38: rmeddis@38: rmeddis@38: % --- Executes on button press in pushbutton2. rmeddis@38: function pushbutton2_Callback(hObject, eventdata, handles) rmeddis@38: % hObject handle to pushbutton2 (see GCBO) rmeddis@38: % eventdata reserved - to be defined in a future version of MATLAB rmeddis@38: % handles structure with handles and user data (see GUIDATA) rmeddis@38: %% PLAY THE ACTUAL (MANIPULATED) SIGNAL rmeddis@38: global actualsignal rmeddis@38: global toplay rmeddis@38: rmeddis@38: toplay = audioplayer(actualsignal.waveform,actualsignal.sfreq); rmeddis@38: play(toplay); rmeddis@38: rmeddis@38: rmeddis@38: % --- Executes on button press in pushbutton3. rmeddis@38: function pushbutton3_Callback(hObject, eventdata, handles) rmeddis@38: % hObject handle to pushbutton3 (see GCBO) rmeddis@38: % eventdata reserved - to be defined in a future version of MATLAB rmeddis@38: % handles structure with handles and user data (see GUIDATA) rmeddis@38: rmeddis@38: %% MANIPULATE SIGNAL rmeddis@38: global wavfilescell rmeddis@38: global originalsignal rmeddis@38: global actualsignal rmeddis@38: rmeddis@38: actualsignal = originalsignal; %reset rmeddis@38: rmeddis@38: %% speed factor change rmeddis@38: speedfactor = str2num(get(handles.edit1,'String')); rmeddis@38: newfakesfreq=actualsignal.sfreq*speedfactor; rmeddis@38: if speedfactor == 1 rmeddis@38: else rmeddis@38: actualsignal.waveform = resample(actualsignal.waveform,actualsignal.sfreq,newfakesfreq); rmeddis@38: end rmeddis@38: rmeddis@38: %% low and high pass filter (butterworth) rmeddis@38: % get the desired filter from radio buttons rmeddis@38: radiofilterhandles=get(handles.uipanel2,'Children'); rmeddis@38: for iCounter = 1:length(radiofilterhandles) rmeddis@38: if get(radiofilterhandles(iCounter),'Value') == 1 rmeddis@38: filtertype = get(radiofilterhandles(iCounter),'String'); rmeddis@38: end rmeddis@38: end rmeddis@38: % read parameters rmeddis@38: tmp = get(handles.edit3,'String'); rmeddis@38: cutofffreq=str2num(tmp{1}); rmeddis@38: tmp = get(handles.edit4,'String'); rmeddis@38: filterorder=str2num(tmp{1}); rmeddis@38: %do the filter calculations rmeddis@38: switch filtertype rmeddis@38: case 'none' rmeddis@38: case 'High pass' rmeddis@38: if isempty(cutofffreq) || isempty(filterorder) rmeddis@38: error('Please specify cutoff frequency and/or filter order') rmeddis@38: else rmeddis@38: [a,b] = butter(filterorder,cutofffreq*2/actualsignal.sfreq,'high'); rmeddis@38: actualsignal.waveform=filter(a,b,actualsignal.waveform); rmeddis@38: end rmeddis@38: case 'Low pass' rmeddis@38: if isempty(cutofffreq)|| isempty(filterorder) rmeddis@38: error('Please specify cutoff frequency') rmeddis@38: else rmeddis@38: [a,b] = butter(filterorder,cutofffreq*2/actualsignal.sfreq,'low'); rmeddis@38: actualsignal.waveform=filter(a,b,actualsignal.waveform); rmeddis@38: end rmeddis@38: end rmeddis@38: rmeddis@38: %additive noise rmeddis@38: % get the desired filter from radio buttons rmeddis@38: radionoisehandles=get(handles.uipanel4,'Children'); rmeddis@38: for iCounter = 1:length(radionoisehandles) rmeddis@38: if get(radionoisehandles(iCounter),'Value') == 1 rmeddis@38: noisetype = get(radionoisehandles(iCounter),'String'); rmeddis@38: end rmeddis@38: end rmeddis@38: % read parameters rmeddis@38: tmp = get(handles.edit5,'String'); rmeddis@38: snr=str2num(tmp{1}); rmeddis@38: %do the noise calculations rmeddis@38: switch noisetype rmeddis@38: case 'none' rmeddis@38: case 'White noise' rmeddis@38: if isempty(snr) rmeddis@38: error('Please specify SNR') rmeddis@38: else rmeddis@38: whitenoise = rand(length(actualsignal.waveform),1)-0.5; rmeddis@38: %set level rmeddis@38: levelsignal = 20*log10(sqrt(mean(actualsignal.waveform.^2))); rmeddis@38: levelnoise = levelsignal-snr; rmeddis@38: whitenoise = whitenoise./sqrt(mean(whitenoise.^2)).*10^(levelnoise/20); rmeddis@38: %20*log10(sqrt(mean(whitenoise.^2))) rmeddis@38: actualsignal.waveform=actualsignal.waveform+whitenoise; rmeddis@38: end rmeddis@38: case 'From file' rmeddis@38: if isempty(snr) rmeddis@38: error('Please specify SNR') rmeddis@38: else rmeddis@38: selectedfileno = get(handles.popupmenu2,'Value'); rmeddis@38: rmeddis@38: [noisewaveform,noisesfreq] = wavread(['..' filesep 'wavFileStore' filesep wavfilescell{selectedfileno}]); rmeddis@38: if noisesfreq == actualsignal.sfreq rmeddis@38: else rmeddis@38: noisewaveform = resample(noisewaveform,actualsignal.sfreq,noisesfreq); rmeddis@38: noisesfreq = actualsignal.sfreq; rmeddis@38: end rmeddis@38: if length(noisewaveform) < length(actualsignal.waveform) rmeddis@38: warning('Noise waveform too short. Noise is looped without fading at the endings!'); rmeddis@38: noisewaveform = repmat(noisewaveform, ceil(length(actualsignal.waveform)/length(noisewaveform)),1); rmeddis@38: end rmeddis@38: noisewaveform=noisewaveform(1:length(actualsignal.waveform)); rmeddis@38: %set level rmeddis@38: levelsignal = 20*log10(sqrt(mean(actualsignal.waveform.^2))); rmeddis@38: levelnoise = levelsignal-snr; rmeddis@38: noisewaveform = noisewaveform./sqrt(mean(noisewaveform.^2)).*10^(levelnoise/20); rmeddis@38: %20*log10(sqrt(mean(noisewaveform.^2))) rmeddis@38: %finally add the two signals rmeddis@38: actualsignal.waveform = actualsignal.waveform + noisewaveform; rmeddis@38: end rmeddis@38: end rmeddis@38: rmeddis@38: %plot the resulting manipulated waveform rmeddis@38: multipleplot(actualsignal,handles); rmeddis@38: rmeddis@38: % --- Executes during object creation, after setting all properties. rmeddis@38: function edit3_CreateFcn(hObject, eventdata, handles) rmeddis@38: % hObject handle to edit3 (see GCBO) rmeddis@38: % eventdata reserved - to be defined in a future version of MATLAB rmeddis@38: % handles empty - handles not created until after all CreateFcns called rmeddis@38: rmeddis@38: % Hint: edit controls usually have a white background on Windows. rmeddis@38: % See ISPC and COMPUTER. rmeddis@38: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@38: set(hObject,'BackgroundColor','white'); rmeddis@38: end rmeddis@38: rmeddis@38: rmeddis@38: % --- Executes during object creation, after setting all properties. rmeddis@38: function edit4_CreateFcn(hObject, eventdata, handles) rmeddis@38: % hObject handle to edit4 (see GCBO) rmeddis@38: % eventdata reserved - to be defined in a future version of MATLAB rmeddis@38: % handles empty - handles not created until after all CreateFcns called rmeddis@38: rmeddis@38: % Hint: edit controls usually have a white background on Windows. rmeddis@38: % See ISPC and COMPUTER. rmeddis@38: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@38: set(hObject,'BackgroundColor','white'); rmeddis@38: end rmeddis@38: rmeddis@38: rmeddis@38: % --- Executes during object creation, after setting all properties. rmeddis@38: function edit5_CreateFcn(hObject, eventdata, handles) rmeddis@38: % hObject handle to edit5 (see GCBO) rmeddis@38: % eventdata reserved - to be defined in a future version of MATLAB rmeddis@38: % handles empty - handles not created until after all CreateFcns called rmeddis@38: rmeddis@38: % Hint: edit controls usually have a white background on Windows. rmeddis@38: % See ISPC and COMPUTER. rmeddis@38: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@38: set(hObject,'BackgroundColor','white'); rmeddis@38: end rmeddis@38: rmeddis@38: rmeddis@38: % --- Executes during object creation, after setting all properties. rmeddis@38: function popupmenu2_CreateFcn(hObject, eventdata, handles) rmeddis@38: % hObject handle to popupmenu2 (see GCBO) rmeddis@38: % eventdata reserved - to be defined in a future version of MATLAB rmeddis@38: % handles empty - handles not created until after all CreateFcns called rmeddis@38: rmeddis@38: % Hint: popupmenu controls usually have a white background on Windows. rmeddis@38: % See ISPC and COMPUTER. rmeddis@38: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@38: set(hObject,'BackgroundColor','white'); rmeddis@38: end rmeddis@38: rmeddis@38: rmeddis@38: % --- Executes on button press in pushbutton4. rmeddis@38: function pushbutton4_Callback(hObject, eventdata, handles) rmeddis@38: % hObject handle to pushbutton4 (see GCBO) rmeddis@38: % eventdata reserved - to be defined in a future version of MATLAB rmeddis@38: % handles structure with handles and user data (see GUIDATA) rmeddis@38: %% PLAY THE ORIGINAL WAVEFORM rmeddis@38: global originalsignal rmeddis@38: global toplay rmeddis@38: toplay = audioplayer(originalsignal.waveform,originalsignal.sfreq); rmeddis@38: play(toplay) rmeddis@38: rmeddis@38: rmeddis@38: % --- Executes on button press in pushbutton5. rmeddis@38: function pushbutton5_Callback(hObject, eventdata, handles) rmeddis@38: % hObject handle to pushbutton5 (see GCBO) rmeddis@38: % eventdata reserved - to be defined in a future version of MATLAB rmeddis@38: % handles structure with handles and user data (see GUIDATA) rmeddis@38: global toplay rmeddis@38: stop(toplay); rmeddis@38: rmeddis@38: rmeddis@38: function edit6_Callback(hObject, eventdata, handles) rmeddis@38: % hObject handle to edit6 (see GCBO) rmeddis@38: % eventdata reserved - to be defined in a future version of MATLAB rmeddis@38: % handles structure with handles and user data (see GUIDATA) rmeddis@38: rmeddis@38: % Hints: get(hObject,'String') returns contents of edit6 as text rmeddis@38: % str2double(get(hObject,'String')) returns contents of edit6 as a double rmeddis@38: rmeddis@38: rmeddis@38: % --- Executes during object creation, after setting all properties. rmeddis@38: function edit6_CreateFcn(hObject, eventdata, handles) rmeddis@38: % hObject handle to edit6 (see GCBO) rmeddis@38: % eventdata reserved - to be defined in a future version of MATLAB rmeddis@38: % handles empty - handles not created until after all CreateFcns called rmeddis@38: rmeddis@38: % Hint: edit controls usually have a white background on Windows. rmeddis@38: % See ISPC and COMPUTER. rmeddis@38: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@38: set(hObject,'BackgroundColor','white'); rmeddis@38: end rmeddis@38: rmeddis@38: % --- Executes during object creation, after setting all properties. rmeddis@38: function edit7_CreateFcn(hObject, eventdata, handles) rmeddis@38: % hObject handle to edit7 (see GCBO) rmeddis@38: % eventdata reserved - to be defined in a future version of MATLAB rmeddis@38: % handles empty - handles not created until after all CreateFcns called rmeddis@38: rmeddis@38: % Hint: edit controls usually have a white background on Windows. rmeddis@38: % See ISPC and COMPUTER. rmeddis@38: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@38: set(hObject,'BackgroundColor','white'); rmeddis@38: end rmeddis@38: rmeddis@38: rmeddis@38: % --- Executes during object creation, after setting all properties. rmeddis@38: function edit8_CreateFcn(hObject, eventdata, handles) rmeddis@38: % hObject handle to edit8 (see GCBO) rmeddis@38: % eventdata reserved - to be defined in a future version of MATLAB rmeddis@38: % handles empty - handles not created until after all CreateFcns called rmeddis@38: rmeddis@38: % Hint: edit controls usually have a white background on Windows. rmeddis@38: % See ISPC and COMPUTER. rmeddis@38: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@38: set(hObject,'BackgroundColor','white'); rmeddis@38: end rmeddis@38: rmeddis@38: rmeddis@38: % --- Executes on button press in pushbutton6. rmeddis@38: function pushbutton6_Callback(hObject, eventdata, handles) rmeddis@38: % hObject handle to pushbutton6 (see GCBO) rmeddis@38: % eventdata reserved - to be defined in a future version of MATLAB rmeddis@38: % handles structure with handles and user data (see GUIDATA) rmeddis@38: rmeddis@38: %% CALCULATE MAP 1.14 auditory nerve probability output rmeddis@38: addpath(['..' filesep 'MAP']); rmeddis@38: addpath(['..' filesep 'utilities']); rmeddis@38: global actualsignal rmeddis@38: global AN_HSRoutput rmeddis@38: rmeddis@38: tmp = get(handles.edit6,'String'); rmeddis@38: level4MAP=str2num(tmp); rmeddis@38: if isempty(level4MAP) rmeddis@38: error('Please specify level'); rmeddis@38: end rmeddis@38: rmeddis@38: tmp = get(handles.edit7,'String'); rmeddis@38: parameterfile=tmp; rmeddis@38: if isempty(parameterfile) rmeddis@38: error('Please specify parameter file'); rmeddis@38: end rmeddis@38: rmeddis@38: % identify model parameter changes if any rmeddis@38: paramChanges=get(handles.edit8,'string'); rmeddis@38: if ~strcmp(paramChanges, ';'), paramChanges=[paramChanges ';']; end rmeddis@38: eval(paramChanges); rmeddis@38: rmeddis@38: %set level rmeddis@38: actualsignal.waveform = actualsignal.waveform./sqrt(mean(actualsignal.waveform.^2)).*10^(-(94-level4MAP)/20); rmeddis@38: %20*log10(sqrt(mean(actualsignal.waveform.^2))/20e-6) %reference pressure: 20uPa rmeddis@38: rmeddis@38: MAP1_14(actualsignal.waveform,actualsignal.sfreq,-1,parameterfile, ... rmeddis@38: 'probability',paramChanges); rmeddis@38: global ANprobRateOutput savedBFlist rmeddis@38: rmeddis@38: %take only the HSR fibers rmeddis@38: AN_HSRoutput = ANprobRateOutput(size(ANprobRateOutput)/2+1:end,:); rmeddis@38: rmeddis@38: %plot the auditory nerve firing probability as line plot rmeddis@38: start_time = size(AN_HSRoutput,2)/2/actualsignal.sfreq-0.025; %start time to plot in s rmeddis@38: end_time = start_time+0.05; %plot 50ms rmeddis@38: plotIFRAN(AN_HSRoutput,start_time,end_time,actualsignal.sfreq,savedBFlist,handles.axes4); rmeddis@38: set(handles.edit11,'String',num2str(1000*size(AN_HSRoutput,2)/2/actualsignal.sfreq)); rmeddis@38: rmeddis@38: %plot the fourierhistogram as image plot rmeddis@38: formantpattern = fourierautocorrelationhistogram_direct(AN_HSRoutput,actualsignal.sfreq,handles.axes5); rmeddis@38: caxis([0 2000]); rmeddis@38: colorbar; rmeddis@38: rmeddis@38: %plot the rate output rmeddis@38: plotrateOutput(AN_HSRoutput,actualsignal.sfreq,handles.axes6,[33.7 300]); rmeddis@38: set(handles.radiobutton12,'Value',1); rmeddis@38: rmeddis@38: %calculate the IPIH rmeddis@38: ipih=track_formants_from_IPI_guy(AN_HSRoutput, actualsignal.sfreq); rmeddis@38: %the following code assumes that the bin width is 1/actualsignal.sfreq and rmeddis@38: %the temporal step size is 3ms rmeddis@38: rmeddis@38: ipihfreqaxis=1./[1/actualsignal.sfreq:1/actualsignal.sfreq:size(ipih,1)/actualsignal.sfreq]; rmeddis@38: ipihtimeaxis=[0:3:size(ipih,2)*3]; rmeddis@38: set(gcf,'CurrentAxes',handles.axes7); rmeddis@38: YTickIdx = 1:floor(numel(ipihfreqaxis)/6):numel(ipihfreqaxis); rmeddis@38: XTickIdx = 1:floor(numel(ipihtimeaxis)/6):numel(ipihtimeaxis); rmeddis@38: imagesc(ipih); rmeddis@38: set(gca, 'YTick', YTickIdx); rmeddis@38: set(gca, 'YTickLabel', num2str( ipihfreqaxis(YTickIdx)', '%0.0f' )); rmeddis@38: ylabel('best frequency (Hz)') rmeddis@38: set(gca, 'XTick', XTickIdx); rmeddis@38: set(gca, 'XTickLabel', XTickIdx.*3); rmeddis@38: xlabel('Time (ms)'); rmeddis@38: caxis([0 8e4]); %set color rmeddis@38: colorbar; rmeddis@38: rmeddis@38: %calculate and plot summarized autocorrelation, code from Ray rmeddis@38: method.dt=1/actualsignal.sfreq; rmeddis@38: method.segmentNo=1; rmeddis@38: method.nonlinCF=savedBFlist; rmeddis@38: rmeddis@38: minPitch= 80; maxPitch= 4000; numPitches=100; % specify lags rmeddis@38: pitches=10.^ linspace(log10(minPitch), log10(maxPitch),numPitches); rmeddis@38: pitches=fliplr(pitches); rmeddis@38: filteredSACFParams.lags=1./pitches; % autocorrelation lags vector rmeddis@38: filteredSACFParams.acfTau= .003; % time constant of running ACF rmeddis@38: filteredSACFParams.lambda= 0.12; % slower filter to smooth ACF rmeddis@38: filteredSACFParams.lambda= 0.01; % slower filter to smooth ACF rmeddis@38: rmeddis@38: filteredSACFParams.plotACFs=0; % special plot (see code) rmeddis@38: filteredSACFParams.plotFilteredSACF=0; % 0 plots unfiltered ACFs rmeddis@38: filteredSACFParams.plotMoviePauses=.5;%.3 % special plot (see code) rmeddis@38: rmeddis@38: filteredSACFParams.usePressnitzer=0; % attenuates ACF at long lags rmeddis@38: filteredSACFParams.lagsProcedure= 'useAllLags'; rmeddis@38: filteredSACFParams.criterionForOmittingLags=3; rmeddis@38: filteredSACFParams.plotACFsInterval=50;%200; rmeddis@38: rmeddis@38: % compute ACF rmeddis@38: %switch saveAN_spikesOrProbability rmeddis@38: % case 'probability' rmeddis@38: inputToACF=ANprobRateOutput.^0.5; rmeddis@38: % otherwise rmeddis@38: % inputToACF=ANoutput; rmeddis@38: %end rmeddis@38: rmeddis@38: disp ('computing ACF...') rmeddis@38: t=method.dt*(1:length(actualsignal.waveform)); rmeddis@38: [P, BFlist, sacf, boundaryValue] = ... rmeddis@38: filteredSACF(inputToACF, method, filteredSACFParams); rmeddis@38: P = real(P); %dont know why sometimes P can be (very slightly) complex rmeddis@38: disp(' ACF done.') rmeddis@38: rmeddis@38: % SACF rmeddis@38: set(gcf,'CurrentAxes',handles.axes8); rmeddis@38: imagesc(P) rmeddis@38: ylabel('periodicities (Hz)') rmeddis@38: xlabel('time (s)') rmeddis@38: %title(['running smoothed (root) SACF. ' saveAN_spikesOrProbability ' input']) rmeddis@38: pt=[1 get(gca,'ytick')]; % force top xtick to show rmeddis@38: set(gca,'ytick',pt) rmeddis@38: set(gca,'ytickLabel', round(pitches(pt))) rmeddis@38: tt=get(gca,'xtick'); rmeddis@38: tt=tt(tt10000 rmeddis@38: [tmp,idx] = min(abs(f-10000)); rmeddis@38: imagesc(t,f(1:idx),20*log10(abs(s(1:idx,:)))); rmeddis@38: else rmeddis@38: imagesc(t,f,20*log10(abs(s))); rmeddis@38: end rmeddis@38: axis xy; rmeddis@38: set(get(handles.axes3,'YLabel'),'String','frequency (Hz)'); rmeddis@38: set(get(handles.axes3,'XLabel'),'String','Time (s)'); rmeddis@38: rmeddis@38: rmeddis@38: function plotrateOutput(ratepattern,sfreq,axeshandle,colorrange) rmeddis@38: %% calculate rate representation and plot, code from Nick rmeddis@38: global savedBFlist rmeddis@38: %calculate rate representation rmeddis@38: ANsmooth = [];%Cannot pre-allocate a size as it is unknown until the enframing rmeddis@38: hopSize = 10; %ms rmeddis@38: winSize = 25; %ms rmeddis@38: winSizeSamples = round(winSize*sfreq/1000); rmeddis@38: hann = hanning(winSizeSamples); rmeddis@38: hopSizeSamples = round(hopSize*sfreq/1000); rmeddis@38: for chan = 1:size(ratepattern,1) rmeddis@38: f = enframe(ratepattern(chan,:), hann, hopSizeSamples); rmeddis@38: ANsmooth(chan,:) = mean(f,2)'; rmeddis@38: end rmeddis@38: rmeddis@38: %plot rate representation rmeddis@38: time_axis_rate=[0:hopSize/1000:size(ratepattern,2)/sfreq]; rmeddis@38: set(gcf,'CurrentAxes',axeshandle); rmeddis@38: YTickIdx = 1:floor(numel(savedBFlist)/6):numel(savedBFlist); rmeddis@38: XTickIdx = 1:floor(numel(time_axis_rate)/6):numel(time_axis_rate); rmeddis@38: imagesc(ANsmooth); rmeddis@38: axis xy; rmeddis@38: set(gca, 'YTick', YTickIdx); rmeddis@38: set(gca, 'YTickLabel', num2str( savedBFlist(YTickIdx)', '%0.0f' )); rmeddis@38: ylabel('best frequency (Hz)') rmeddis@38: set(gca, 'XTick', XTickIdx); rmeddis@38: set(gca, 'XTickLabel', XTickIdx.*10); rmeddis@38: xlabel('Time (ms)'); rmeddis@38: caxis(colorrange); %set color from average spontaneous rate to a maximum of 600 rmeddis@38: colorbar; rmeddis@38: rmeddis@38: rmeddis@38: % --- Executes if the radiobuttons hsr and lsr are changed rmeddis@38: function radiobuttonselected(source, eventdata) rmeddis@38: rmeddis@38: global rateaxeshandle rmeddis@38: global ANprobRateOutput rmeddis@38: global actualsignal rmeddis@38: rmeddis@38: selected = get(get(source,'SelectedObject'),'String'); rmeddis@38: rmeddis@38: if isempty(ANprobRateOutput) rmeddis@38: msgbox('Please calculate AN pattern first!'); rmeddis@38: elseif strcmp(selected,'HSR') rmeddis@38: AN_HSRoutput = ANprobRateOutput(size(ANprobRateOutput)/2+1:end,:); rmeddis@38: colorrange = [33.7 300]; rmeddis@38: plotrateOutput(AN_HSRoutput,actualsignal.sfreq,rateaxeshandle,colorrange); rmeddis@38: else rmeddis@38: AN_LSRoutput = ANprobRateOutput(1:size(ANprobRateOutput)/2,:); rmeddis@38: colorrange = [10.7 100]; rmeddis@38: plotrateOutput(AN_LSRoutput,actualsignal.sfreq,rateaxeshandle,colorrange); rmeddis@38: end rmeddis@38: rmeddis@38: rmeddis@38: % --- Executes during object creation, after setting all properties. rmeddis@38: function edit11_CreateFcn(hObject, eventdata, handles) rmeddis@38: % hObject handle to edit11 (see GCBO) rmeddis@38: % eventdata reserved - to be defined in a future version of MATLAB rmeddis@38: % handles empty - handles not created until after all CreateFcns called rmeddis@38: rmeddis@38: % Hint: edit controls usually have a white background on Windows. rmeddis@38: % See ISPC and COMPUTER. rmeddis@38: if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) rmeddis@38: set(hObject,'BackgroundColor','white'); rmeddis@38: end rmeddis@38: rmeddis@38: rmeddis@38: % --- Executes on button press in pushbutton8. rmeddis@38: function pushbutton8_Callback(hObject, eventdata, handles) rmeddis@38: % hObject handle to pushbutton8 (see GCBO) rmeddis@38: % eventdata reserved - to be defined in a future version of MATLAB rmeddis@38: % handles structure with handles and user data (see GUIDATA) rmeddis@38: %plot the auditory nerve firing probability as line plot after grabbing the rmeddis@38: %time value from edit11 rmeddis@38: global AN_HSRoutput rmeddis@38: global actualsignal rmeddis@38: global savedBFlist rmeddis@38: rmeddis@38: middletime = str2num(get(handles.edit11,'String'))/1000; rmeddis@38: rmeddis@38: start_time = min([size(AN_HSRoutput,2)/actualsignal.sfreq-0.01 max([0 middletime-0.025])]); %start time to plot in s rmeddis@38: 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: plotIFRAN(AN_HSRoutput,start_time,end_time,actualsignal.sfreq,savedBFlist,handles.axes4);