Morlet小波函数的傅里叶变换?

信息处理 matlab fft 傅里叶变换 小波
2022-01-26 06:59:48

Morlet 小波函数的一种定义由下式给出:

1πfbet2fbej2πfct
该方程的傅里叶变换为: eπ2fb(ffc)2(这样对吗)?
首先,我尝试FFT在 Matlab 中逐个函数绘制 Morlet 函数的 FFT,然后我直接绘制了傅里叶变换函数。我预计会看到相同的图,但不幸的是它们的大小不同(为什么?)。我发布了情节和我的代码,你知道为什么会这样吗?我的代码有问题吗?或者得到的傅里叶变换有什么问题?或者Matlab内置FFT函数有什么问题?

在此处输入图像描述 我编写了这个脚本来获取这些图:

clear all;
fS = 500;
tStart= -4;
tStop= 4;
timeVector = linspace(tStart,tStop, (tStop-tStart)*fS );
fC = 2;
fB=2;
timeMask = zeros(1,length(timeVector));
timeMask((timeVector >= -fB/2) & (timeVector <= fB/2)) = 1;
psiWavelet = ((pi*fB))^(-0.5).*...                   % Morlet function
exp(2*1i*pi*fC.*timeVector).*exp(-timeVector.^2/fB); % Morlet function
%      FFT plot by matlab bulit-in FFT function
     Nfft =10*2^nextpow2(length(timeVector));
    FFT =fftshift(abs(fft(psiWavelet,Nfft)));
    freqs=[0:Nfft - 1].*(fS/Nfft);
    freqs(freqs >= fS/2) = freqs(freqs >= fS/2) - fS;
    freqs=fftshift(freqs);
    figure(2);
    subplot(1,2,1)
    plot(freqs, FFT); 
    xlim([-1  5]);
    xlabel('Frequency / Hz');
    title (sprintf('Fourier Transform'));
%     FFT plot by its direct fourier transfrom function
    f_psi=exp(-(pi^2*fB)*(freqs-fC).^2);
    subplot(1,2,2)
    plot(freqs,f_psi)
    xlim([-1  5]);
2个回答

如果你近似傅里叶变换

X(f)=F(x)(f)=x(t)e2πjftdt

通过离散傅里叶变换,通过在时间段上采样[T,T]作为

X(fn)k=NN1x(kτ)e2πjfnkττ=s[n]τ

T=Nτ,fn=n/(Nτ)=n/Nfs=n/T,n=N,...,N1,sFFT 对采样的结果x换班后的顺序,...

那么你必须将 FFT 方法的结果乘以τ=T/N=1/fs.

对于 Morlet 小波的傅立叶变换 (FT),我也得出了与 @Electricman 相同的方程。基于该等式,我寻求之间的关系fb以及 FT 的高斯形式的标准差。是否有任何可引用的已发表文献(书籍或期刊文章)得出以下推导?

X(f)=F(x)(f)=eπ2fb(ffc)2

将其重新排列为熟悉的高斯形式,

X(f)=e(ffc)22(1π2fb))2

标准差(σf)那么这个频域高斯的,

σf=1π2fb
重新整理一下,
fb=12(πσf)2