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

边栏推荐
- 解决Editor.md上传图片获取不到图片地址问题
- 顺利毕业[2]-学生健康管理系统 功能开发中。。。
- Integrated use of interlij idea and sonarqube
- Find all possible recipes from given supplies
- PolyWorks script development learning notes (III) -treeview advanced operation
- Analysis of the implementation principle of an open source markdown to rich text editor
- Design and development of biological instruments
- The rise and fall of mobile phones in my perspective these 10 years
- Leetcode daily question (985. sum of even numbers after queries)
- [CSDN]C1訓練題解析_第三部分_JS基礎
猜你喜欢

Electronic product design

Design and development of biological instruments

Django operates Excel files through openpyxl to import data into the database in batches.

MySQL environment variable configuration

LeetCode每日一题(931. Minimum Falling Path Sum)

Hudi data management and storage overview

Spark 概述

numpy. Reshape() and resize() functions

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

Flink学习笔记(九)状态编程
随机推荐
1922. Count Good Numbers
小王叔叔的博客目录【持续更新中】
Leetcode daily question (1362. closest divisors)
Filter comments to filter out uncommented and default values
一款开源的Markdown转富文本编辑器的实现原理剖析
Detailed steps of windows installation redis
Hudi learning notes (III) analysis of core concepts
Modify idea code
Arduino handles JSON data, arduinojson assistant
Global KYC service provider advance AI in vivo detection products have passed ISO international safety certification, and the product capability has reached a new level
[kotlin puzzle] what happens if you overload an arithmetic operator in the kotlin class and declare the operator as an extension function?
Leetcode daily question (2305. fair distribution of cookies)
Integrated use of interlij idea and sonarqube
Spark 集群安装与部署
MySQL data manipulation language DML common commands
How MySQL modifies null to not null
Difference of EOF
QT qstring:: number apply base conversion
Jetson Nano 自定义启动图标kernel Logo cboot logo
QT sub window is blocked, and the main window cannot be clicked after the sub window pops up