There are two concepts involved here which are affecting the results:
1. The phased.FreeSpace system object is a narrowband propagation model, therefore, even though the waveform occupies the sweep bandwidth, it is still considered as a narrowband signal compared to the carrier. The loss is computed against the carrier frequency for the entire signal. So, the loss should actually be constant over the entire duration of the signal, as it is calculated only against the carrier/operating frequency.
2. The reason why the result for the FreeSpace propagation model is not linear is due to the fact that the delayed signal does not start on an exact sampled time instant. The resulting signal is passed through a fractional delay filter causing some distortion in the signal, which in turn presents the nonlinear, curved behavior in power that is seen when plotted.
To show this effect in the attached code, try replacing the "Range" variable assignment on line 30 with
Range = 7*physconst('lightspeed')/(2*OverSampling*SweepBandwidth);
If the script is run with this variable assignment, the signal is sampled without distortion and the loss is a constant for the entire duration of the signal. The apparent non-linear behavior seen previously is actually a limitation and an artifact of the sampling setting. This effect can be mitigated by increasing the oversampling ratio, which should flatten out the power loss curve.
By implementing the "Range" assignment above in the attached code, the power loss computed with the FreeSpace method is actually shown to be constant, with its value computed based on the setting for 'OperatingFrequency'.
In order to prove that the power loss computed by the FreeSpace method does change linearly with operating frequency, the 'OperatingFrequency' setting must be updated for each frequency. This can be done by placing the signal propagation calculation in a FOR loop while updating the operating frequency used by the FreeSpace system object.
Best Answer