我一直在试图评估一波的解析解在一个旅行均匀,无限媒体。对于一个给定的源S (t)美元,可以将波场计算距离r美元,对于一个给定的速度v美元
W (r) = F $ $ ^ {1} [i \πS(\ω)H_0 ^ {(2)} (kr)] $ $
这里F $ ^{1} $代表傅里叶反变换。
S(\ω)是美元的频域表示S (t)美元
美元H_0 ^ {(2)} (kr)美元是汉克尔函数的零阶和第二种。
和$ k是波数美元(= \压裂{\ω}{v})美元。
我跟着这链接演示代码在Python中,然而,我不能在MATLAB中实现相同。我也怀疑它是如何工作的。傅里叶变换以来积极以及消极频率(例如$ f{马克斯}/ 2 < f < f{马克斯}/ 2美元)但是代码之间的链接需要频率0 f{马克斯}< f <美元计算Hankal函数。
我写了下面的MATLAB代码但得到了波场所有条目南. . !
Edit1
作为一个小的修改,我迫使汉克尔函数的第一项为零(因为它是包含一个南实部)。现在工作好但它产生的两座山峰。我认为这是类似于频移效应,作为正面和负面频率FFT后观察,但事实并非如此。在这种情况下振幅是相反的。谁能解释一下吗?
Edit2
如果我认为唯一中的第一个高峰的解决方案是正确的,第二是因为一些影响(我不知道)。问题是当我改变dt在10 ^(例如美元dt \{4}[1、2、3、4、...., 10] $)解决方案的形状和幅度的变化。
任何帮助都是感激。
clc;清除所有;关闭所有;% %参数设置或者= 2000;%的速度中r = 1000;将观察到的波场% %距离最后的小波应该出现在时间,t = r /韦尔= 0.5秒t = 1;%总时间dt =。;%时间步f0 = 25;中央频率% % %创建源小波N =圆(T / dt);%没有样本t0 = 5 /(√(2) *π* 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')