メインコンテンツ

スクイント スポットライト合成開口レーダー (SAR) のイメージ形成

R2021a 以降

この例では、線形 FM (LFM) 波形を使用してスポットライトベースの合成開口レーダー (SAR) システムをモデル化する方法を示します。スクイント モードの場合、SAR プラットフォームは、必要に応じて、ブロードサイドから特定の角度で前方または後方を見るように傾けられます。スクイント モードは、現在のレーダー プラットフォーム位置より前方にある領域をイメージ化したり、干渉計測用途においてプラットフォーム位置より後方にある場所をイメージ化したりするのに役立ちます。スクイント モードでは、レンジと方位角の結合により、難易度が高くなります。SAR の分解能は信号とアンテナの構成に依存するため、分解能はビジョンベースのイメージ化システムよりもはるかに高くなります。この例では、スポットライト モードを使用してレンジ移行アルゴリズム [1,3] を実行し、SAR プラットフォーム位置の前方にある静止したターゲットをイメージ化します。リニア FM 波形は、かなり低い送信電力でも大きな時間-帯域積が得られるという利点があり、航空システムでの使用に適しています。この例で使用されている用語の詳細については、ストリップマップ合成開口レーダー (SAR) のイメージ形成を参照してください。

レーダー構成

4 GHz の搬送波周波数と 50 MHz の信号帯域幅で C バンドで動作する航空機搭載 SAR について考えます。この帯域幅により、3 メートルのレンジ分解能が得られます。レーダー システムは、上図に示すように、ブロードサイドから 33 度のスクイント角でデータを収集します。遅延は一般に、ターゲットとプラットフォームの間の斜距離に対応します。SAR システムの場合、プラットフォームがアンテナ ビームの方向に対して直交するパスを移動するため、斜距離は時間の経過とともに変化します。以下のセクションでは、送信波形のパラメーターの定義に焦点を当てます。LFM スイープ帯域幅は、目的のレンジ分解能に基づいて決定できます。

c = physconst('LightSpeed');

SAR 中心周波数を設定します。

fc = 4e9;% Hz

目的のレンジとクロスレンジ分解能を 3 メートルに設定します。

rangeResolution = 3;% meters
crossRangeResolution = 3;% meters

信号帯域幅は、必要なレンジの分解能から導き出されるパラメーターです。

bw = c/(2*rangeResolution);

prf = 1000;% Hz
aperture = 4;% sq. meters  
tpd = 3*10^-6; % sec
fs = 120*10^6; % Hz

レーダーの LFM 信号を設定します。

waveform = phased.LinearFMWaveform('SampleRate',fs, 'PulseWidth', tpd, 'PRF', prf,...
    'SweepBandwidth', bw);

航空機の速度が 100 m/s、飛行時間が 4 秒であると仮定します。

speed = 100;% m/s  
flightDuration = 4;% sec
radarPlatform  = phased.Platform('InitialPosition', [0;-600;500], 'Velocity', [0; speed; 0]);
slowTime = 1/prf;
numpulses = flightDuration/slowTime +1;
eta1 = linspace(0,flightDuration ,numpulses)';

maxRange = 2500;
truncrangesamples = ceil((2*maxRange/c)*fs);
fastTime = (0:1/fs:(truncrangesamples-1)/fs);
% Set the reference range for the cross-range processing.
Rc = 1e3;% meters

SAR 送信機と受信機を構成します。アンテナは飛行方向と直交するブロードサイド方向を向いています。

antenna = phased.CosineAntennaElement('FrequencyRange', [1e9 6e9]);
antennaGain = aperture2gain(aperture,c/fc); 

transmitter = phased.Transmitter('PeakPower', 1e3, 'Gain', antennaGain);
radiator = phased.Radiator('Sensor', antenna,'OperatingFrequency', fc, 'PropagationSpeed', c);

collector = phased.Collector('Sensor', antenna, 'PropagationSpeed', c,'OperatingFrequency', fc);
receiver = phased.ReceiverPreamp('SampleRate', fs, 'NoiseFigure', 30);

伝播チャネルを構成します。

channel = phased.FreeSpace('PropagationSpeed', c, 'OperatingFrequency', fc,'SampleRate', fs,...
    'TwoWayPropagation', true);

シーン構成

この例では、以下に指定された場所に 2 つの静的な点ターゲットが構成されます。シミュレーションでさらに示されるシーン全体は、プラットフォームの前方にあります。データ収集は、航空プラットフォームがターゲット位置と並ぶ前に終了します。すべてのターゲットの平均 RCS 値は 1 平方メートルです。

targetpos= [900,0,0;1000,-30,0]'; 

targetvel = [0,0,0;0,0,0]';

スクイント角の計算は、飛行経路とターゲット シーンの中心位置 (この場合は約 950 メートルの位置) によって決まります。

squintangle = atand(600/950);
target = phased.RadarTarget('OperatingFrequency', fc, 'MeanRCS', [1,1]);
pointTargets = phased.Platform('InitialPosition', targetpos,'Velocity',targetvel);
% The figure below describes the ground truth based on the target
% locations.
figure(1);
h = axes;plot(targetpos(2,1),targetpos(1,1),'*b');hold all;plot(targetpos(2,2),targetpos(1,2),'*r');hold off;
set(h,'Ydir','reverse');xlim([-50 10]);ylim([800 1200]);
title('Ground Truth');ylabel('Range');xlabel('Cross-Range');

Figure contains an axes object. The axes object with title Ground Truth, xlabel Cross-Range, ylabel Range contains 2 objects of type line. One or more of the lines displays its values using only markers

SAR 信号シミュレーション

次のセクションでは、上記の構成に基づいてシステムがどのように動作するかについて説明します。以下のセクションでは、具体的に、データ収集が SAR プラットフォームでどのように実行されるかを示します。プラットフォームがクロスレンジ方向に移動すると、飛行経路に対するスクイント角によって定義された方向に対してパルスの送受信が行われます。パルスの集合は、プラットフォームが移動する際に照射領域内に位置するターゲットの位相履歴を示します。ターゲットが照射領域内に長くとどまるほど、イメージ全体のクロスレンジ分解能が向上します。これは、レンジおよびクロスレンジ方向の集束プロセスがシーン全体に一般化されるためです。

rxsig = zeros(truncrangesamples,numpulses);
for ii = 1:numpulses
    % Update radar platform and target position
    [radarpos, radarvel] = radarPlatform(slowTime);
    [targetpos,targetvel] = pointTargets(slowTime);
    
    % Get the range and angle to the point targets
    [targetRange, targetAngle] = rangeangle(targetpos, radarpos);
    
    % Generate the LFM pulse
    sig = waveform();
    % Use only the pulse length that will cover the targets.
    sig = sig(1:truncrangesamples);
    
    % Transmit the pulse
    sig = transmitter(sig);
    
    % Radiate the pulse towards the targets
    sig = radiator(sig, targetAngle);
    
    % Propagate the pulse to the point targets in free space
    sig = channel(sig, radarpos, targetpos, radarvel, targetvel);
    
    % Reflect the pulse off the targets
    sig = target(sig);
    
    % Collect the reflected pulses at the antenna
    sig = collector(sig, targetAngle);
    
    % Receive the signal
    rxsig(:,ii) = receiver(sig);
    
end

kc = (2*pi*fc)/c;
% Compensate for the doppler due to the squint angle
rxsig=rxsig.*exp(-1i.*2*(kc)*sin(deg2rad(squintangle))*repmat(speed*eta1,1,truncrangesamples)).';

受信した信号を可視化します。

クロスレンジ方向に送信された複数のパルスの集合として受信信号を可視化できるようになりました。プロットには、2 つのターゲットの信号の実部が表示されます。アンテナのスクイント角により、チャープは傾いて表示されます。

imagesc(real(rxsig));title('SAR Raw Data')
xlabel('Cross-Range Samples')
ylabel('Range Samples')

Figure contains an axes object. The axes object with title SAR Raw Data, xlabel Cross-Range Samples, ylabel Range Samples contains an object of type image.

レンジ圧縮を実行します。

レンジ圧縮は、50 MHz の帯域幅で目的のレンジ分解能を達成するのに役立ちます。

pulseCompression = phased.RangeResponse('RangeMethod', 'Matched filter', 'PropagationSpeed', c, 'SampleRate', fs);
matchingCoeff = getMatchedFilter(waveform);
[cdata, rnggrid] = pulseCompression(rxsig, matchingCoeff);

下の Figure は、受信信号におけるレンジ圧縮達成後の応答を示しています。2 つのターゲットの位相履歴がクロスレンジ方向に沿って明確に表示され、レンジの集束が達成されました。

imagesc(real(cdata(800:1100,:)));title('SAR Range Compressed Data')
xlabel('Cross-Range Samples')
ylabel('Range Samples')

Figure contains an axes object. The axes object with title SAR Range Compressed Data, xlabel Cross-Range Samples, ylabel Range Samples contains an object of type image.

方位角圧縮

