?? rsgeno.m
字號(hào):
function [f,df,x]=rsgeno(N,rL,kl,ku,us,seed);
%rsgeno generates 1D random rough surfaces with bandlimited ocean spectrum.
%
% [f,df,x]=rsgeno(N,rL,kl,ku,us,seed)
%
% INPUT:
%
% N=total number of sample points
% rL=rough surface length
% kl=lower wavenumber cutoff
% ku=upper wavenumber cutoff
% us=wind friction velocity
% seed=seed of random number generator
%
% OUTPUT:
%
% f=rough surface profile
% df=df/dx
% x=sample points on the surface
%
% -- Part of the Electromagnetic Wave MATLAB Library (EWML) --
% <http://www.emwave.com/>
% Original: C. O. Ao, 2000.
randn('seed',seed);
y=randn(N,1);
for n=1:(N/2-1);
bh(n)=(y(2*n-1)+i*y(2*n))/sqrt(2);
end;
bhc=conj(bh);
bhf=fliplr(bhc);
bi=[bh y(N-1) bhf y(N)];
kx=2.*pi*[-N/2+1:1:N/2]/rL;
y1=zeros(size(kx));
i1=find(abs(kx) >= kl & abs(kx) <= ku);
y1(i1)=sqrt(wkos(kx(i1),us));
y=y1*sqrt(2*pi*rL);
b=y.*bi;
xs=[b(N/2+1:1:N) b(1:1:N/2)];
xt=[xs(N),xs(1:1:N-1)];
ft=ifft(xt,N);
ft=ft*N/rL;
fs=[ft(2:1:N),ft(1)];
f=[fs(N/2+1:1:N) fs(1:1:N/2)];
f=real(f);
dx=rL/N;
x=[-N/2+1:1:N/2]*dx;
n=2:N-1;
df1=(f(n+1)-f(n-1))/(2*dx);
df=[(f(2)-f(N))/(2*dx),df1,(f(1)-f(N-1))/(2*dx)];
%%%%%%%%%%%%%%%%%%%%%
% 1D ocean spectrum %
%%%%%%%%%%%%%%%%%%%%%
function y=wkos(kx,us)
kr=abs(kx);
%a0=0.008;
a0=0.004;
a=0.225;
b=1.25;
kj=2;
gs=9.81+7.25e-5*kx.^2;
z0=6.84e-5/us+4.28e-3*us^2-4.43e-4;
U195=us/0.4*log(19.5/z0);
kc=9.81/U195^2;
i1=find(kr>kj);
kr1=kr(i1);
y(i1)=(a0./kr1.^3).*(b*kr1*us^2./gs(i1)).^(a*log10(kr1/kj));
i2=find(kr<=kj);
kr2=kr(i2);
y(i2)=(a0./kr2.^3).*exp(-0.74*(kc./kr2).^2);
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -