你不是登录.您的编辑将被放置在队列中,直到完成同行评议

我们欢迎编辑,使文章更容易理解和更有价值的读者。因为社区成员会审查编辑,所以请尽量让帖子比你发现它的时候更好,例如,通过修改语法或添加额外的资源和超链接。

地震波场的MATLAB解析解

我一直在试着求波在a中的解析解均匀无限媒体。对于给定的源$S(t)$,波场可以在给定速度$v$的距离$r$处计算

$$W(r)=F^{-1} [-i \pi S(\ ω)H_0^{(2)} (kr)]$$

这里$F^{-1}$表示傅里叶反变换。

$S(\omega)$是$S(t)$的频域表示

$H_0^{(2)} (kr)$是零阶第二类Hankel函数。

k是波数$(=\frac{\omega}{v})$。

我跟着这个链接用Python演示代码,但我无法在MATLAB中实现相同的代码。我也怀疑它是如何运作的。由于傅里叶变换有正频率和负频率(即$-f_{max}/2

我写了下面的MATLAB代码,但得到的波场所有条目都是NaN..!

Edit1

作为一个小修改,我强制Hankel函数的第一项为零(因为它在实部包含一个NaN)。现在它工作得很好,但它产生了两个峰。我认为这类似于频移效应,正如FFT后观察到的正频率和负频率,但它不是。在这种情况下,振幅是相反的。有人能解释一下吗?

在这里输入图像描述

Edit2

如果我假设解决方案中只有第一个峰值是正确的,那么第二个峰值的出现是因为某种影响(我不知道)。问题来了,当我改变dt(例如$dt \in 10^{-4}[1,2,3,4,....,10]$)解的形状和振幅会发生变化。在这里输入图像描述

任何帮助都是感激的。

clc;清除所有;关闭所有;vel=2000;介质速度% r=1000;波场观测距离%最终小波出现时间,t=r/vel=0.5秒t= 1;%总时间dt=.0001;%时间步长f0=25;N = round(T/dt);%样本数目t0 = 5/(√(2)*pi*f0); % Zero time shift t = dt*(0:N-1); % time vector tau = t-t0; % time vector shifted by t0 src = (1 -2* tau.*tau * f0^2 * pi^2).*exp(-tau.^2 * pi^2 * f0^2); %source wavelet %%FT of signal nfft=2^nextpow2(N); % no of fft points fmax=1/dt; % max frequency freq= fmax*(-nfft/2:nfft/2-1)/nfft; % Freq vector: -Fmax/2 < f < +Fmax/2 sw=fft(src,nfft)/nfft; % fourier transform of wavelet, S(w) sw_shift=fftshift(sw); % shifting to make S(w) amplitude corrosponding to above "freq" vector amp= abs(sw_shift); % amplitude of the S(w) %% Green Function %(I have taken only positive freq. since hankel func defined only for positive numbers. % Suggestions please..May be I am wrong..!) freq_new= fmax*(0:nfft/2-1)/nfft; w=2*pi*freq_new; const = -1i*pi; H02 = besselh(0,2,w*r/vel); H02(1)=eps; GF = const*H02; %% Calculating Wavefield %I have made Green Function (GF) symmetric and then multipled with source spectrum. GF_new=[fliplr(GF),GF]; WF= ifft(GF_new.*sw); t_new=dt*(0:length(WF)-1); %% Plot figure(); % Wavelet subplot(2,2,1); plot(t,src); title('\bf{Source wavelet}'); xlabel('Time(sec)'); ylabel('Amplitude ') % Frequencies subplot(2,2,2); plot(freq,amp); title('\bf{Source freq spec}'); xlabel('Frequencies(Hz)'); ylabel('Amplitude ') % Gneens Fkt subplot(2,2,3); plot(freq_new,abs(GF)); title('\bf{Green Function}'); xlabel('Frequencies(Hz)'); ylabel('Amplitude ') % Wafefield subplot(2,2,4); plot(t_new,real(WF)); title('\bf{Trace}'); xlabel('Time(sec)'); ylabel('Amplitude')

回答

取消

    Baidu
    map