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
\begin{aligned} &\widetilde{x}(n)=\sum_{m=1}^{M-1}\sum_{k=0}^{K-1}{\widetilde{a}_{mk}\widetilde{g}_{mk}}(n) \\ &\widetilde{a}_{mk}=\sum_{n=0}^{L-1}\widetilde{x}(n)\widetilde{w}^*_{mk}(n) \\ &\widetilde{g}_{mk}(n)=\widetilde{g}(n - mK)*e^{j2\pi nk/K} \\ &\widetilde{w}^*_{mk}(n)=\widetilde{w}(n - mK)*e^{j2\pi nk/K} \end{aligned}
x
(n)=m=1∑M−1k=0∑K−1a
mkg
mk(n)a
mk=n=0∑L−1x
(n)w
mk∗(n)g
mk(n)=g
(n−mK)∗ej2πnk/Kw
mk∗(n)=w
(n−mK)∗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
参考书籍:
《医学信号分析与处理》