












1)信道参数生成:
gNB2UE = new_channel_desc_scm(n_tx, n_rx, channel_model, fs, 0, txbw, 300e-9, 0.0, CORR_LEVEL_LOW, 0, 0, 0, 0);
信道数据保存在gNB2UE内
delays,amp应该是建模的参数,例如:EPA信道里有7个元素,相当于7个抽头对应7个延迟7个幅度
ch是后续过信道时的卷积信道,长度为channel_length
channel_length计算示例(EPA):
chan_desc->channel_length = (int) (2*chan_desc->sampling_rate*chan_desc->Td + 1 + 2/(M_PI*M_PI)*log(4*M_PI*chan_desc->sampling_rate*chan_desc->Td));
EPA时,TD=0.41,单位是微秒,即410ns,来自hard code
TDL-A时,TD=2.9e-6,单位是秒,来自new_channel_desc_scm的输入参数DS_TDL
单位不统一,可能作者重点维护TDL信道去了?
2)信道生成和过信道:
先是信道生成:
random_channel
具体生成ch
输入参数keep_channel填0
再过信道:
void __attribute__ ((no_sanitize_address)) multipath_channel(channel_desc_t *desc,
double *tx_sig_re[NB_ANTENNAS_TX],
double *tx_sig_im[NB_ANTENNAS_TX],
double *rx_sig_re[NB_ANTENNAS_RX],
double *rx_sig_im[NB_ANTENNAS_RX],
uint32_t length,
uint8_t keep_channel,
int log_channel)
注意,作者没有维护这段代码,所以有些错误,例如tx_sig没有赋值,哎。。。
过信道是如下循环:
for (int i=0; i<((int)length-dd); i++) {
for (int ii=0; ii<desc->nb_rx; ii++) {
struct complexd rx_tmp={0};
for (int j=0; j<desc->nb_tx; j++) {
struct complexd *chan=desc->ch[ii+(j*desc->nb_rx)];
for (int l = 0; l<(int)desc->channel_length; l++) {
if ((i>=0) && (i-l)>=0) {
struct complexd tx;
tx.r = tx_sig_re[j][i-l];
tx.i = tx_sig_im[j][i-l];
rx_tmp.r += (tx.r * chan[l].r) - (tx.i * chan[l].i);
rx_tmp.i += (tx.i * chan[l].r) + (tx.r * chan[l].i);
}
应该是与desc->ch进行卷积。tx的第i-l个信号与chan的第l个信号相乘,然后累加起来
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。