%generateDictionaries creates to vectors of MATLAB structures. Both hold scale position and frequency of atoms from an optimally sampled dictionary. The first return argument holds atoms metrically equidistant from direct neighbours. The second adds a stochastic element to the parameter values. Usage: % %[GaborsFixed,GaborsStochastic]=generateDictionaries(SignalSize,Base); function [gaborsFixed, gaborStochastic]=generateDictionaries(SignalSize,Base) C=0.5*log(0.5*(Base+1./Base)); ScaleStep=Base; numberOfLevels=log(SignalSize)/log(Base); scalefloat=SignalSize*ScaleStep; EPS=10^(-5); k=1; for w=1:numberOfLevels scalefloat=scalefloat/ScaleStep; FreqStep=sqrt(8*pi*C)/scalefloat; TimeStep=scalefloat*sqrt(2*C/pi); for v=FreqStep/2:FreqStep:pi TimeStep=scalefloat*sqrt(2*C/pi); for u=(TimeStep/2):TimeStep:SignalSize gaborsFixed(k).scale=round(scalefloat/ScaleStep); gaborsFixed(k).position=round(u); gaborsFixed(k).freq=v; k=k+1; end end end scalefoat=SignalSize*ScaleStep; EPS=10^(-10); k=1; for w=1:numberOfLevels scalefloat=scalefloat/ScaleStep; FreqStep=sqrt(8*pi*C)/scalefloat; TimeStep=scalefloat*sqrt(2*C/pi); for v=EPS:FreqStep:FreqStep:pi TimeStep=scalefloat; for u=EPS::TimeStep:SignalSize gaborStochastic(k).scale=round(scalefloat/ScaleStep + rand(1)*(scalefloat-scalefloat/ScaleStep)); gaborStochastic(k).position=round(u+rand(1)*TimeStep); gaborStochastic(k).freq=v+rand(1)*FreqStep; k=k+1; end end end