当前位置:网站首页>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');

边栏推荐
- WARNING: You are using pip ; however. Later, upgrade PIP failed, modulenotfounderror: no module named 'pip‘
- Nodemcu-esp8266 development (vscode+platformio+arduino framework): Part 1 -- establishment of engineering template -template
- LeetCode每日一题(745. Prefix and Suffix Search)
- 小王叔叔的博客目录【持续更新中】
- PolyWorks script development learning notes (I) - script development environment
- 软件测试工程师是做什么的 通过技术测试软件程序中是否有漏洞
- DSP data calculation error
- Hudi data management and storage overview
- LeetCode每日一题(2212. Maximum Points in an Archery Competition)
- Flink CDC practice (including practical steps and screenshots)
猜你喜欢
![[CSDN]C1訓練題解析_第三部分_JS基礎](/img/b2/68d53ad09688f7fc922ac65e104f15.png)
[CSDN]C1訓練題解析_第三部分_JS基礎

Spark overview

数字身份验证服务商ADVANCE.AI顺利加入深跨协 推进跨境电商行业可持续性发展

Spark 集群安装与部署

Flink学习笔记(八)多流转换

Modify idea code

Leetcode daily question (2212. maximum points in an archery competition)

Flink learning notes (IX) status programming

LeetCode每日一题(1162. As Far from Land as Possible)

Error output redirection
随机推荐
[combinatorics] Introduction to Combinatorics (combinatorial thought 2: mathematical induction | mathematical induction promotion | multiple induction thought)
Development of fire evacuation system
The number of weak characters in the game (1996)
Flink-CDC实践(含实操步骤与截图)
Modify idea code
LeetCode每日一题(2109. Adding Spaces to a String)
1922. Count Good Numbers
IDEA 中使用 Hudi
Leetcode daily question (1362. closest divisors)
Flink CDC practice (including practical steps and screenshots)
Flink learning notes (XI) table API and SQL
Spark cluster installation and deployment
Run flash demo on ECS
Leetcode daily question (985. sum of even numbers after queries)
Epoll read / write mode in LT and et modes
Leetcode daily question (2212. maximum points in an archery competition)
Nodemcu-esp8266 development (vscode+platformio+arduino framework): Part 5 --blinker_ MIOT_ MULTI_ Outside (lighting technology app + Xiaoai classmate control socket multiple jacks)
Development of fire power monitoring system
Install local sources using yum
Construction and test of TFTP server under unbuntu (Debian)