Примеры Используя пакетные объекты дерева вейвлета

Можно использовать функции командной строки, приложение Wavelet Analyzer, или можно смешать их обоих, чтобы работать с пакетными деревьями вейвлета (объекты WPTREE). Самые полезные команды

  • plot, drawtree и readtree, которые позволяют вам построить и получить пакетное дерево вейвлета

  • wpjoin и wpsplt, которые позволяют вам изменить пакетную древовидную структуру вейвлета

  • get, read и write, которые позволяют вам читать и пишут коэффициенты или информацию в пакетном дереве вейвлета

Мы видим некоторые из этих функций в следующих примерах.

постройте и wpviewcf

load noisbump
x = noisbump;
t = wpdec(x,3,'db2');
fig = plot(t);

Нажмите на узел 7.

Измените Действие Узла от Visualize до Split-Merge и объедините второй узел.

% From the command line, you can get the new tree.
newt = plot(t,'read',fig);

% The first argument of the plot function in the last command
% is dummy. Then the general syntax is:
%    newt = plot(DUMMY,'read',fig);
% where DUMMY is any object parented by an NTREE object.
% DUMMY can be any object constructor name, which returns
% an object parented by an NTREE object. For example:
%    newt = plot(ntree,'read',fig);
%    newt = plot(dtree,'read',fig);
%    newt = plot(wptree,'read',fig);

% From the command line you can modify the new tree,
% then plot it.
newt = wpjoin(newt,3);
fig2 = plot(newt);

% Change Node Label from Depth_position to Index and
% click the node (3). You get the following figure.

% Using plot(newt,fig), the plot is done in the figure fig,
% which already contains a tree object.

% You can see the colored wavelet packets coefficients using
% from the command line, the wpviewcf function (type help
% wpviewcf for more information).
wpviewcf(newt,1)

% You get the following plot, which contains the terminal nodes
% colored coefficients.

drawtree и readtree

load noisbump
x = noisbump;
t = wpdec(x,3,'db2');
fig = drawtree(t);

% The last command creates a GUI. 
% The same GUI can be obtained using waveletAnalyzer and:
% - clicking the Wavelet Packet 1-D button,
% - loading the signal noisbump,
% - choosing the level and the wavelet
% - clicking the decomposition button. 
% You get the following figure.

% From the app, you can modify the tree. 
% For example, change Node label from Depth_Position to Index, 
% change Node Action from Visualize to Split_Merge and 
% merge the node 2. 
% You get the following figure.

% From the command line, you can get the new tree.
newt = readtree(fig);

% From the command line you can modify the new tree;
% then plot it in the same figure.
newt = wpjoin(newt,3);
drawtree(newt,fig);

Можно смешать предыдущие команды. Графический интерфейс пользователя, сопоставленный с командой plot, более прост и более быстр, но больше действий и информации являются доступными фрагментами использования приложения Wavelet Analyzer, связанного с пакетами вейвлета.

Методы, сопоставленные с объектами WPTREE, позволяют вам сделать более сложные действия.

А именно, с помощью read и методов write, можно изменить терминальные коэффициенты узла.

Давайте проиллюстрируем этот тезис со следующим “забавным” примером.

Измените терминальные коэффициенты узла

load gatlin2
t = wpdec2(X,1,'haar');
plot(t);
% Change Node Label from Depth_position to Index and
% click the node (0). You get the following figure.

% Now modify the coefficients of the four terminal nodes.
newt = t;
NBcols = 40;

for node = 1:4
  cfs = read(t,'data',node);
  tmp = cfs(1:end,1:NBcols);
  cfs(1:end,1:NBcols) = cfs(1:end,end-NBcols+1:end);
  cfs(1:end,end-NBcols+1:end) = tmp;
  newt = write(newt,'data',node,cfs);
end
plot(newt)

% Change Node Label from Depth_position to Index and
% click on the node (0). You get the following figure.

Можно использовать этот метод для более полезной цели. Давайте смотреть пример шумоподавления.

Пакеты вейвлета пороговой обработки

load noisbloc
x = noisbloc;
t = wpdec(x,3,'sym4');
plot(t);
% Change Node Label from Depth_position to Index and
% click the node (0). You get the following plot.

% Global thresholding.
t1 = t;
sorh = 'h';
thr = wthrmngr('wp1ddenoGBL','penalhi',t);
cfs = read(t,'data');
cfs = wthresh(cfs,sorh,thr);
t1  = write(t1,'data',cfs);
plot(t1)

% Change Node Label from Depth_position to Index and
% click the node (0). You get the following plot.

% Node by node thresholding. 
t2 = t;
sorh = 's';
thr(1) = wthrmngr('wp1ddenoGBL','penalhi',t);
thr(2) = wthrmngr('wp1ddenoGBL','sqtwologswn',t);
tn  = leaves(t);
for k=1:length(tn)
  node = tn(k);
  cfs = read(t,'data',node);
  numthr = rem(node,2)+1;
  cfs = wthresh(cfs,sorh,thr(numthr));
  t2 = write(t2,'data',node,cfs);
end
plot(t2)

% Change Node Label from Depth_position to Index and
% click the node (0). You get the following plot.