メインコンテンツ

seaSpectrum

海面の全方位運動スペクトル モデル

R2022a 以降

    説明

    seaSpectrum オブジェクトは、SeaSurface オブジェクトの SpectralModel プロパティで使用するためのスペクトル モデルを作成します。

    作成

    説明

    seaspect = seaSpectrum は、既定のプロパティ値をもつ seaSpectrum オブジェクト seaspect を作成します。既定の海面スペクトルと拡散関数は、Elfouhaily モデルに基づいています。Elfouhaily モデルは、全方位に対応した風速依存スペクトルです。波浪スペクトルは、周波数スペクトルと角度拡散関数で構成されます。拡散関数は風向に関して対称であり、波数と風速の両方に依存します。

    seaspect = seaSpectrum(Name = Value) は、指定されたプロパティ Name を指定された Value に設定した seaSpectrum オブジェクトを作成します。追加の名前と値のペアの引数は、任意の順序で (Name1 = Value1, ..., NameN = ValueN) のように指定できます。

    プロパティ

    すべて展開する

    全方位波浪スペクトルのソース。'Auto' または 'Custom' として指定します。

    • 'Auto' を選択すると、Elfouhaily の海洋スペクトルが生成されます。オブジェクトは、Elfouhaily の海洋スペクトルを調整するプロパティを提供します。

    • 'Custom' を選択すると、CustomSpectrum プロパティと WaveVectorSpacing プロパティを使用して、全方位波浪スペクトルを指定できます。

    データ型: char | string

    海面解像度。正のスカラー、または正の値から成る 1 行 2 列のベクトルとして指定します。解像度ベクトルは [resolutionX resolutionY] の形式をとります。ここで、resolutionXresolutionY はそれぞれ x 方向と y- 方向の解像度を表します。解像度がスカラーの場合、x 方向の解像度と y 方向の解像度は同じになります。

    海面の物理的な長さは、SeaSurface オブジェクトの Boundary プロパティにおける x 次元と y 次元の範囲の差として計算されます。海面の長さは、Resolution プロパティで指定された間隔でサンプルが配置されます。0.02 m 未満の波の運動は微小であるため、長さを 0.02 m 未満に設定すべきではありません。単位はメートルです。

    データ型: double

    全方位波浪スペクトル。MN 列の行列として指定します。MN は、それぞれ海面高度データを x 次元と y 次元で取得する際の逆高速フーリエ変換 (IFFT) の長さを決定します。

    カスタム ケースの解像度は、Resolution = surface length./size(CustomSpectrum) として計算されます。ここで、surface length は、seaSurfaceBoundary プロパティの x 次元と y 次元の範囲の差として計算される、海面の物理的な長さです。

    依存関係

    このプロパティを有効にするには、SpectrumSource プロパティの値を 'Custom' に設定します。

    データ型: double

    正の波数ベクトル領域の間隔。スカラーまたは 1 行 2 列の次元ベクトル [kx ky] として指定します。このプロパティは、それぞれ x 次元と y 次元における波数ベクトルの間隔を表します。単位はラジアン/メートルです。この値は通常、WaveVectorSpacing <= 2*pi/surface length として設定されます。ここで、surface length は、seaSurfaceBoundary プロパティの x 次元と y 次元の範囲の差として計算される、海面の物理的な長さです。

    依存関係

    このプロパティを有効にするには、SpectrumSource プロパティを 'Custom' に設定します。

    データ型: double

    すべて折りたたむ

    1024×1024 m の正方形の海面を作成します。風速約 20 m/s、吹走距離 250 km の、高海面状態 6 に対する NRL 反射率モデルを仮定します。SurfaceManagerUseOcclusionfalse に設定します。

    レーダー シナリオを作成します。

    scene = radarScenario;

    NRL モデルを使用して反射率をモデル化します。

    refl = surfaceReflectivitySea(Model = 'NRL',SeaState = 6, ...
        Polarization = 'V')
    refl = 
      surfaceReflectivitySea with properties:
    
        EnablePolarization: 0
                     Model: 'NRL'
                  SeaState: 6
              Polarization: 'V'
                   Speckle: 'None'
    
    
    rng(2033)
    spec = seaSpectrum(Resolution = 2);
    bnds = [0 1024; 0 1024];
    srf = seaSurface(scene,Boundary = bnds, ...
        WindSpeed = 20,Fetch = 250e3, ...
        SpectralModel = spec);
    mgr = scene.SurfaceManager;
    mgr.UseOcclusion = false
    mgr = 
      SurfaceManager with properties:
    
        EnableMultipath: 0
           UseOcclusion: 0
               Surfaces: [1×1 radar.scenario.SeaSurface]
    
    
    x = linspace(srf.Boundary(1,1),srf.Boundary(1,2),1000);
    y = linspace(srf.Boundary(2,1),srf.Boundary(2,2),1000);
    [X,Y] = meshgrid(x,y);
    X1 = X(:)';
    Y1 = Y(:)';
    hts = height(srf,[Y1;X1]);
    hts = reshape(hts,length(x),length(y));
    surf(x,y,hts)
    axis equal
    shading interp
    ylabel('X (m)')
    xlabel('Y (m)')
    zlabel('Height (m)')

    Figure contains an axes object. The axes object with xlabel Y (m), ylabel X (m) contains an object of type surface.

    カスタム波浪スペクトルを使用して正方形の海面を作成します。中程度の海面状態の JONSWAP 波浪スペクトルをインポートします。このスペクトルは 64 行 64 列の行列で、物理的な長さは 512 m です。

    scene = radarScenario(IsEarthCentered = false);

    カスタム スペクトルを使用してシーンに海面を追加します。

    load('jonswap.mat');
    spec = seaSpectrum(SpectrumSource = 'Custom', ...
        CustomSpectrum = Psi, WaveVectorSpacing = 2*pi/512)
    spec = 
      seaSpectrum with properties:
    
           SpectrumSource: 'Custom'
           CustomSpectrum: [64×64 double]
        WaveVectorSpacing: 0.0123
    
    
    srf = seaSurface(scene,Boundary = [-256 256; -256 256], ...
        SpectralModel = spec)
    srf = 
      SeaSurface with properties:
    
                    WindSpeed: 10
                WindDirection: 0
                        Fetch: Inf
                SpectralModel: [1×1 seaSpectrum]
            RadarReflectivity: [1×1 surfaceReflectivitySea]
        ReflectionCoefficient: [1×1 radar.scenario.SurfaceReflectionCoefficient]
              ReflectivityMap: 1
              ReferenceHeight: 0
                     Boundary: [2×2 double]
    
    
    x = linspace(srf.Boundary(2,1),srf.Boundary(2,2),1000);
    y = linspace(srf.Boundary(1,1),srf.Boundary(1,2),1000);
    [X,Y] = meshgrid(x,y);
    X1 = X(:)';
    Y1 = Y(:)';
    hts = height(srf,[Y1;X1]);
    hts = reshape(hts,length(x),length(y));
    surf(x,y,hts)
    axis equal
    shading interp
    ylabel('X (m)')
    xlabel('Y (m)')
    zlabel('Height (m)')

    Figure contains an axes object. The axes object with xlabel Y (m), ylabel X (m) contains an object of type surface.

    参照

    [1] Elfouhaily, T., B. Chapron, K. Katsaros, and D. Vandemark. "A Unified Directional Spectrum for Long and Short Wind-Driven Waves." Journal of Geophysical Research: Oceans 102, no. C7 (July 15, 1997): 15781-96. https://doi.org/10.1029/97JC00467

    [2] Tessendorf, Jerry. "Simulating Ocean Water." Presented at SigGraph, 1999 - 2004.

    バージョン履歴

    R2022a で導入