当前位置:网站首页>How does the nr-prach receiver detect the relationship between prembleid and Ta
How does the nr-prach receiver detect the relationship between prembleid and Ta
2022-07-03 09:39:00 【Communication pawn】
PRACH Is to make use of ZC Two characteristics of sequences :
1.ZC The sequence has a constant amplitude , after DFT After that, the amplitude is also constant ,
This limits the influence of peak to average ratio on the boundary and time flatness of other users , In the calculation process, only the phase needs to be considered , There is no need to consider the amplitude , This simplifies the calculation .
2.ZC Sequences have ideal autocorrelation properties , The property of zero cross-correlation , The sequence length is L_RA, The peak value after autocorrelation is L_RA, After cross-correlation, the value is assigned as close 0, This makes it easy to detect .
The first feature ( Mainly for you to know )
%%%%%%test dft Amplitude after %%%%%%%%%%
L_RA =839
for i = 1:1:L_RA
x_u(i) = exp(-1i*pi*26*i*(i+1)/L_RA);
end
DFT_fre = abs(fft(x_u,839));
plot(DFT_fre);
title('ZC Sequence DFT The latter is of constant amplitude ');
The second feature determines how to parse preambleid and TA value
We know prach Maximum support 64 Users access at the same time , Because we have 64 individual preamid have access to .
First of all, our husband became 64 Different preambleid Sequence
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Time :2021.01.16
%%% Briefly :matalb Simulation prach The detection mechanism of , And then introduce ZC Characteristics of sequences
%%% author : Communication pawn
%%% Modify the record :
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc
clear all
filename_u ='F:\4G5G\CDSN\nr-prach\table_6_3_3_1_3.xls';
filename_ncs ='F:\4G5G\CDSN\nr-prach\table_6_3_3_1_5.xls';
%TABLE_6_3_3_1_3 =
[TABLE_6_3_3_1_3,txt_u,num_u] = xlsread(filename_u);
[TABLE_6_3_3_1_5,txt_ncs,num_ncs] = xlsread(filename_ncs);
L_RA =839;
ZC_zonecfg = 5;% Subcarrier spacing in unrestricted format 1.25khz For example
N_CS= TABLE_6_3_3_1_5(ZC_zonecfg+1,1);
%%% Find out how many u To satisfy 64 individual preambleid
%%% This example C_v=v*NCS
logic_index_i =50 ;% Take the long sequence as an example , use i Find out u
seq_num =0;
for u_loop = 1:1:64
if(seq_num<64)
seq_num = u_loop.*floor(L_RA/N_CS);
else
u_loop =u_loop -1;
break;
end
end
%%% Get enough u
for u_loop_init = 1:1:u_loop
[row_u ,column_u] = size(TABLE_6_3_3_1_3);
row_u_x =floor( (logic_index_i+u_loop_init)/column_u)+1;
column_u_y = mod(logic_index_i+u_loop_init-(row_u_x-1)*column_u,column_u);
u(1,u_loop_init) = TABLE_6_3_3_1_3(row_u_x,column_u_y);
end
%%%% Generate 64 individual preamble Sequence
%%% Except for the last one u, Use other u obtain preamble Sequence
seq_index =0;
for u_loop_init = 1:1:u_loop-1
%%%% Generate ZC Sequence
for i = 1:1:L_RA
x_u(i) = exp(-1i*pi*u(1,u_loop_init)*i*(i+1)/L_RA);
end
%%% For each u Corresponding preamble Sequence
for seq_index = seq_index :1:(seq_index+floor(L_RA/N_CS)-1)
Cv = N_CS*mod(seq_index+1,floor(L_RA/N_CS));
for n = 0:1:L_RA-1
preamble_seq(seq_index+1,n+1) = x_u(mod((n+Cv),L_RA)+1);
end
end
end
%%% the last one u Generated preamble Sequence
seq_remain = 64-(u_loop-1)*floor(L_RA/N_CS);
for i = 1:1:L_RA
x_u(i) = exp(-1i*pi*u(1,u_loop)*i*(i+1)/L_RA);
end
%%% For each u Corresponding preamble Sequence
for seq_index = seq_index+1 :1:(seq_index+seq_remain)
Cv = N_CS*mod(seq_index+1,floor(L_RA/N_CS));
for n = 0:1:L_RA-1
preamble_seq(seq_index+1,n+1) = x_u(mod((n+Cv),L_RA)+1);
end
end
%%% Generated 64 individual preamble Sequence
Be careful Here I import 211 Two of the agreements excel form
table_6_3_3_1_3 In order to determine u,table_6_3_3_1_5 In order to determine NCS Of
You can go 38.211 Go inside , Easy to find , The picture is too big, it seems excel Can't import , I'll cut a small picture , Let's find it by ourselves .
preable The sequence is autocorrelated
Peak size and location : The peak position is at the first point , The peak is 839( Divide by 839)
%%% Test the same preambleid The position of the peak at the time of autocorrelation %%%
%%% Time domain correlation is equal to frequency domain conjugate multiplication %%%%%%
test_com_id_fre = fft(preamble_seq(1,:),839).*conj(fft(preamble_seq(1,:),839));
test_com_id_time = abs(ifft(test_com_id_fre,839))./L_RA;
figure(1);
plot(test_com_id_time);
title(' The same preamble The sequence autocorrelation detects the originator preambleid');
[y_max,x_max] = max(test_com_id_time);
text(x_max,y_max,['(',num2str(x_max),',',num2str(y_max),')'],'color','r');
Different preamble Sequences are correlated
The beginning preamble id yes 1 For receiving 4 To test
The detected delay should be NCS3 =263=78
%%%%%%%% The same u Different preambleid Detection delay %%%%%%%%%
%%%preambleid 1 and preambleid 3%%%
test_com_id_fre = fft(preamble_seq(1,:),839).*conj(fft(preamble_seq(4,:),839));
test_com_id_time = abs(ifft(test_com_id_fre,839))./L_RA;
figure(2);
plot(test_com_id_time);
title(' The same u Different preambleid Detection delay ');
[y_max,x_max] = max(test_com_id_time);
text(x_max,y_max,['(',num2str(x_max),',',num2str(y_max),')'],'color','r');
[y_min,x_min] = min(test_com_id_time);
text(x_min,y_min,['(',num2str(x_min),',',num2str(y_min),')'],'color','r');
The receiving end uses the same preamble Sequence , But the originator must have a delay
Here we simulate 4 Time delay of points , How much delay does each point represent 839 A point of time and our agreement with format0 For example ,24576K The time taken is consistent , Just push it yourself .
%%%%%%%% testing preamble Internal delay %%%%%%%%%%%%%
preamble_seq_delay =[preamble_seq(1,4:839),[0 0 0]]
test_com_id_fre = fft(preamble_seq(1,:),839).*conj(fft(preamble_seq_delay,839));
test_com_id_time = abs(ifft(test_com_id_fre,839))./L_RA;
figure(4);
plot(test_com_id_time);
title(‘ The same preamble The sequence originator has a delay measurement delay ’);
[y_max,x_max] = max(test_com_id_time);
text(x_max,y_max,[’(’,num2str(x_max),’,’,num2str(y_max),’)’],‘color’,‘r’);
The originator is preambleid yes 4 and 5( Two ue Access at the same time ), For receiving 4 Deconstruction
Can solve the original preamble yes 4, This also shows the difference preamble Sequence superposition does not affect each other .
%%%%%% The originator is preambleid yes 4 and 5( Two ue Access at the same time ), For receiving 4 Deconstruction
%%% Correlation can resolve the corresponding preambleid
for n = 0:1:L_RA-1
send_seq(1,n+1) = preamble_seq(4,n+1)+preamble_seq(5,n+1);
end
test_com_id_fre = fft(send_seq(1,:)).*conj(fft(preamble_seq(4,:),839));
test_com_id_time = abs(ifft(test_com_id_fre,839))./L_RA;
figure(6);
plot(test_com_id_time);
title('preambleid yes 4 and 5( Two ue Access at the same time ), The receiving end detects 4');
[y_max,x_max] = max(test_com_id_time);
text(x_max,y_max,['(',num2str(x_max),',',num2str(y_max),')'],'color','r');
Different one u Corresponding preamble The sequence cannot detect the time delay
%%%%%%%% Different one u Different preambleid Nothing can be detected %%%%%%,
%%%preambleid 1 and preambleid 40%%%
test_com_id_fre = fft(preamble_seq(1,:),839).*conj(fft(preamble_seq(40,:),839));
test_com_id_time = abs(ifft(test_com_id_fre,839))./L_RA;
figure(3);
plot(test_com_id_time);
title(' Different one u Different preambleid Nothing can be detected ');
[y_max,x_max] = max(test_com_id_time);
text(x_max,y_max,['(',num2str(x_max),',',num2str(y_max),')'],'color','r');
Finally, the previous correlation is realized by conjugate multiplication in the frequency domain , Of course, the time domain itself can be directly turned off first
The number of time domain direct correlation points becomes 2N-1, Just look on the right ,865-839=26, Time delay detected .
%%%%%% Time domain correlation %%%%%%%%%%%%%%
test_com_id_time = abs(xcorr(preamble_seq(40,:),preamble_seq(41,:)))./L_RA;
figure(5);
plot(test_com_id_time);
title(' Different preamble Time domain autocorrelation of sequences ');
[y_max,x_max] = max(test_com_id_time);
text(x_max,y_max,['(',num2str(x_max),',',num2str(y_max),')'],'color','r');
边栏推荐
- Esp32 at command does not respond
- LeetCode每日一题(1362. Closest Divisors)
- Shell logic case
- Getting started with shell programming
- Logstash+jdbc data synchronization +head display problems
- LeetCode每日一题(1856. Maximum Subarray Min-Product)
- Flink learning notes (VIII) multi stream conversion
- Epollet lessons
- Construction and test of TFTP server under unbuntu (Debian)
- Hudi quick experience (including detailed operation steps and screenshots)
猜你喜欢
小王叔叔的博客目录【持续更新中】
Hudi integrated spark data analysis example (including code flow and test results)
Hudi quick experience (including detailed operation steps and screenshots)
Arduino handles JSON data, arduinojson assistant
Flask+supervisor installation realizes background process resident
Flink learning notes (XI) table API and SQL
Flink学习笔记(八)多流转换
Common software open source protocols
[CSDN]C1训练题解析_第二部分_Web基础
Vscode Arduino installation Library
随机推荐
Send mail using WP mail SMTP plug-in
PolyWorks script development learning notes (4) - data import and alignment using file import
Jestson Nano 从tftp服务器下载更新kernel和dtb
数字身份验证服务商ADVANCE.AI顺利加入深跨协 推进跨境电商行业可持续性发展
Leetcode daily question (931. minimum falling path sum)
LeetCode每日一题(2115. Find All Possible Recipes from Given Supplies)
Logstash+jdbc data synchronization +head display problems
Make the most basic root file system of Jetson nano and mount NFS file system on the server
[csdn] C1 analyse des questions de formation Partie III Bar _ JS Foundation
Modify idea code
About the configuration of vs2008+rade CATIA v5r22
一款开源的Markdown转富文本编辑器的实现原理剖析
MySQL data manipulation language DML common commands
Win10安装ELK
Installation and uninstallation of pyenv
Development of fire evacuation system
Intelligent home design and development
Jestson nano downloads updated kernel and DTB from TFTP server
Jestson nano custom root file system creation (supports the smallest root file system of NVIDIA Graphics Library)
1300. sum of varied array closed to target