MATLAB——Gabor变换实现过程及代码

Gabor变换也叫窗口傅里叶变换

\forall f\epsilon L(R),对于给定的常数a,b,称

Gf(a,b)=\int_{-\infty }^{+\infty} f(t)g(t-b)e^{-ita}dt

f(t)在窗口函数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对称变换频谱平面图');

最后形成如下所示的频谱图

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值