phased.Receiver Noise Figure and SNR ratio

12 次查看(过去 30 天)
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?

采纳的回答

Arun
Arun 2024-4-19
编辑:Arun 2024-4-19
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 个评论
Fabio Leoli
Fabio Leoli 2024-4-19
Hello, Arun.
Thank you very much for the answer, the concept is much more clear for me now.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Transmitters and Receivers 的更多信息

产品


版本

R2024a

Community Treasure Hunt

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

Start Hunting!

Translated by