function varargout = wavelt2(varargin)
% WAVELT2 MATLAB code for wavelt2.fig
% WAVELT2, by itself, creates a new WAVELT2 or raises the existing
% singleton*.
%
% H = WAVELT2 returns the handle to a new WAVELT2 or the handle to
% the existing singleton*.
%
% WAVELT2('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in WAVELT2.M with the given input arguments.
%
% WAVELT2('Property','Value',...) creates a new WAVELT2 or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before wavelt2_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to wavelt2_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 wavelt2
% Last Modified by GUIDE v2.5 21-Mar-2014 11:10:28
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @wavelt2_OpeningFcn, ...
'gui_OutputFcn', @wavelt2_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
% End initialization code - DO NOT EDIT
% --- Executes just before wavelt2 is made visible.
function wavelt2_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 wavelt2 (see VARARGIN)
% Choose default command line output for wavelt2
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes wavelt2 wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = wavelt2_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 selection change in listbox2.
function listbox2_Callback(hObject, eventdata, handles)
% hObject handle to listbox2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: contents = cellstr(get(hObject,'String')) returns listbox2 contents as cell array
% contents{get(hObject,'Value')} returns selected item from listbox2
% --- Executes during object creation, after setting all properties.
function listbox2_CreateFcn(hObject, eventdata, handles)
% hObject handle to listbox2 (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 && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global data;
w='db2';
%对信号做层数为5的多尺度分解
x(1,:)=data(1,:)-mean(data(1,:));
[c1,l1]=wavedec(x(1,:),5,w);
%重建得到5个尺度的细节系数和近似系数
for j=1:5
D1(j,:)=wrcoef('d',c1,l1,w,j);
end
A1(5,:)=wrcoef('a',c1,l1,w,5);
tt=0.1:0.001:(length(data(1,:)-100))/1000;
i=100:length(data(1,:)-100);
axes(handles.axes1);
subplot(7,1,1);plot(tt,data(1,i));ylabel('signal','fontSize',6);
axes(gca);set(gca,'fontsize',6);
subplot(7,1,2);plot(tt,A1(5,i));ylabel('d6','fontSize',6);
axes(gca);set(gca,'fontsize',6);
subplot(7,1,3);plot(tt,D1(5,i));ylabel('d5','fontSize',6);
axes(gca);set(gca,'fontsize',6);
subplot(7,1,4);plot(tt,D1(4,i));ylabel('d4','fontSize',6);
axes(gca);set(gca,'fontsize',6);
subplot(7,1,5);plot(tt,D1(3,i));ylabel('d3','fontSize',6);
axes(gca);set(gca,'fontsize',6);
subplot(7,1,6);plot(tt,D1(2,i));ylabel('d2','fontSize',6);
axes(gca);set(gca,'fontsize',6);
subplot(7,1,7);plot(tt,D1(1,i));ylabel('d1','fontSize',6);
axes(gca);set(gca,'fontsize',6);
x(2,:)=data(2,:)-mean(data(2,:));
[c2,l2]=wavedec(x(2,:),5,w);
for j=1:5
D2(j,:)=wrcoef('d',c2,l2,w,j);
end
A2(5,:)=wrcoef('a',c2,l2,w,5);
axes(handles.axes2);
subplot(7,1,1);plot(tt,data(2,i));ylabel('signal','fontSize',6);
axes(gca);set(gca,'fontsize',6);
subplot(7,1,2);plot(tt,A2(5,i));ylabel('d6','fontSize',6);
axes(gca);set(gca,'fontsize',6);
subplot(7,1,3);plot(tt,D2(5,i));ylabel('d5','fontSize',6);
axes(gca);set(gca,'fontsize',6);
subplot(7,1,4);plot(tt,D2(4,i));ylabel('d4','fontSize',6);
axes(gca);set(gca,'fontsize',6);
subplot(7,1,5);plot(tt,D2(3,i));ylabel('d3','fontSize',6);
axes(gca);set(gca,'fontsize',6);
subplot(7,1,6);plot(tt,D2(2,i));ylabel('d2','fontSize',6);
axes(gca);set(gca,'fontsize',6);
subplot(7,1,7);plot(tt,D2(1,i));ylabel('d1','fontSize',6);
axes(gca);set(gca,'fontsize',6);
x(3,:)=data(3,:)-mean(data(3,:));
[c3,l3]=wavedec(x(3,:),5,w)
for j=1:5
D3(j,:)=wrcoef('d',c3,l3,w,j);
end
A3(5,:)=wrcoef('a',c3,l3,w,5);
axes(handles.axes3);
subplot(7,1,1);plot(tt,data(3,i));ylabel('signal','fontSize',6);
axes(gca);set(gca,'fontsize',6);
subplot(7,1,2);plot(tt,A3(5,i));ylabel('d6','fontSize',6);
axes(gca);set(gca,'fontsize',6);
subplot(7,1,3);plot(tt,D3(5,i));ylabel('d5','fontSize',6);
axes(gca);set(gca,'fontsize',6);
subplot(7,1,4);plot(tt,D3(4,i));ylabel('d4','fontSize',6);
axes(gca);set(gca,'fontsize',6);
subplot(7,1,5);plot(tt,D3(3,i));ylabel('d3','fontSize',6);
axes(gca);set(gca,'fontsize',6);
subplot(7,1,6);plot(tt,D3(2,i));ylabel('d2','fontSize',6);
axes(gca);set(gca,'fontsize',6);
subplot(7,1,7);plot(tt,D3(1,i));ylabel('d1','fontSize',6);
axes(gca);set(gca,'fontsize',6);
x(4,:)=data(4,:)-mean(data(4,:));
[c4,l4]=wavedec(x(4,:),5,w);
for j=1:5
D4(j,:)=wrcoef('d',c4,l4,w,j);
end
A4(5,:)=wrcoef('a',c4,l4,w,5);
axes(handles.axes4);
subplot(7,1,1);plot(tt,data(4,i));ylabel('signal','fontSize',6);
axes(gca);set(gca,'fontsize',6);
subplot(7,1,2);plot(tt,A4(5,i));ylabel('d6','fontSize',6);
axes(gca);set(gca,'fontsize',6);
subplot(7,1,3);plot(tt,D4(5,i));ylabel('d5','fontSize',6);
axes(gca);set(gca,'fontsize',6);
subplot(7,1,4);plot(tt,D4(4,i));ylabel('d4','fontSize',6);
axes(gca);set(gca,'fontsize',6);
subplot(7,1,5);plot(tt,D4(3,i));ylabel('d3','fontSize',6);
axes(gca);set(gca,'fontsize',6);
subplot(7,1,6);plot(tt,D4(2,i));ylabel('d2','fontSize',6);
axes(gca);set(gca,'fontsize',6);
subplot(7,1,7);plot(tt,D4(1,i));ylabel('d1','fontSize',6);
axes(gca);set(gca,'fontsize',6);
x(5,:)=data(5,:)-mean(data(5,:));
[c5,l5]=wavedec(x(5,:),5,w);
for j=1:5
D5(j,:)=wrcoef('d',c5,l5,w,j);
end
A5(5,:)=wrcoef('a',c5,l5,w,5);
axes(handles.axes5);
subplot(7,1,1);plot(tt,data(5,i));ylabel('signal','fontSize',6);
axes(gca);set(gca,'fontsize',6);
subplot(7,1,2);plot(tt,A5(5,i));ylabel('d6','fontSize',6);
axes(gca);set(gca,'fontsize',6);
subplot(7,1,3);plot(tt,D5(5,i));ylabel('d5','fontSize',6);
axes(gca);set(gca,'fontsize',6);
subplot(7,1,4);plot(tt,D5(4,i));ylabel('d4','fontSize',6);
axes(gca);set(gca,'fontsize',6);
subplot(7,1,5);plot(tt,D5(3,i));ylabel('d3','fontSize',6);
axes(gca);set(gca,'fontsize',6);
subplot(7,1,6);plot(tt,D5(2,i));ylabel('d2','fontSize',6);
axes(gca);set(gca,'fontsize',6);
subplot(7,1,7);plot(tt,D5(1,i));ylabel('d1','fontSize',6);
axes(gca);set(gca,'fontsize',6);
x(6,:)=data(6,:)-mean(data(6,:));
[c6,l6]=wavedec(x(6,:),5,w);
for j=1:5
D6(j,:)=wrcoef('d',c6,l6,w,j);
end
A6(5,:)=wrcoef('a',c6,l6,w,5);
axes(handles.axes6);
subplot(7,1,1);plot(tt,data(6,i));ylabel('signal','fontSize',6);
axes(gca);set(gca,'fontsize',6);
subplot(7,1,2);plot(tt,A6(5,i));ylabel('d6','fontSize',6);
axes(gca);set(gca,'fontsize',6);
subplot(7,1,3);plot(tt,D6(5,i));ylabel('d5','fontSize',6);
axes(gca);set(gca,'fontsize',6);
subplot(7,1,4);plot(tt,D6(4,i));ylabel('d4','fontSize',6);
axes(gca);set(gca,'fontsize',6);
subplot(7,1,5);plot(tt,D6(3,i));ylabel('d3','fontSize',6);
axes(gca);set(gca,'fontsize',6);
subplot(7,1,6);plot(tt,D6(2,i));ylabel('d2','fontSize',6);
axes(gca);set(gca,'fontsize',6);
subplot(7,1,7);plot(tt,D6(1,i));ylabel('d1','fontSize',6);
axes(gca);set(gca,'fontsize',6);
%计算熵
[Ea1,Ed1]=wenergy(c1,l1);
[Ea2,Ed2]=wenergy(c2,l2);
[Ea3,Ed3]=wenergy(c3,l3);
[Ea4,Ed4]=wenergy(c4,l4);
[Ea5,Ed5]=wenergy(c5,l5);
[Ea6,Ed6]=wenergy(c6,l6);
e1=sum(Ed1)+Ea1;
e2=sum(Ed2)+Ea2;
e3=sum(Ed3)+Ea3;
e4=sum(Ed4)+Ea4;
e5=sum(Ed5)+Ea5;
e6=sum(Ed6)+Ea6;
sa1=-Ea1/e1*log10(Ea1/e1);
sa2=-Ea2/e2*log10(Ea2/e2);
sa3=-Ea3/e3*log10(Ea3/e3);
sa4=-Ea4/e4*log10(Ea4/e4);
sa5=-Ea5/e5*log10(Ea5/e5);
sa6=-Ea6/e6*log10(Ea6/e6);
for k=1:5
sb1=-Ed1(k)/e1*log10(Ed1(k)/e1);
sb2=-Ed2(k)/e2*log10(Ed2(k)/e2);
sb3=-Ed3(k)/e3*log10(Ed3(k)/e3);
sb4=-Ed4(k)/e4*log10(Ed4(k)/e4);
sb5=-Ed5(k)/e5*log10(Ed5(k)/e5);
sb6=-Ed6(k)/e6*log10(Ed6(k)/e6);
end
E(1)=sa1+sum(sb1);
E(2)=sa2+sum(sb2);
E(3)=sa3+sum(sb3);
E(4)=sa4+sum(sb4);
E(5)=sa5+sum(sb5);
E(6)=sa6+sum(sb6);
set(handles.listbox,'string',num2str(E));
这段代码是一个用MATLAB编写的图形用户界面(GUI)应用程序。它的主要功能是对信号进行小波变换和多尺度分解,并显示结果。
该代码使用MATLAB的GUI开发工具(GUIDE)生成。它创建了一个名为"wavelt2"的GUI窗口,包含多个控件,例如列表框、按钮和轴。用户可以通过选择列表框中的信号,在GUI中显示该信号的多尺度分解结果。
具体来说,该代码实现了以下功能:
1.初始化和设置GUI窗口。
2.响应用户操作,例如点击按钮或选择列表框中的信号。
3.将所选信号进行小波变换和多尺度分解。
4.将分解后的信号绘制在GUI的不同轴上,以显示原始信号和每个尺度的近似系数和细节系数。
5.计算并显示每个尺度的能量和熵。
这段代码中的注释提供了更详细的解释和说明,包括函数的用途和参数的含义。通过GUI窗口中的控件和相应的回调函数,用户可以与代码交互并查看信号的分解结果。
这段代码是一个 MATLAB 图形用户界面(GUI)的代码。它实现了一个名为 "wavelt2" 的图形界面,用于对信号进行小波变换和多尺度分析。
该代码使用了 MATLAB 的 GUI 设计工具 GUIDE(Graphical User Interface Development Environment),并通过回调函数处理用户界面的事件。以下是代码的主要部分和功能说明:
wavelt2_OpeningFcn
: 在打开 GUI 界面时执行的函数,用于初始化界面和数据。listbox2_Callback
和 listbox2_CreateFcn
: 处理一个名为 listbox2
的列表框的事件,当用户选择列表框中的项时触发。pushbutton1_Callback
: 处理一个名为 pushbutton1
的按钮的事件,当用户点击按钮时触发。该函数包含了对信号进行小波分解和绘图的逻辑。在 pushbutton1_Callback
函数中,首先从全局变量 data
中读取信号数据,然后使用指定的小波基('db2'
)对信号进行 5 层的小波分解。接着,根据分解结果重建出每个尺度的细节系数和近似系数。
最后,使用 MATLAB 的绘图函数在界面上的不同子图中绘制出原始信号和各个尺度的细节系数和近似系数。同时,还计算了每个尺度的能量和熵,并进行了相应的数学计算。
需要注意的是,这段代码可能是从 MATLAB 的 GUIDE 工具自动生成的,用于实现特定的小波变换和多尺度分析功能。具体的功能和输入要求可能需要查看相关的 GUI 界面文件和其他相关代码文件来确定。
称为编译器的特殊程序将源代码转换为计算机 CPU 可执行的其他格式。
为什么需要编译代码? 尽管大多数编程语言最初看起来都很难懂,但比起计算机的首选语言(通过打开或关闭数千或数百万个小开关来表达),人类更容易理解它们。 编译器通过将人类可读的指令转换为计算机可理解的指令集来连接这两个世界。
根据参考资料的描述,给出的代码是静态代理的示例。静态代理是在不改变原始类代码的情况下,对原始类进行功能上的增强。
BookDAO
,其中只有一个方法 listAllBook
。BookDaoImpl
,其中 listAllBook
方法进行了模拟查询,并休眠了一段随机时间。BookDaoTimeProxy
,它实现了 BookDAO
接口,构造函数中传入一个实现了该接口的类。在 listAllBook
方法中,先记录执行开始的时间,然后调用传入的实现类的 listAllBook
方法,最后记录执行结束的时间,并输出执行耗时。Main
类中创建了一个 BookDaoImpl
实例 bookDAO
,然后创建了一个 BookDaoTimeProxy
实例 bookDaoTimeProxy
,并将 bookDAO
传入构造函数。最后调用 bookDaoTimeProxy
的 listAllBook
方法。该示例的目的是给原始类添加计时功能,即每次查询的耗时统计。通过创建代理类 BookDaoTimeProxy
来实现,在代理类中先记录开始时间,然后调用实际的查询方法,最后记录结束时间并输出耗时。这样就不需要修改原始类 BookDaoImpl
的代码,实现了对原始类功能的增强。
静态代理的缺点是对于每个类型的代理都需要声明一个类,并且如果接口中有多个方法,代理类需要将所有方法声明和实现,导致代码繁琐。接下来可以看一下动态代理如何解决这些问题。