⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 buildg.m

📁 Sparse Signal Representation using Overlapping Frames (matlab toolbox)
💻 M
字号:
function [F,G]=BuildG(Fg,delta)% BulidG    Build the G matrix and F vector from Fg matrix
%           (Fg for type 'g' correspond to F for type 'b' and 'o')
% Fg(n,k,p)=sign*F(q)  <==>  G(n,k,p)=sign*q     and
% Fg(n,k,p)=0          <==>  G(n,k,p)=0 
%
% [F,G]=BuildG(Fg,delta);% -----------------------------------------------------------------------------------
% Arguments:
%   F         - a vector of all the different variables in F, size Qx1
%   G         - the "mapping" from F to Fg, Fg(n,k,p)=sign*F(q) <==> G(n,k,p)=sign*q 
%               size NxKxP
%   Fg        - the general frame Fg, size NxKxP.
%   delta     - a small number, numbers which differece is smaller than
%               delta are considered to be equal. Default is 5*eps
%               use delta=0 to let all non-zero variables be free
% -----------------------------------------------------------------------------------

%----------------------------------------------------------------------
% Copyright (c) 1999.  Karl Skretting.  All rights reserved.
% Hogskolen in Stavanger (Stavanger University), Signal Processing Group
% Mail:  karl.skretting@tn.his.no   Homepage:  http://www.ux.his.no/~karlsk/
% 
% HISTORY:  dd.mm.yyyy
% Ver. 1.0  09.01.2001  KS: functio made
% Ver. 1.1  04.12.2002  KS: moved from ..\Frames\ to ..\FrameTools%----------------------------------------------------------------------
Mfile='BuildG';
Display=1;          % should this function display status messsages

if (nargin < 2)
   delta=5*eps;
end
if (nargin < 1)
   error([Mfile,': wrong number of arguments, see help.']);
end

[N,K,P]=size(Fg);
Fg=Fg(:);
G=zeros(N*K*P,1);
Q=0;
F=[];
for i=1:(N*K*P)
   if delta
      if abs(Fg(i))>delta
         q=1;
         while q<=Q
            if (abs(abs(F(q))-abs(Fg(i)))<delta)
               G(i)=q*sign(Fg(i))*sign(F(q));
               break;
            end
            q=q+1;
         end
         if q>Q
            % a new value 
            q=Q+1;Q=q;
            F=[F;Fg(i)];
            G(i)=q;
         end
      end
   else
      if Fg(i)
         Q=Q+1;
         F=[F;Fg(i)];
         G(i)=Q;
      end
   end
end

G=reshape(G,N,K,P);

return

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -