Agora  1.2.0
Agora project
process_rx_frame.m File Reference

Functions

Process Rx Data (Channel Estimation and Equalization) % Plot Constellations and print EVMs and SNRs start_id
 
 ch_est (:, p)
 
 rx_pilot_f_tmp (nz_stop_idx:fft_size)]
 
 data_phase_corr (data_sc_idx, d, u)
 
 aevms (d)
 
needs to be a scalar end clear d snr (u)
 
calculate in dB scale evm (u)
 
 rf_snr_db (u)
 
 tx_waveform_f (nz_sc_idx, :, 1:dl_pilot_symbols)
 
 tx_waveform_f (nz_sc_idx, :, data_slot_range)
 
 tx_waveform (start_id+1:start_id+fft_size,:,:)
 
 tx_waveform (tx_zero_prefix_len+1:tx_zero_prefix_len+cp_len, :, :)
 

Variables

 function [data_phase_corr, data_sc_idx, evm, snr, rf_snr_db, tx_waveform]
 
 samples_per_slot = configs(1)
 
 tx_zero_prefix_len = configs(2)
 
 data_size = configs(3)
 
 data_start = configs(4)
 
 data_stop = configs(5)
 
 fft_size = configs(6)
 
 cp_len = configs(7)
 
 total_dl_symbols = configs(8)
 
 dl_pilot_symbols = configs(9)
 
 total_users = configs(10)
 
 dl_data_symbols = total_dl_symbols - dl_pilot_symbols
 
 snr = zeros(1, total_users)
 
 evm = zeros(1, total_users)
 
 rf_snr_db = zeros(1, total_users)
 
 nz_start_idx = (fft_size - data_size)/2
 
 nz_sc_idx = nz_start_idx+1:nz_start_idx+data_size
 
 nz_stop_idx = nz_start_idx+data_size
 
 plt_trk_sp = 16
 
 data_sc_idx = setdiff(1:data_size, 1:plt_trk_sp:data_size)
 
 data_phase_corr = zeros(data_size, dl_data_symbols, total_users)
 
for u
 
 pilot_power = 0
 
 noise_power = 0
 
for p
 
 noise = [rx_pilot_f_tmp(1:nz_start_idx)
 
end rf_snr = (pilot_power - noise_power)/noise_power
 
else ch_est_mean = mean(ch_est, 2)
 
 aevms = zeros(1, dl_data_symbols)
 
for d
 
 data_eq = rx_data_f_tmp(nz_sc_idx) ./ ch_est_mean
 
pilot tracking phase_err = angle(mean((data_eq(1:plt_trk_sp:end) .* conj(tx_pilot_cxdouble(1:plt_trk_sp:end, u)))))
 
 evm_mat = abs(data_phase_corr(data_sc_idx, d, u) - tx_data_cxdouble(data_sc_idx, u, d)).^2
 
end data_slot_range = dl_pilot_symbols + 1: total_dl_symbols
 
 tx_waveform_f = zeros(fft_size, total_users, total_dl_symbols)
 
 tx_waveform = zeros(samples_per_slot, total_users, total_dl_symbols)
 

Function Documentation

◆ aevms()

aevms ( d  )

◆ ch_est()

ch_est ( ,
p   
)

◆ Data()

Process Rx Data ( Channel Estimation and  Equalization)

◆ data_phase_corr()

data_phase_corr ( data_sc_idx  ,
d  ,
u   
)

◆ evm()

calculate in dB scale evm ( u  )

◆ rf_snr_db()

rf_snr_db ( u  )

◆ rx_pilot_f_tmp()

rx_pilot_f_tmp ( nz_stop_idx:fft_size  )

◆ snr()

needs to be a scalar end clear d snr ( u  )

◆ tx_waveform() [1/2]

tx_waveform ( start_id+1:start_id+  fft_size,
,
 
)

◆ tx_waveform() [2/2]

tx_waveform ( tx_zero_prefix_len+1:tx_zero_prefix_len cp_len,
,
 
)

◆ tx_waveform_f() [1/2]

tx_waveform_f ( nz_sc_idx  ,
,
1:dl_pilot_symbols   
)

◆ tx_waveform_f() [2/2]

tx_waveform_f ( nz_sc_idx  ,
,
data_slot_range   
)

Variable Documentation

◆ aevms

aevms = zeros(1, dl_data_symbols)

◆ ch_est_mean

else ch_est_mean = mean(ch_est, 2)

◆ cp_len

cp_len = configs(7)

◆ d

for d
Initial value:
rx_data_f_tmp = fftshift(fft(rx_data_cxdouble(start_id + 1:start_id + fft_size, u, d)))

◆ data_eq

data_eq = rx_data_f_tmp(nz_sc_idx) ./ ch_est_mean

◆ data_phase_corr

end Process data symbols data_phase_corr = zeros(data_size, dl_data_symbols, total_users)

◆ data_sc_idx

data_sc_idx = setdiff(1:data_size, 1:plt_trk_sp:data_size)

◆ data_size

data_size = configs(3)

◆ data_slot_range

end data_slot_range = dl_pilot_symbols + 1: total_dl_symbols

◆ data_start

data_start = configs(4)

◆ data_stop

data_stop = configs(5)

◆ dl_data_symbols

dl_data_symbols = total_dl_symbols - dl_pilot_symbols

◆ dl_pilot_symbols

if dl_pilot_symbols = configs(9)

◆ evm

evm = zeros(1, total_users)

◆ evm_mat

evm_mat = abs(data_phase_corr(data_sc_idx, d, u) - tx_data_cxdouble(data_sc_idx, u, d)).^2

◆ fft_size

fft_size = configs(6)

◆ function

Initial value:
= process_rx_frame(configs, tx_pilot_cxdouble, tx_data_cxdouble, rx_pilot_cxdouble, rx_data_cxdouble)
% configs = [samples_per_slot tx_zero_prefix_len data_size data_start data_stop fft_size cp_len ...
% total_dl_symbols dl_pilot_symbols total_users]

◆ noise

◆ noise_power

noise_power = 0

◆ nz_sc_idx

◆ nz_start_idx

nz_start_idx = (fft_size - data_size)/2

◆ nz_stop_idx

nz_stop_idx = nz_start_idx+data_size

◆ p

for p
Initial value:
rx_pilot_f_tmp = fftshift(fft(rx_pilot_cxdouble(start_id + 1:start_id + fft_size, u, p)))

◆ phase_err

pilot tracking phase_err = angle(mean((data_eq(1:plt_trk_sp:end) .* conj(tx_pilot_cxdouble(1:plt_trk_sp:end, u)))))

◆ pilot_power

pilot_power = 0

◆ plt_trk_sp

plt_trk_sp = 16

◆ rf_snr

◆ rf_snr_db

rf_snr_db = zeros(1, total_users)

◆ samples_per_slot

samples_per_slot = configs(1)

◆ snr

snr = zeros(1, total_users)

◆ total_dl_symbols

total_dl_symbols = configs(8)

◆ total_users

total_users = configs(10)

◆ tx_waveform

◆ tx_waveform_f

◆ tx_zero_prefix_len

tx_zero_prefix_len = configs(2)

◆ u

for u
Initial value:
data_size
data_size
Definition: process_rx_frame.m:7
p
for p
Definition: process_rx_frame.m:36
dl_pilot_symbols
dl_pilot_symbols
Definition: process_rx_frame.m:13
rx_pilot_cxdouble
Split off pilots and data rx_pilot_cxdouble
Definition: inspect_agora_results.m:83
rx_data_cxdouble
rx_data_cxdouble
Definition: inspect_agora_results.m:84
dl_data_symbols
dl_data_symbols
Definition: process_rx_frame.m:15
u
for u
Definition: process_rx_frame.m:31
ch_est
ch_est(:, p)
rx_pilot_f_tmp
rx_pilot_f_tmp(nz_stop_idx:fft_size)]
fft_size
fft_size
Definition: process_rx_frame.m:10
configs
configs
Definition: inspect_agora_results.m:86
d
for d
Definition: process_rx_frame.m:53
tx_pilot_cxdouble
Convert to complex tx_pilot_cxdouble
Definition: inspect_agora_results.m:99
total_users
total_users
Definition: process_rx_frame.m:14
zeros
N_SC, NUM_UE, NUM_UE zeros()