www.gusucode.com > 基于MATLAB的语音信号的LPC分析,带有GUI界面和测试数据 > 基于MATLAB的语音信号的LPC分析,带有GUI界面和测试数据/simplelpcgui.m

    function varargout = simplelpcgui(varargin)
% SIMPLELPCGUI M-file for simplelpcgui.fig
%      SIMPLELPCGUI, by itself, creates a new SIMPLELPCGUI or raises the existing
%      singleton*.
%
%      H = SIMPLELPCGUI returns the handle to a new SIMPLELPCGUI or the handle to
%      the existing singleton*.
%
%      SIMPLELPCGUI('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in SIMPLELPCGUI.M with the given input arguments.
%
%      SIMPLELPCGUI('Property','Value',...) creates a new SIMPLELPCGUI or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before simplelpcgui_OpeningFunction gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to simplelpcgui_OpeningFcn via varargin.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help simplelpcgui

% Last Modified by GUIDE v2.5 30-Jul-2003 22:36:56

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @simplelpcgui_OpeningFcn, ...
                   'gui_OutputFcn',  @simplelpcgui_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin & isstr(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT


% --- Executes just before simplelpcgui is made visible.
function simplelpcgui_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to simplelpcgui (see VARARGIN)

% Choose default command line output for simplelpcgui
handles.output = hObject;
handles.pointer_switch=1;
handles.filecnt=1;
% Update handles structure
guidata(hObject, handles);

% UIWAIT makes simplelpcgui wait for user response (see UIRESUME)
% uiwait(handles.figure1);


% --- Outputs from this function are returned to the command line.
function varargout = simplelpcgui_OutputFcn(hObject, eventdata, handles)
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure

varargout{1} = handles.output;


% --- Executes on button press in pbLoad.
function pbLoad_Callback(hObject, eventdata, handles)
% hObject    handle to pbLoad (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Load speech data 
temp = cd;
[filename, pathname] = uigetfile('*.mat'); 
S = load([pathname filename]);
cd(temp);
axes(handles.axes1);
plot(S.data);
xlabel('Time(t)','fontsize',12);
ylabel('Amplitude','fontsize',12);
dualcursor;
handles.data=S.data;
handles.Fs=8000;
N=256;
data2=zeros(N,1);
data2(1)=S.data(1);
data2=S.data(2:end)-0.95*S.data(1:end-1);
handles.data2=data2;

guidata(hObject,handles);




% --- Executes during object creation, after setting all properties.
function edit1_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc
    set(hObject,'BackgroundColor','white');
else
    set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end



function edit1_Callback(hObject, eventdata, handles)
% hObject    handle to edit1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit1 as text
%        str2double(get(hObject,'String')) returns contents of edit1 as a double


% --- Executes during object creation, after setting all properties.
function edit2_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc
    set(hObject,'BackgroundColor','white');
else
    set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end



function edit2_Callback(hObject, eventdata, handles)
% hObject    handle to edit2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit2 as text
%        str2double(get(hObject,'String')) returns contents of edit2 as a double


% --- Executes during object creation, after setting all properties.
function edit3_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit3 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc
    set(hObject,'BackgroundColor','white');
else
    set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end



function edit3_Callback(hObject, eventdata, handles)
% hObject    handle to edit3 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit3 as text
%        str2double(get(hObject,'String')) returns contents of edit3 as a double


% --- Executes during object creation, after setting all properties.
function edit4_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit4 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc
    set(hObject,'BackgroundColor','white');
else
    set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end



function edit4_Callback(hObject, eventdata, handles)
% hObject    handle to edit4 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit4 as text
%        str2double(get(hObject,'String')) returns contents of edit4 as a double


% --- Executes on mouse press over axes background.
function axes1_ButtonDownFcn(hObject, eventdata, handles)
% hObject    handle to axes1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)



% --- Executes on button press in pbFormants.
function pbFormants_Callback(hObject, eventdata, handles)
% hObject    handle to pbFormants (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

axes(handles.axes1);
val=dualcursor;
axes(handles.axes2);
pointer_switch=handles.pointer_switch;
%pointer_switch = str2num(pointer_switch);
if pointer_switch==2
    pointer_switch=3;
end

% Plotting LPC Spectrum

if get(handles.checkbox2,'value')==1
data=handles.data2;
else
data=handles.data;
end


Fs=handles.Fs;
N=256;
p=8;
x=data([val(pointer_switch)-(N/2-1)]:val(pointer_switch)+N/2);
a = lpc(x,p);
f = Fs*(0:N/2)/N;
h=(1./ fft([a zeros(1,N-(p+1))])).';
plot(f,abs(h(1:N/2+1)))
xlabel('Frequency(Hz)','fontsize',12);
ylabel('Amplitude','fontsize',12);

% Calculating Formants
roots_a=roots(a);
formants_a=angle(roots_a)/(2*pi)*8000;
a_sorted = sort(abs(formants_a));

% Displaying Data
set(handles.edit1,'string',num2str(a_sorted(2)));
set(handles.edit2,'string',num2str(a_sorted(4)));
set(handles.edit3,'string',num2str(a_sorted(6)));

fm = [a_sorted(2) a_sorted(4) a_sorted(6)];
handles.fm=fm;
guidata(hObject,handles);

% --- Executes during object creation, after setting all properties.
function listbox1_CreateFcn(hObject, eventdata, handles)
% hObject    handle to listbox1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: listbox controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc
    set(hObject,'BackgroundColor','white');
else
    set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end


% --- Executes on selection change in listbox1.
function listbox1_Callback(hObject, eventdata, handles)
% hObject    handle to listbox1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: contents = get(hObject,'String') returns listbox1 contents as cell array
%        contents{get(hObject,'Value')} returns selected item from listbox1


% --- Executes during object creation, after setting all properties.
function popupmenu1_CreateFcn(hObject, eventdata, handles)
% hObject    handle to popupmenu1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: popupmenu controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc
    set(hObject,'BackgroundColor','white');
else
    set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end


% --- Executes on selection change in popupmenu1.
function popupmenu1_Callback(hObject, eventdata, handles)
% hObject    handle to popupmenu1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: contents = get(hObject,'String') returns popupmenu1 contents as cell array
%        contents{get(hObject,'Value')} returns selected item from popupmenu1

pointer_switch = get(hObject,'value');
handles.pointer_switch=pointer_switch;
guidata(hObject,handles);



% --- Executes on button press in checkbox2.
function checkbox2_Callback(hObject, eventdata, handles)
% hObject    handle to checkbox2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'Value') returns toggle state of checkbox2

function pbRecord_Callback(hObject, eventdata, handles)

AI = analoginput('winsound');
chan = addchannel(AI,1);
duration = 1; %1 second acquisition
set(AI,'SampleRate',8000);
ActualRate = get(AI,'SampleRate');
set(AI,'SamplesPerTrigger',duration*ActualRate);
set(AI,'TriggerType','Manual');
blocksize = get(AI,'SamplesPerTrigger');
S.Fs = ActualRate;
t=linspace(0,duration,duration*ActualRate);
start(AI);
trigger(AI);
S.data = getdata(AI);
delete(AI);
clear AI;

axes(handles.axes1);
plot(S.data);
xlabel('Time(t)','fontsize',12);
ylabel('Amplitude','fontsize',12);

dualcursor;
handles.data=S.data;
handles.Fs=S.Fs;
N=256;
data2=zeros(N,1);
data2(1)=S.data(1);
data2=S.data(2:end)-0.95*S.data(1:end-1);
handles.data2=data2;

guidata(hObject,handles);



% --- Executes on button press in pbFFT.
function pbFFT_Callback(hObject, eventdata, handles)
% hObject    handle to pbFFT (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


axes(handles.axes1);
val=dualcursor;
axes(handles.axes2);
pointer_switch=handles.pointer_switch;
%pointer_switch = str2num(pointer_switch);
if pointer_switch==2
    pointer_switch=3;
end

% Plotting LPC Spectrum

if get(handles.checkbox2,'value')==1
data=handles.data2;
else
data=handles.data;
end


Fs=handles.Fs;
N=256;
x=data([val(pointer_switch)-(N/2-1)]:val(pointer_switch)+N/2);
a = fft(x,N);
f = Fs*(0:N/2)/N;
plot(f,abs(a(1:N/2+1)));
xlabel('Frequency(Hz)','fontsize',12);
ylabel('Amplitude','fontsize',12);



% Displaying Data
set(handles.edit1,'string','N/A');
set(handles.edit2,'string','N/A');


% --- Executes on button press in pbExport.
function pbExport_Callback(hObject, eventdata, handles)
% hObject    handle to pbExport (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
filecnt=handles.filecnt;
cdata=handles.fm'/4000;
if filecnt == 1
    fdata=cdata;
    save fdata.mat fdata;
else
    load fdata;
    fdata = [fdata cdata];
    save fdata.mat fdata;
end
filecnt=filecnt+1;
handles.filecnt=filecnt;
guidata(hObject,handles);