MATLAB Matching Pursuit wmpdictionary using Gabor or customized atoms

陌路散爱 提交于 2019-12-11 03:22:47

问题


I'm using MATLAB 2013 which now includes Matching Pursuit algorithm. It has a function called wmpdictionary for creating a dictionary. As far as I know is capable of using the next functions to create atoms in the dictionary:

  • Discrete cosine transform-II basis
  • Sine
  • Cosine
  • Polynomial
  • The shifted Kronecker delta
  • A valid orthogonal or biorthogonal wavelet family

I want/need to use Gabor atoms.

Does someone knows how to use Gabor in wmpdictionary or alternatively a way to customize new kinds of atoms?.

------------------FINALLY SOLVED------------------ Well I found a formula for Gabor atoms in the paper [1]. I generated a dictionary using these functions:

function atom = getGaborAtom(N,scale,timeShift,frequency,phase)
%This function obtains a Gabor atom of given parameters
%N- Length of the signal
%scale- must be in number of samples
%timeShift - must be in number of samples
%frequency - its normalized frequency from 0 to 0.5   f/fs;
%Phase - a value from 0 to 2 pi
%This version uses the number of samples but seconds can also be used.

atom =zeros(N,1);
for n=1:N
    atom(n,1) = (1/sqrt(scale))*exp(-pi*(n-timeShift)^2/scale^2) * cos(2*pi*frequency*    (n-timeShift)+phase);
end
atom = (1/norm(atom)) .* atom;   %Normalization
end

function [dictionary parameters]=constructDictionaryGabor()
%Construct a Gabor dictionary 
%parameters are scale timeshift and frequency

N=256;  %Size of the atom
scales = [2^1 2^2 2^3 2^4];  %More scales can be added
freqs  = [0 .001 .002 .05 .1 .2 .3 .4 .5];  % f/fs normalized frequency. More freqs can be added
timeShifts = [0 64 128];  %More time shifts can be added
phase =0; %More phase values can be added, here I'm fixinf phase to 0


dictionary = zeros(N,length(scales)*length(freqs)*length(timeShifts)*length(phase));
parameters = zeros(3,length(scales)*length(freqs)*length(timeShifts)*length(phase);
contador = 1;

for t=1:length(timeShifts)
    for f=1:length(freqs)
        for s=1:length(scales)
            dictionary(:,contador) = getGaborAtom(N,scales(s),timeShifts(t),freqs(f),phase);
            parameters(:,contador) = [scales(s) timeShifts(t) freqs(f)];
            contador = contador+1;
        end
    end
end
end

This dictionary can be used with the function wmpdictionary, the matrix parameteres has the parameters per each atom.

[1] Environmental Sound Recognition With Time–Frequency Audio Features


回答1:


You should download and install MPTK, this toolkit has several features and is faster than wmpalg. You can also make multichannel decompositions and define your own dictionaries easily.




回答2:


You have to change this line

atom(n,1) = (1/sqrt(scale))*exp(-pi*(n-timeShift)^2/scale^2) * cos(2*pi*frequency*    (n-timeShift)+phase);

To

atom(n,1) = (1/sqrt(scale))*exp(-pi*(n-timeShift)^2/scale^2) * cos(2*pi*frequency*    (n-timeShift)/N+phase);


来源:https://stackoverflow.com/questions/21890533/matlab-matching-pursuit-wmpdictionary-using-gabor-or-customized-atoms

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!