• Gabor 分解原理和代码实现


    Gabor 分解

    学一下Gabor分解:

    基本概念:

    信号处理中,使用非正交的基函数对信号进行分解的一种方法。而傅里叶分析例如DFT则是使用正交的基函数进行分解。

    临界采样的Gabor分解,离散分解表示成:
    x ~ ( n ) = ∑ m = 1 M − 1 ∑ k = 0 K − 1 a ~ m k g ~ m k ( n ) a ~ m k = ∑ n = 0 L − 1 x ~ ( n ) w ~ m k ∗ ( n ) g ~ m k ( n ) = g ~ ( n − m K ) ∗ e j 2 π n k / K w ~ m k ∗ ( n ) = w ~ ( n − m K ) ∗ e j 2 π n k / K

    x~(n)=m=1M1k=0K1a~mkg~mk(n)a~mk=n=0L1x~(n)w~mk(n)g~mk(n)=g~(nmK)ej2πnk/Kw~mk(n)=w~(nmK)ej2πnk/K" role="presentation">x~(n)=m=1M1k=0K1a~mkg~mk(n)a~mk=n=0L1x~(n)w~mk(n)g~mk(n)=g~(nmK)ej2πnk/Kw~mk(n)=w~(nmK)ej2πnk/K
    x (n)=m=1M1k=0K1a mkg mk(n)a mk=n=0L1x (n)w mk(n)g mk(n)=g (nmK)ej2πnk/Kw mk(n)=w (nmK)ej2πnk/K

    代码实现:

    function [amk, w] = gabor_translater(x, g, M, K)
    %gabor变换
    % x:待分析的实数信号
    % g:综合窗函数序列
    % M:时域离散采样数
    % K:频域离散采样数
    % amk:gabor变换系数,复数矩阵
    % w:分析窗函数
     
    L = length(x);
    G = zeros(L, L);
    if L - M * K ~= 0 %不是临界Gabor变换
        amk = [];
        w = [];
    else %是临界Gabor变换
        % 计算分析窗函数序列
        for mi = 0 : M - 1
            for ki = 0 : K - 1
                ind = (0 : L - 1) + mi * K;
                tL = find(ind > L - 1);
                if ~isempty(tL)
                    ind(tL) = ind(tL) - L;
                end
                ti = find(ind < 0);
                if ~isempty(ti)
                    ind(ti) = ind(ti) + L;
                end
                G(mi * K * ki + 1, :) = conj(g(ind + 1)).*exp(1i * 2 * pi *ki * (0 : L-1) / K);
            end
        end
        b = [1 zeros(1, L-1)]';
        w = real(G \ b); %求分析窗函数
        %计算Gabor系数
        amk = zeros(L, L);
        for mi = 0 : M -1
            for ki = 1 : K
                ind = (0 : L - 1) + mi * K;
                tL = find(ind > L - 1);
                if ~isempty(tL)
                    ind(tL) = ind(tL) - L;
                end
                ti = find(ind < 0); %防止数组越界
                if ~isempty(ti)
                    ind(ti) = ind(ti) + L;
                end
                wmk = w(ind + 1, 1)'.*exp(1i * 2 * pi * ki * (0 : L-1) / K);%综合窗函数
                amk(mi + 1, ki) = sum(x.*conj(wmk)); %Gabor变换分解系数
            end
        end
    end
    end
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51

    参考书籍:

    《医学信号分析与处理》

  • 相关阅读:
    PeLK:通过周边卷积的参数高效大型卷积神经网络
    39.(前端)欢迎页面的设置
    视频集中存储/云存储平台EasyCVR级联下级平台的详细步骤
    12 项目采购管理
    轨道交通工业控制系统信息安全:分析与展望
    Pytorch——实现Tensor矩阵的任意角度旋转、平移操作
    删除链表中重复元素的问题
    int和Interger区别
    采用一种估值方法,自动化评估某个股票价格合理性
    ReentrantLock与ReentrantReadWirteLock 原理
  • 原文地址:https://blog.csdn.net/KPer_Yang/article/details/127592959