FERS: The Flexible, Extensible Radar and Sonar Simulator

Example FERS Radar Simulation

Introduction

Bistatic radar systems can be fairly tricky to analyse. In this example, we are examining the behaviour of a very simple bistatic radar system with a target flying directly between the transmitting and receiving stations.

1. Generating the Pulse

In this example, we will generate the pulse to be transmitted with MATLAB. Other tools, such as IDL and Octave can be used with equal success.

Generating the pulse in MATLAB is extremely simple.

%Generate a 50 micro second rect pulse, sampled at 100MHz
Fs=1e8;
y=zeros(1, 100);
y(25:75)=1;
%FERS needs pulses to be slightly oversampled, so we take out the top 20% of the band (in a very non-optimal fashion)
Y=fft(y);
Y(40:60)=0;
y=real(ifft(Y));
%Now write the pulse to a ferscsv file
ferscsvwrite('pulse.csv', y, Fs);

The code above will create the pulse in a csv file, ready to be imported into FERS.

2. Writing the FERS script

The next step is to create a FERS XML script to tell the simulator the parameters of the system to be simulated.

In the first part of the file, the start and end time of the simulation is specified, the propagation speed is set and the sample rate of the simulation is set. Finally the simulator is told to export the raw responses in CSV format, and the parameters of each response in XML format.

<simulation name="sim1">
  <parameters>
    <starttime>0</starttime>
    <endtime>10</endtime>
    <rate>1e8</rate>
    <export binary="true" xml="true"/>
  </parameters>

The next part of the file imports the pulse we created in step 1, sets the power to 1kW and the carrier frequency to 1GHz. The "timing" block sets the jitter and frequency of timing sources used in the system - it's not important for this system, but is extremely important for networked and distributed radar systems. Lastly, the antenna (in this case, a transducer) is defined, given a name and a radiation pattern. The "isotropic" pattern is used here, for clarity.

 <pulse name="pulse1" type="file" filename="pulse.csv">
    <power>1000</power>
    <carrier>1e9</carrier>
  </pulse>

  <timing name="clock">
    <frequency>10e6</frequency>
    <jitter>0</jitter>
  </timing>

  <antenna name="ant1" pattern="isotropic">
  </antenna>

Next, the transmitter is set up. It is attached to a platform which controls it's motion and rotation. For this experiment, we want to consider only one pulse per second, so we set the Pulse Repitition Frequency to 1. The transmitter is situated at a position 500m along the x axis from the origin, and does not move.

<platform name="transmitter_site">
    <motionpath>
      <positionwaypoint>
    <x>-500.00</x>
    <y>0.0</y>
    <altitude>0.0</altitude>
    <time>0</time>
      </positionwaypoint>
    </motionpath>
    <fixedrotation>
      <startazimuth>0.0</startazimuth>
      <startelevation>0</startelevation>
      <azimuthrate>0</azimuthrate>
      <elevationrate>0</elevationrate>
    </fixedrotation>
    <transmitter name="trans1" type="pulsed" antenna="ant1" pulse="pulse1" timing="clock">      
      <prf>1</prf>
    </transmitter>
  </platform>

The receiver setup is similar to the transmitter setup. The range gate is defined to give a minimum round trip of 1.5km and a maximum round trip range of 3km.

   <platform name="receiver_site">
    <motionpath>
      <positionwaypoint>
    <x>500.00</x>
    <y>0.0</y>
    <altitude>0.0</altitude>
    <time>0</time>
      </positionwaypoint>
    </motionpath>
    <fixedrotation>
      <startazimuth>0.0</startazimuth>
      <startelevation>0</startelevation>
      <azimuthrate>0</azimuthrate>
      <elevationrate>0</elevationrate>
    </fixedrotation>
    <receiver name="recv1" type="pulsed" antenna="ant1" timing="clock">     
      <window_skip>5e-6</window_skip>
      <window_length>1e-5</window_length>
      <prf>1</prf>
    </receiver>
  </platform>

Next, the target is defined. The target starts 1.5km away, overflys the site 5s later and proceeds along the same path at a constant speed. The radar cross section of the target is set to 100m2.

  <platform name="aeroplane">
    <motionpath interpolation="cubic">
      <positionwaypoint>
    <x>0.0</x>
    <y>-1500.0</y>
    <altitude>1000</altitude>
    <time>0</time>
      </positionwaypoint>
      <positionwaypoint>
    <x>0.0</x>
    <y>0.0</y>
    <altitude>1000.0</altitude>
    <time>5</time>
      </positionwaypoint>
      <positionwaypoint>
    <x>0.0</x>
    <y>1500.0</y>
    <altitude>1000.0</altitude>
    <time>10</time>
      </positionwaypoint>
    </motionpath>   
    <fixedrotation>
      <startazimuth>0.0</startazimuth>
      <startelevation>0.0</startelevation>
      <azimuthrate>0</azimuthrate>
      <elevationrate>0</elevationrate>
    </fixedrotation>
    <target name="wings">
      <rcs type="isotropic">
        <value>100</value>
      </rcs>
    </target>
  </platform>
</simulation>

3. Running The Simulator

Running FERS is extremely simple - just call the executable with the script you have just defined.

./fers example.fersxml

4. Viewing the Results

In this example, FERS exports the results in the HDF5 data format, which can be very easily read into MATLAB, or IDL. FERS comes with a small MATLAB program which makes importing FERS results simple.

%Load I and Q into MATLAB
[I Q times] = loadfersHDF5('recv1.h5');
%Calculate the pulse power
P=sqrt(I.^2+Q.^2);
%Plot the pulses onto a nice looking graph
waterfall(P);

Graph of Simulation Results
The result graph has response strength on the vertical axis. The 1/x4 relationship between range and return strength can easily be seen, as can the quadratic relationship between range and return type.

5. Conclusion

This example shows only a few of the capabilities of FERS, but should give an idea of what FERS is and how it can be used for design support and investigating different properties of radar and sonar systems.

The simulation performed here is very simple, and could easily be done on paper, but it demonstrates that FERS is easy to use, even for small simulations.