phased.Receiver Noise Figure and SNR ratio

11 views (last 30 days)
I'm trying to verify the definition of the Noise factor (or Noise figure, if in db) , i.e.
at the input and output of a receiver modelled as a phased.Receiver matlab system object.
rng(1, "twister"); % for repeatability
fs = 100e6;
f = 100e3;
time_array = 0:1/fs:1/f;
waveform = sin(2*pi*f*time_array);
SNR_i = 30; %dB
input = awgn(waveform, SNR_i, 'measured');
noise_input = input - waveform;
SNR_i = snr(waveform, noise_input); % So far, so good
gain = 30; %dB
noiseFigure = 20;
refTemp = 290;
rec = phased.Receiver('Gain', gain, ...
'NoiseMethod', 'Noise figure', ...
'NoiseFigure', noiseFigure, ...
'ReferenceTemperature', refTemp, ...
'SampleRate', fs);
output = rec(input);
amplifiedSignalNoNoise = waveform*db2mag(gain);
plot(time_array, real(output)); hold on
plot(time_array, amplifiedSignalNoNoise, 'LineWidth', 2); hold off
noise_output = output - amplifiedSignalNoNoise;
SNR_o = snr(amplifiedSignalNoNoise, noise_output);
Unfortunately, I don't find the 20 dB of Noise Figure when doing SNR_i - SNR_o. Same problem arrives if I use phased.Transmitter or phased.ReceiverPreamp. What am I missing?

Accepted Answer

Arun
Arun on 19 Apr 2024
Edited: Arun on 19 Apr 2024
Hi Fabio,
I understand that you are seeking an explanation as to why the difference between ‘SNR_i‘ and ‘SNR_o’, as observed in the created scenario, is not equal to ‘Noise Figure’.
The difference of ‘SNR_i’ and ‘SNR_o’ is not equal to ‘Noise Figure’ because of the following reasons:
  • The SNR of the input signal will only be reduced by the specified noise figure if the input signal has the amount of noise specified by the reference temperature.
  • In your example, the input signal has much more noise than would be suggested by the reference temperature. So the amount of noise added by the receiver is small in comparison to the noise in the input signal.
If the noise added is more or less than the reference temperature specified by the receiver to input, the SNR change will not be equal to the noise figure, because the receiver will be adding proportionally more or less noise.
Another perspective is that the receiver always adds the same amount of noise to a signal regardless of how much noise is present in the input.
You can add noise to a signal by specifying the noise temperature in MATLAB using “comm.ThermalNoise” function. Refer to the modified version of the code below, which gives expected result:
rng(1, "twister"); % for repeatability
fs = 100e6;
f = 100e3;
time_array = 0:1/fs:1/f;
waveform = complex(sin(2*pi*f*time_array)');
% Get input waveform with noise using comm thermal noise
refTemp = 290;
noise = comm.ThermalNoise(NoiseTemperature=refTemp,SampleRate=fs);
input = noise(waveform);
noise_in = input-waveform;
SNR_i = snr(input,noise_in);
gain = 30; %dB
noiseFigure = 20;
rec = phased.Receiver('Gain', gain, ...
'NoiseMethod', 'Noise figure', ...
'NoiseFigure', noiseFigure, ...
'ReferenceTemperature', refTemp, ...
'SampleRate', fs);
output = rec(input);
amplifiedSignalNoNoise = waveform*db2mag(gain);
noise_output = output - amplifiedSignalNoNoise;
SNR_o = snr(output, noise_output);
snrReduction = SNR_i - SNR_o
snrReduction = 19.8116
Please refer the shared documentation link for more information on “comm.ThermalNoise” function: https://www.mathworks.com/help/comm/ref/comm.thermalnoise-system-object.html
I hope this helps in understanding the cause for the issue.
  1 Comment
Fabio Leoli
Fabio Leoli on 19 Apr 2024
Hello, Arun.
Thank you very much for the answer, the concept is much more clear for me now.

Sign in to comment.

More Answers (0)

Products


Release

R2024a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!