Main Content

transmit

Transmit signals for receiver and target paths

Since R2025a

    Description

    TXsig = transmit(TX,propPaths,t) returns the signal that is transmitted and propagated in the direction of the receiver and the targets from the bistatic transmitter object, TX. The propPaths property configures the propagation paths, including propagation loss.

    example

    [TXsig,TXinfo] = transmit(TX,propPaths,t) also returns start time and sample rate information, TXinfo, for the transmitted signal, TXsig.

    Examples

    collapse all

    This example shows how to create a simple bistatic scenario with a moving target. Transmit and collect pulses until the completion of 1 receive window and plot the results.

    Configure the bistatic transmitter and receiver. Use a pulse repetition frequency of 1000 Hz.

    prf   = 1e3;
    wav   = phased.LinearFMWaveform(PRF=prf,PulseWidth=1e-5);
    ant   = phased.SincAntennaElement(Beamwidth=10);
    tx    = bistaticTransmitter(Waveform=wav, ...
          Transmitter=phased.Transmitter(Gain=20), ...
          TransmitAntenna=phased.Radiator(Sensor=ant));
    rx    = bistaticReceiver( ...
          ReceiveAntenna=phased.Collector(Sensor=ant), ...
          WindowDuration=0.005);
    freq  = tx.TransmitAntenna.OperatingFrequency;

    Create bistatic transmitter and bistatic receiver platforms spaced 10 km apart and add a target platform. Use radarScenario to crreate the platforms for this example. Define the transmitter platform, receiver platform, and target platform using platform and give the target a trajectory.

    scene  = radarScenario(UpdateRate=prf);
    platform(scene,Position=[-5e3 0 0], ...
           Orientation=rotz(45).');          
    platform(scene,Position=[5e3 0 0], ...
           Orientation=rotz(135).');        
    traj   = kinematicTrajectory( ...
           Position=8e3*[cosd(60) sind(60) 0],Velocity=[0 150 0]);
    tgtPlat= platform(scene,Trajectory=traj);

    Create an empty plot.

    hFig  = figure;
    hAxes = axes(hFig); 

    Transmit and collect pulses for one receive window. First, update platform positions by calling advance on the scene and then get the platform positions using platformPoses. Next, get the propagation paths using bistaticFeeSpacePath. Then, transmit the signal and receive pulses. Finally, plot the received signals.

    t    = nextTime(tx);
    tEnd = nextTime(rx); 
    while t < tEnd
        advance(scene);   
        % Get platform positions
        poses = platformPoses(scene); 
    
        % Calculate paths
        proppaths = bistaticFreeSpacePath(freq, ...
                  poses(1),poses(2),poses(3)); 
    
        % Transmit
        [txSig,txInfo] = transmit(tx,proppaths,t);
    
        % Receive pulses 
        [iq,rxInfo] = receive(rx,txSig,txInfo,proppaths);
        t = nextTime(tx);
    
        % Plot received signals
        rxTimes = (0:(size(iq,1) - 1))*1/rxInfo.SampleRate ...
                + rxInfo.StartTime;   
        plot(hAxes,rxTimes,mag2db(abs(sum(iq,2))))  
                hold(hAxes,'on')
    end

    Label the plot.

    grid(hAxes,'on')
    xlabel(hAxes,'Time (sec)')
    ylabel(hAxes,'Power (dB)')
    axis(hAxes,'tight')

    Figure contains an axes object. The axes object with xlabel Time (sec), ylabel Power (dB) contains 4 objects of type line.

    This example shows how to create a bistatic scenario with two bistatic transmitters. The receiver is located between the transmitters and there is a target with a custom radar cross section. Transmit and collect pulses for four receive windows and plot the results.

    Configure the bistatic transmitters. Use a pulse repetition frequencey of 1000 Hz.

    prf   = 1e3;
    wav   = phased.LinearFMWaveform(PRF=prf,PulseWidth=0.2/prf);
    ant   = phased.SincAntennaElement(Beamwidth=10);
    tx1   = bistaticTransmitter(Waveform=wav, ...
          Transmitter=phased.Transmitter(Gain=40), ...
          TransmitAntenna=phased.Radiator(Sensor=ant));
    tx2   = clone(tx1);
    prf   = 2e3;
    tx2.Waveform = phased.RectangularWaveform( ...
          PRF=prf,PulseWidth=0.2/prf);
    tx2.Transmitter.PeakPower = 2e3;

    Configure the bistatic receiver.

    rx    = bistaticReceiver( ...
          ReceiveAntenna=phased.Collector(Sensor=ant), ...
          WindowDuration=0.0025);
    freq  = tx1.TransmitAntenna.OperatingFrequency;

    Create bistatic transmitter platforms spaced 10 km apart. Put the receiver platform between the two transmitters. For this example, create the platforms in radarScenario. Define the platforms using platform.

    scene   = radarScenario(UpdateRate=prf);
    tx1Plat = platform(scene,Position=[-5e3 0 0], ...
            Orientation=rotz(85).');          
    tx2Plat = platform(scene,Position=[5e3 0 0], ...
            Orientation=rotz(95).');       
    rxPlat  = platform(scene,Position=[0 0 0], ...
            Orientation=rotz(90).');

    Place a stationary target platform down range and assign the target a radar cross section.

    rcsSig  = rcsSignature(Pattern=20); 
    tgtPlat = platform(scene,Position=[0 50e3 0], ...
            Signatures=rcsSig);

    Show platform locations and orientations.

    tp     = theaterPlot(Parent=axes(figure));
    txPltr = orientationPlotter(tp,Marker="^", ...
           DisplayName="TX",LocalAxesLength=1e3);
    rxPltr = orientationPlotter(tp,Marker="v", ...
           DisplayName="RX",LocalAxesLength=1e3);
    tgtPltr = orientationPlotter(tp,Marker="o", ...
            DisplayName="Target",LocalAxesLength=1e3);
    poses   = platformPoses(scene);
    plotOrientation(txPltr,[poses(1:2).Orientation], ...
    reshape([poses(1:2).Position],3,[]).',["TX1" "TX2"]);
    plotOrientation(rxPltr,poses(3).Orientation,poses(3).Position,"RX");
    plotOrientation(tgtPltr,poses(4).Orientation,poses(4).Position,"Target");

    Figure contains an axes object. The axes object with xlabel X (m), ylabel Y (m) contains 16 objects of type line, text. One or more of the lines displays its values using only markers These objects represent TX, x-TX, y-TX, z-TX, RX, x-RX, y-RX, z-RX, Target, x-Target, y-Target, z-Target.

    Transmit and collect pulses for four receive windows. First, update platform positions by calling advance on the scene. Then set up the for loop to iterate over the receive windows. Next, get platform positions using platformPoses. Get the propogation paths for both transmitters using bistaticFeeSpacePath. Then, transmit the signal and collect pulses. Finally, receive the transmissions and plot the received signals.

    tl    = tiledlayout(figure,2,1); 
    hAxes = [nexttile(tl) nexttile(tl)]; hold(hAxes,"on");
    tx    = {tx1 tx2};
    advance(scene);  
    for iRxWin = 0:4
        [propSigs,propInfo] = collect(rx,scene.SimulationTime);
        t    = min([nextTime(tx{1}) nextTime(tx{2})]);
        tEnd = nextTime(rx);
        while t <= tEnd  
            % Get platform positions
            poses = platformPoses(scene); 
    
            % Include target RCS signature on the pose
            tgtPose   = poses(4);
            tgtPose.Signatures = {rcsSig};
        
            for iTx = 1:2
                % Calculate propogation paths
                proppaths = bistaticFreeSpacePath(freq, ...
                          poses(iTx),poses(3),tgtPose);
    
                % Transmit
                [txSig,txInfo] = transmit(tx{iTx},proppaths,scene.SimulationTime);
    
                % Plot transmitted signal
                txTimes = (0:(size(txSig,1) - 1))*1/txInfo.SampleRate ...
                        + txInfo.StartTime;
                plot(hAxes(1),txTimes*1e3,mag2db(max(abs(txSig),[],2)),SeriesIndex=iTx);
               
                % Collect transmitted pulses
                collectSigs = collect(rx,txSig,txInfo,proppaths);
                
                % Accumulate collected transmissions
                sz = max([size(propSigs);size(collectSigs)],[],1);
                propSigs = paddata(propSigs,sz) + paddata(collectSigs,sz);
             end
                
             t = min([nextTime(tx{1}) nextTime(tx{2})]);
             advance(scene);
        end
            
            
        % Receive collected transmissions 
        [iq,rxInfo] = receive(rx,propSigs,propInfo);
    
        % Plot received transmissions
        rxTimes = (0:(size(iq,1) - 1))*1/rxInfo.SampleRate ...
                + rxInfo.StartTime;
        plot(hAxes(2),rxTimes*1e3,mag2db(abs(iq)));
    end

    Label plots.

    grid(hAxes,"on")
    title(hAxes(1),"Transmitter Signals")
    title(hAxes(2),"Receiver Signals")
    xlabel(hAxes,"Time (milliseconds)")
    ylabel(hAxes,"Power (dB)")
    ylim(hAxes(1),[0 80]); ylim(hAxes(2),[-130 -75])
    xlim(hAxes(1),xlim(hAxes(2)))

    Figure contains 2 axes objects. Axes object 1 with title Transmitter Signals, xlabel Time (milliseconds), ylabel Power (dB) contains 50 objects of type line. Axes object 2 with title Receiver Signals, xlabel Time (milliseconds), ylabel Power (dB) contains 4 objects of type line.

    Input Arguments

    collapse all

    Bistatic transmitter, specified as a bistaticTransmitter object.

    Propagation paths, specified as a 1-by-P array of path configuration structures, where P is the number of propagation paths. Propagation paths are determined in the radar mounting frame. The bistaticFreeSpacePath function returns propPaths. Each propPaths structure describes a propagation path and contains these fields.

    FieldDescription
    PathLength

    Propagation path length, specified as a positive scalar in units of meters (m).

    PathLoss

    Propagation loss along the path, specified as a scalar in units of decibels (dB).

    ReflectionCoefficient

    Cumulative reflection coefficients for all reflections along the path, specified as a scalar. Reflections along the path might include contributions from scatterers or targets.

    AngleOfDeparture

    Propagation path angle of departure, specified as a two-element vector in the form of [azimuth; elevation] in units of degrees (deg). The angle of departure is determined in the transmit antenna mounting frame.

    AngleOfArrival

    Propagation path angle of arrival, specified as a two-element vector in the form of [azimuth; elevation] in units of degrees (deg). The angle of arrival is determined in the receive antenna mounting frame.

    DopplerShiftCumulative Doppler shift along the path, specified as a scalar in units of hertz (Hz).

    Data Types: struct

    Current simulation time, specified as a non-negative scalar in units of seconds.

    Data Types: double

    Output Arguments

    collapse all

    Returns the signal that is transmitted and propagated in the direction of the receiver and targets. The size of TXsig depends on the transmit antenna configuration.

    • CombineRadiatedSignals property of the TransmitAntenna in TX is set to trueTXsig returns an M-by-P complex-valued array with columns that contain the transmitted signal, where M is the number of samples in each transmitted pulse or sweep and P is the number of propagation paths in propPaths.

    • CombineRadiatedSignals property of the TransmitAntenna in TX is set to falseTXsig returns a 1-by-P cell array, where P is the number of propagation paths. Each cell contains an M-by-L complex-valued array with columns that contain the transmitted signal for each transmit antenna. M is the number of samples and L is the number of elements in the TransmitAntenna.

    Returns a structure with two fields that contains information pertaining to the transmitted signal.

    FieldDescription
    StartTime

    Start time of the transmitted signal, specified in units of seconds (sec).

    SampleRate

    Sample rate of the transmitted signal, specified in units of hertz (Hz).

    Version History

    Introduced in R2025a