Gabor变换也叫窗口傅里叶变换
对于给定的常数a,b,称
为在窗口函数g下的Gabor变换。
窗口函数一般是具有紧支集或者速降为零的函数,常用的窗口函数有三个:
对于已知的分段线性函数如下,求其Gabor变换的频谱代码如下:
该过程分为两步:首先有一个Gb_fun子函数,输入变量a为窗口控制参数,b为平移参数,x为函数变量,输出变量为原始信号fun与窗口函数g的乘积
function gy=Gb_fun(a,b,c,x)
x=-5:0.2:10;
a=1;%高斯窗口函数的窗口大小参数
c=2;
b=-5:0.2:10;%平移参数,一般为原始信号长度
fun=@(x)0.*(x<0|x>5)+x.*(x>=0 & x<1)+1.*(x>=1 & x<4)+(5-x).*(x>=4 & x<5);%原始信号,是个分段函数
% g=@(a,x)1./(2*(pi.*a).^(1/2)).*exp(-x.^2./(4*a));%高斯窗口函数,对应第三个窗口函数
% g=@(x)0.*(x<-1|x>=1)+1.*(x>=-1 &x<1);
g=@(a,c,x)0.*(x>c)+1.*(x<=a)+(1-2*((x-a).^2./(c-a))).*(x>a &x<=(a+c)./2)+(2*(x-a).^2/(c-a)).*(x>(a+c)/2 &x<=c);
gy=g(a,c,x-b.*ones(size(x))).*fun(x);%窗口函数与原始信号的乘积
end
第二步:用主函数进行Gabor变换
clc,clear all close all
x=-5:0.2:10;
a=1;%高斯窗口函数的窗口大小参数
c=2;
b=-5:0.2:10;%平移参数,一般为原始信号长度
GDfy=zeros(length(b),length(b));
for i=1:length(b)
GDfy(i,:)=fft(Gb_fun(a,b(i),x));%针对不同的b的离散傅里叶变换
GDfy_shift(i,:)=fftshift(GDfy(i,:));%平移频率中心
end
figure,mesh(abs(GDfy)),xlabel('b'),ylabel('w'),zlabel('|Gabor(a,w)|'),title('gabor变换频谱立体图');
figure,imshow(abs(GDfy)),title('gabor变换频谱平面图');
figure,mesh(abs(GDfy_shift)),xlabel('b'),ylabel('w'),zlabel('|Gabor(a,w)|'),title('gabor对称变换变换频谱立体图');
figure,imshow(abs(GDfy_shift)),title('gabor对称变换频谱平面图');
最后形成如下所示的频谱图