Simulation of amplitude compression due to transmitter nonlinearity or adaptation of the pulse amplitude function to compensate for transmitter nonlinearity.
signalOut = transmitter(signalIn,InputAmplitude,OutputAmplitude,'simulate') signalIn = transmitter(signalOut,InputAmplitude,OutputAmplitude,'compensate')
This function simulates the effect of a non-linear transmitter on the input signal shape or provides a signal compensated for the non-linearity that can be used to obtain the desired signal at the output of the transmitter.
If the 'simulate'
option is selected for a given input signal, the output signal after a transmitter characterized by a power transfer curve described by InputAmplitude
and OutputAmplitude
is returned. The input signal needs to be provided on the scale given in InputAmplitude
.
If the 'compensate'
option is selected and the desired output signal is provided, transmitter()
computes the input signal required to achieve this desired output signal after a transmitter characterized by the defined power transfer curve. The desired output signal needs to be provided on the scale given in OutputAmplitude
.
Amplitude compression can be simulated as follows:
% Pulse Par.tp = 0.120; % µs Par.Type = 'gaussian'; Par.tFWHM = 0.040; % µs [t,signal] = pulse(Par); % Transmitter power transfer curve InputAmplitude = 0:0.01:1; % relative scale, e.g. AWG output amplitudes OutputAmplitude = 15*(InputAmplitude-0.3*InputAmplitude.^3); % MHz % Computation of the compressed output signal AWGsignal = signal/max(signal); % IQ signal on AWG input scale (maximum output amplitude) compressedsignal = transmitter(AWGsignal,InputAmplitude,OutputAmplitude,'simulate');
The output compressedsignal
corresponds to the expected output signal after the transmitter and in this case has a maximum intensity corresponding to the maximum of OutputAmplitude
.
The input pulse shape required to obtain an undistorted pulse with the maximum possible amplitude after the transmitter can be obtained as follows:
% Pulse Par.tp = 0.120; % µs Par.Type = 'gaussian'; Par.tFWHM = 0.040; % µs [t,signal] = pulse(Par); % Transmitter power transfer curve InputAmplitude = 0:0.01:1; % relative scale, e.g. AWG output amplitudes OutputAmplitude = 15*(InputAmplitude-0.3*InputAmplitude.^3); % MHz % Computation of the required input signal to obtain the desired output signal Outputsignal = max(OutputAmplitude)*signal/max(signal); % undistorted gaussian pulse with maximum amplitude AWGsignal = transmitter(Outputsignal,InputAmplitude,OutputAmplitude,'compensate');
The power transfer curve used by transmitter()
is obtained from the provided input and output amplitudes using a 4th order polynomial fit constrained at the origin (see Doll, A., Pribitzer, S., Tschaggelar, R., Jeschke, G., Adiabatic and fast passage ultra-wideband inversion in pulsed EPR, J. Magn. Reson. 230, 27-39 (2013), DOI: 10.1016/j.jmr.2013.01.002).