Приложение: Текст разработанной программы
function varargout = mygui_v11_2(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @mygui_v11_2_OpeningFcn, ...
'gui_OutputFcn', @mygui_v11_2_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(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
function mygui_v11_2_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);
function varargout = mygui_v11_2_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
%----------------------------------------------------------------------
% кнопка открыть файл
function pushbutton1_Callback(hObject, eventdata, handles)
filepath=uigetfile({'*.txt','Файл с сигналом (*.txt)'},'Выбор сигнала','Сигнал_11_2.txt');
handles.signal=load(filepath);
handles.signal=handles.signal-mean(handles.signal);
handles.fd=4;
handles.t=120;
if exist('handles.scale','var')==0
handles.scale='linear';
end
if exist('handles.segsize','var')==0
handles.segsize=100;
end
drawsignal(handles.signal,handles.axes1,handles);
drawspm(handles.signal,handles.axes2,handles);
drawakf(handles.signal,handles.axes3,handles);
set(handles.uipanel4,'visible','on');
guidata(hObject, handles);
% кнопка фильтровать
function pushbutton2_Callback(hObject, eventdata, handles)
load('filter_coef_ss_v11_2.mat');
handles.filteredsignal=filter(Num,Den,handles.signal);
drawsignal(handles.filteredsignal,handles.axes4,handles);
drawspm(handles.filteredsignal,handles.axes5,handles);
drawakf(handles.filteredsignal,handles.axes6,handles);
guidata(hObject, handles);
% вывод вср
function drawsignal(signal,axe,handles)
tt=0:1/handles.fd:(length(signal)/handles.fd-1/handles.fd);
axes(axe);
plot(tt,signal);
grid on;
set(axe,'XLim',[0 handles.t],'YLimMode','auto');
% вывод акф
function drawakf(signal,axe,handles)
akf=xcorr(signal,round(length(signal)/2),'coeff');
tmax=length(akf)/handles.fd;
lt=(-tmax+1/handles.fd)/2;
rt=(tmax-1/handles.fd)/2;
tt=lt:1/handles.fd:rt;
axes(axe);
plot(tt,akf);
grid on;
set(axe,'YLim',[-1 +1],'XLim',[lt rt]);
% вывод спм
function drawspm(signal,axe,handles)
[spm,f]=pwelch(signal,handles.segsize,80,2048);
axes(axe);
plot(f,spm);
grid on;
set(axe,'YScale',handles.scale);
set(axe,'XLim',[0 max(f)],'YLimMode','auto');
% переключатель масштаба
function uipanel2_SelectionChangeFcn(hObject, eventdata, handles)
selection=get(hObject,'Tag');
switch selection
case 'rblin'
handles.scale='linear';
set(handles.axes2,'YScale','linear');
set(handles.axes5,'YScale','linear');
case 'rblog'
handles.scale='log';
set(handles.axes2,'YScale','log');
set(handles.axes5,'YScale','log');
end
guidata(hObject,handles);
% переключатель размера сегмента
function uipanel6_SelectionChangeFcn(hObject, eventdata, handles)
handles.segsize=get(hObject,'UserData');
drawspm(handles.signal,handles.axes2,handles);
if isempty(handles.filteredsignal) || ~exist('handles.filteredsignal','var')
drawspm(handles.filteredsignal,handles.axes5,handles);
end
guidata(hObject,handles);