37 lines
1.4 KiB
Matlab
37 lines
1.4 KiB
Matlab
function [snr_all, snr_per_level] = calc_snr(tx_signal, eq_noise)
|
|
% CALC_SNR Calculates overall SNR and level-wise SNR for a PAM-M constellation.
|
|
%
|
|
% [snr_all, snr_per_level] = calc_snr(tx_signal, eq_noise)
|
|
%
|
|
% Inputs:
|
|
% tx_signal - Vector of transmitted signal values.
|
|
% eq_noise - Vector of corresponding noise samples.
|
|
%
|
|
% Outputs:
|
|
% snr_all - Overall SNR computed using all signal values.
|
|
% snr_per_level - A vector where each element is the SNR computed
|
|
% for a unique amplitude level in tx_signal.
|
|
%
|
|
% The function first computes the overall SNR using the full signal vectors.
|
|
% Then it uses the unique levels in tx_signal to calculate the SNR for
|
|
% the symbols corresponding to each level separately.
|
|
|
|
% Calculate overall SNR using the complete signals
|
|
snr_all = snr(tx_signal, eq_noise);
|
|
|
|
% Get the unique amplitude levels in the transmitted signal
|
|
levels = unique(tx_signal);
|
|
|
|
% Preallocate an array to store the SNR for each unique level
|
|
% Loop over each unique level to compute the SNR for that level
|
|
for i = 1:length(levels)
|
|
% Find indices where tx_signal equals the current level
|
|
idx = (tx_signal == levels(i));
|
|
|
|
% Compute the SNR for these indices
|
|
snr_per_level(i) = snr(tx_signal(idx), eq_noise(idx));
|
|
|
|
histogram(eq_noise(idx));
|
|
end
|
|
end
|