レンジ圧縮を達成すれば、クロスレンジ データを処理し、SAR 生データから最終イメージを取得する手法は複数あります。本質的には、レンジ圧縮はファストタイム (レンジ) 方向の分解能を実現するのに役立ち、クロスレンジ方向の分解能は方位角またはクロスレンジ圧縮によって実現されます。この例では、スクイントの場合におけるレンジ移行アルゴリズムを示しています。方位角の集束では、アンテナの傾きによって生じるスクイントを考慮しなければなりません。

rma_processed = helperSquintRangeMigration(cdata,fastTime,fc,fs,prf,speed,numpulses,c,Rc,squintangle);

最終的な SAR イメージを可視化します。

レンジ移行アルゴリズムを使用して、集束した SAR イメージをプロットします。ターゲットの位置を正確に示すために、レンジ移行アルゴリズムによって形成されたイメージの一部のみが表示されます。[1]、[2]、[3] で示されているように、レンジ移行は、クロストラック方向だけでなくトラック方向でも理論的な分解能を提供します。

figure(2);
imagesc(abs(rma_processed(2300:3600,1100:1400).'));
title('SAR Data focused using Range Migration algorithm ') 
xlabel('Cross-Range Samples') 
ylabel('Range Samples')

Figure contains an axes object. The axes object with title SAR Data focused using Range Migration algorithm, xlabel Cross-Range Samples, ylabel Range Samples contains an object of type image.

まとめ

この例では、航空機によるデータ収集シナリオで LFM 信号を活用して、スクイント モードのスポットライト SAR 処理をシミュレーションおよび開発する方法を示します。この例では、スクイントによる影響を処理するために、修正されたレンジ移行アルゴリズムを使用して受信信号からイメージを生成する方法も示します。

参考文献

  1. Cafforio, C., C. Prati, and F. Rocca. "SAR data focusing using seismic migration techniques." IEEE Transactions on Aerospace and Electronic Systems, 27(2), 1991, pp.194–207. https://doi.org/10.1109/7.78293.

  2. Soumekh, M. Synthetic Aperture Radar Signal Processing with MATLAB Algorithms. John Wiley & Sons, 1999.

  3. Stolt, R. H. "Migration by Fourier Transform Techniques." Geophysics, 1978, 43, pp. 23–48.

付録

レンジ移行アルゴリズム

function azcompresseddata = helperSquintRangeMigration(sigData,fastTime,fc,fs,prf,speed,numPulses,c,Rc,squintangle)

この関数は、側方監視合成開口レーダーにおけるイメージ化のためのレンジ移行アルゴリズムを示します。このアルゴリズムでは、パルス圧縮合成開口データが考慮されます。

レンジ周波数スパンを設定します。

frequencyRange = linspace(fc-fs/2,fc+fs/2,length(fastTime));
krange = 2*(2*pi*frequencyRange)/c;

クロスレンジ波数を設定します。

kaz = 2*pi*linspace(-prf/2,prf/2,numPulses)./speed;

受信した 2 次元 SAR 信号のサイズに合わせてクロスレンジ波数の行列を生成します。

kc = 2*pi*fc/3e8;
kazimuth = kaz.';
kus=2*(kc)*sin(deg2rad(squintangle));
kx = krange.^2-(kazimuth+kus).^2;

波数は、スクイントによるシフトに対応しており、方位角の集束を実現するために変更されます。

thetaRc = deg2rad(squintangle);
kx = sqrt(kx.*(kx > 0));

kFinal = exp(1i*(kx.*cos(thetaRc)+(kazimuth).*sin(thetaRc)).*Rc);
kfin = kx.*cos(thetaRc)+(kazimuth+kus).*sin(thetaRc);

レンジ圧縮された信号に対して 2 次元 FFT を実行します。

sdata =fftshift(fft(fftshift(fft(sigData,[],1),1),[],2),2);

参照レンジで方位角圧縮を取得するには、一括圧縮を実行します。新しいクロスレンジ波数を使用して 2 次元 FFT 信号のフィルター処理を実行し、参照レンジでの完全な集束を実現するとともに、副産物として参照レンジ外のターゲットの部分的な集束を実現します。

fsmPol = (sdata.').*kFinal;

Stolt 補間を実行して、参照レンジ外のターゲットへの集束を実現します。

stoltPol = fsmPol;
for i = 1:size((fsmPol),1)
    stoltPol(i,:) = interp1(kfin(i,:),fsmPol(i,:),krange(1,:));
end
stoltPol(isnan(stoltPol)) = 1e-30;

azcompresseddata = ifftshift(ifft2(stoltPol),2);

end