5G NR PUSCH物理层过程

news2024/10/5 22:11:56

物理层过程

在这里插入图片描述

加扰

假设要在单个码字q上传输的bit块为 b ( q ) ( 0 ) , . . . , b ( q ) ( M b i t ( q ) − 1 ) b^{(q)}(0),...,b^{(q)}(M_{bit}^{(q)} - 1) b(q)(0),...,b(q)(Mbit(q)1) ,其中 M b i t ( q ) M_{bit}^{(q)} Mbit(q)是总比特数,加扰之后的bit块长度不变,用 b ~ ( q ) ( 0 ) , . . . , b ~ ( q ) ( M b i t ( q ) − 1 ) \tilde{b}^{(q)}(0),...,\tilde{b}^{(q)}(M_{bit}^{(q)} - 1) b~(q)(0),...,b~(q)(Mbit(q)1) 表示。具体的加扰方式见38.211-6.3.1.1章节的伪代码。
在这里插入图片描述

对加扰序列产生影响的因素有下面几点:

  • 占位符’x’、‘y’:当对1或2比特的信息做信道编码时,为了最大化携带有效信息的bit位之间的[欧氏距离],会根据不同的调制阶数在其中填充占位符,编码1比特信息查看表格38.212-Table 5.3.3.1-1,编码2比特信息查看表格38.212-Table 5.3.3.2-1,其中 c 2 = ( c 0 + c 1 ) m o d 2 c_2 = (c_0 + c_1) mod 2 c2=(c0+c1)mod2
    在这里插入图片描述
    在这里插入图片描述

  • c ( q ) ( i ) c^{(q)}(i) c(q)(i),按照38.211-5.2.1章节生成, x 1 ( n ) x_1(n) x1(n)初始化为 x 1 ( 0 ) = 1 , x 1 ( n ) = 0 , n = 1 , 2 , . . . , 30 x_1(0) = 1, x_1(n) = 0,n=1,2,...,30 x1(0)=1,x1(n)=0,n=1,2,...,30 x 2 ( n ) x_2(n) x2(n)的初始化由 c i n i t c_{init} cinit决定,而 c i n i t = n R N T I ∗ 2 15 + n I D c_{init} = n_{RNTI} * 2^{15} + n_{ID} cinit=nRNTI215+nID

    在这里插入图片描述

    • n I D n_{ID} nID:用于加扰序列生成器的初始化,取值范围是 n I D ∈ { 0 , 1 , . . . , 1023 } n_{ID} \in{\{0,1,...,1023\}} nID{0,1,...,1023}

      • 如果RNTI等于C-RNTI、MCS-C-RNTI或CS-RNTI,而且没有在公共搜索空间中使用DCI format 0_0来调度传输,那么如果配置了高层参数dataScramblingIdentityPUSCH n I D n_{ID} nID就使用这个参数配置值。

      • 其他情况,使用物理小区ID,即 n I D = N I D c e l l n_{ID} = N_{ID}^{cell} nID=NIDcell

    • n R N T I n_{RNTI} nRNTI:对应PUSCH传输的RNTI。

调制

单码字q上加扰后的比特块为 b ~ ( q ) ( 0 ) , . . . , b ~ ( q ) ( M b i t ( q ) − 1 ) \tilde{b}^{(q)}(0),...,\tilde{b}^{(q)}(M_{bit}^{(q)} - 1) b~(q)(0),...,b~(q)(Mbit(q)1),要使用Table
6.3.1.2-1的调制方案进行调制,生成一个复数的调制符号块 d ( q ) ( 0 ) , . . . , d ( q ) ( M s y m b ( q ) − 1 ) d^{(q)}(0),...,d^{(q)}(M_{symb}^{(q)} - 1) d(q)(0),...,d(q)(Msymb(q)1)

在这里插入图片描述

  • 调制方式 π {\pi} π/2-BPSK

    在这里插入图片描述

  • 调制方式QPSK,b(2i)和b(2i+1)都映射到d(i)

    在这里插入图片描述

  • 调制方式16QAM,b(4i)、b(4i+1)、b(4i+2)、b(4i+3)都映射到d(i)

    在这里插入图片描述

  • 调制方式64QAM,b(6i)、b(6i+1)、b(6i+2)、b(6i+3)、b(6i+4)、b(6i+5)都映射到d(i)

    在这里插入图片描述

  • 调制方式256QAM,b(8i)、b(8i+1)、b(8i+2)、b(8i+3)、b(8i+4)、b(8i+5)、b(8i+6)、b(8i+7)都映射到d(i)

    在这里插入图片描述

层映射

码字q上的复数调制符号 d ( q ) ( 0 ) , . . . , d ( q ) ( M s y m b ( q ) − 1 ) d^{(q)}(0),...,d^{(q)}(M_{symb}^{(q)} - 1) d(q)(0),...,d(q)(Msymb(q)1)按照38.211-Table7.3.1.3-1映射到最高4层上。用 x ( i ) = [ x ( 0 ) ( i ) . . . x ( v − 1 ) ( i ) ] T , i = 0 , 1 , . . . , M s y m b l a y e r − 1 x(i) = [x^{(0)}(i) ... x^{(v-1)}(i)]^T,i = 0,1,...,M_{symb}^{layer} - 1 x(i)=[x(0)(i)...x(v1)(i)]T,i=0,1,...,Msymblayer1表示,其中 v v v是层编号, M s y m b l a y e r M_{symb}^{layer} Msymblayer是映射到每一层的调制符号数。

在这里插入图片描述

举个例子,单码字上的复数调制符号 d ( 0 ) , d ( 1 ) . . . d ( 95 ) d(0),d(1)...d(95) d(0),d(1)...d(95)要映射到4层上,那么在每一层映射的符号分别为

  • 层0: d ( 0 ) , d ( 4 ) , d ( 8 ) , . . . , d ( 88 ) , d ( 92 ) d(0),d(4),d(8),...,d(88),d(92) d(0),d(4),d(8),...,d(88),d(92)

  • 层1: d ( 1 ) , d ( 5 ) , d ( 9 ) , . . . , d ( 89 ) , d ( 93 ) d(1),d(5),d(9),...,d(89),d(93) d(1),d(5),d(9),...,d(89),d(93)

  • 层2: d ( 2 ) , d ( 6 ) , d ( 10 ) , . . . , d ( 90 ) , d ( 94 ) d(2),d(6),d(10),...,d(90),d(94) d(2),d(6),d(10),...,d(90),d(94)

  • 层3: d ( 3 ) , d ( 7 ) , d ( 11 ) , . . . , d ( 91 ) , d ( 95 ) d(3),d(7),d(11),...,d(91),d(95) d(3),d(7),d(11),...,d(91),d(95)

    对应的 x ( 0 ) = [ d ( 0 ) , d ( 1 ) , d ( 2 ) , d ( 3 ) ] T x(0) = [d(0),d(1),d(2),d(3)]^T x(0)=[d(0),d(1),d(2),d(3)]T x ( 1 ) = [ d ( 4 ) , d ( 5 ) , d ( 6 ) , d ( 7 ) ] T x(1) = [d(4),d(5),d(6),d(7)]^T x(1)=[d(4),d(5),d(6),d(7)]T x ( 2 ) = [ d ( 8 ) , d ( 9 ) , d ( 10 ) , d ( 11 ) ] T x(2) = [d(8),d(9),d(10),d(11)]^T x(2)=[d(8),d(9),d(10),d(11)]T,…,

    x ( 22 ) = [ d ( 88 ) , d ( 89 ) , d ( 90 ) , d ( 91 ) ] T x(22) = [d(88),d(89),d(90),d(91)]^T x(22)=[d(88),d(89),d(90),d(91)]T x ( 23 ) = [ d ( 92 ) , d ( 93 ) , d ( 94 ) , d ( 95 ) ] T x(23) = [d(92),d(93),d(94),d(95)]^T x(23)=[d(92),d(93),d(94),d(95)]T

    也就是说映射的结果是: [ x ( 0 ) ( 0 )   x ( 0 ) ( 1 ) , . . . , x ( 0 ) ( 23 ) x ( 1 ) ( 0 )   x ( 1 ) ( 1 ) , . . . , x ( 1 ) ( 23 ) x ( 2 ) ( 0 )   x ( 2 ) ( 1 ) , . . . , x ( 2 ) ( 23 ) x ( 3 ) ( 0 )   x ( 3 ) ( 1 ) , . . . , x ( 3 ) ( 23 ) ] \begin{bmatrix} x^{(0)}(0)\ x^{(0)}(1),...,x^{(0)}(23) \\ x^{(1)}(0)\ x^{(1)}(1),...,x^{(1)}(23) \\ x^{(2)}(0)\ x^{(2)}(1),...,x^{(2)}(23) \\ x^{(3)}(0)\ x^{(3)}(1),...,x^{(3)}(23) \\ \end{bmatrix} x(0)(0) x(0)(1),...,x(0)(23)x(1)(0) x(1)(1),...,x(1)(23)x(2)(0) x(2)(1),...,x(2)(23)x(3)(0) x(3)(1),...,x(3)(23) = [ d ( 0 )      d ( 4 )    d ( 8 ) , . . . , d ( 88 ) , d ( 92 )   d ( 1 )     d ( 5 )    d ( 9 ) , . . . , d ( 89 ) , d ( 93 ) d ( 2 )    d ( 6 )    d ( 10 ) , . . . , d ( 90 ) , d ( 94 ) d ( 3 )    d ( 7 )    d ( 11 ) , . . . , d ( 91 ) , d ( 95 ) ] \begin{bmatrix} d(0)\text{\ \ \ \ }d(4)\text{\ \ }d(8),...,d(88),d(92)\ \\ d(1)\text{\ \ \ }d(5)\text{\ \ }d(9),...,d(89),d(93) \\ d(2)\text{\ \ }d(6)\text{\ \ }d(10),...,d(90),d(94) \\ d(3)\text{\ \ }d(7)\text{\ \ }d(11),...,d(91),d(95) \\ \end{bmatrix} d(0)    d(4)  d(8),...,d(88),d(92) d(1)   d(5)  d(9),...,d(89),d(93)d(2)  d(6)  d(10),...,d(90),d(94)d(3)  d(7)  d(11),...,d(91),d(95) M s y m b l a y e r M_{symb}^{layer} Msymblayer为24

转换预编码

转换预编码是将数据依次做串并转换,变成并行 M s c P U S C H M_{sc}^{PUSCH} MscPUSCH个数据,然后对这些并行的数据做DFT(离散傅里叶变换),也就是说这一步的主要作用是将时域上的离散数据变换成频域上的离散数据。

是否要做这一步操作,要看高层配置参数PUSCH-onfig ->transformPrecoder是否配置为enabled。

如果这个功能打开,那么 x ~ ( 0 ) ( i ) \tilde{x}^{(0)}(i) x~(0)(i)的值取决于PT-RS(相位跟踪参考信号)的配置,以一层传输为例:

  • 没有用PT-RS,单独的层 λ = 0 \lambda = 0 λ=0上的复数符号块 x ( 0 ) , . . . , x 0 ( M s y m b l a y e r − 1 ) x^{(0)},...,x^{0}(M_{symb}^{layer}-1) x(0),...,x0(Msymblayer1)应该分成 M s y m b l a y e r / M s c P U S C H M_{symb}^{layer}/M_{sc}^{PUSCH} Msymblayer/MscPUSCH个集合,每个集合对应一个OFDM符号,且 x ~ ( 0 ) ( i ) = x ( 0 ) ( i ) \tilde{x}^{(0)}(i) = x^{(0)}(i) x~(0)(i)=x(0)(i)

    按照上面的例子,假设 M s c P U S C H M_{sc}^{PUSCH} MscPUSCH=12,层0上的符号 x ( 0 ) ( 0 )   x ( 0 ) ( 1 ) , . . . , x ( 0 ) ( 23 ) x^{(0)}(0)\ x^{(0)}(1),...,x^{(0)}(23) x(0)(0) x(0)(1),...,x(0)(23)分成两
    个集合: x ( 0 ) ( 0 ) , . . . ,   x ( 0 ) ( 11 ) x^{(0)}(0),...,\ x^{(0)}(11) x(0)(0),..., x(0)(11) x ( 0 ) ( 12 ) , . . . ,   x ( 0 ) ( 23 ) x^{(0)}(12),...,\ x^{(0)}(23) x(0)(12),..., x(0)(23),各对应一个OFDM符号。

在这里插入图片描述

  • 使用了PT-RS,复数符号块 x ( 0 ) , . . . , x 0 ( M s y m b l a y e r − 1 ) x^{(0)},...,x^{0}(M_{symb}^{layer}-1) x(0),...,x0(Msymblayer1)被分成多个集合,映射时要避开PT-RS占用的位置,所以集合 l l l包含的符号数为 M s c P U S C H − ε l N s a m p g r o u p N g r o u p P T R S M_{sc}^{PUSCH}-\varepsilon_lN_{samp}^{group}N_{group}^{PTRS} MscPUSCHεlNsampgroupNgroupPTRS,在做转换预编码之前映射到符号 x ~ ( 0 ) ( l M s c P U S C H + i ′ ) \tilde{x}^{(0)}(lM_{sc}^{PUSCH}+i') x~(0)(lMscPUSCH+i),其中 i ′ ∈ { 0 , 1 , . . . , M s c P U S C H − 1 } i'\in{\{0,1,...,M_{sc}^{PUSCH}-1\}} i{0,1,...,MscPUSCH1} i ′ ≠ m i'\neq m i=m m m m指在集合 l l l中的PT-RS样本索引,每个PT-RS组中的样本数量 N s a m p g r o u p N_{samp}^{group} Nsampgroup,PT-RS组的数量 N g r o u p P T − R S N_{group}^{PT-RS} NgroupPTRS都在6.4.1.2.2.2中定义。当OFDM符号 l l l包含>=1个PT-RS样本时 ε l = 1 \varepsilon_l=1 εl=1,否则 ε l = 0 \varepsilon_l=0 εl=0

    在这里插入图片描述

    基于上面的例子,假设 N s a m p g r o u p N_{samp}^{group} Nsampgroup取值2, N g r o u p P T − R S N_{group}^{PT-RS} NgroupPTRS取值2,通过上表可得m=2,3,8,9,那么 x ( 0 ) ( 0 )   x ( 0 ) ( 1 ) , . . . , x ( 0 ) ( 23 ) x^{(0)}(0)\ x^{(0)}(1),...,x^{(0)}(23) x(0)(0) x(0)(1),...,x(0)(23)就会按下图来映射
    在这里插入图片描述

最后做转换预编码,按照下面的公式生成一个复数符号块 y ( 0 ) ( 0 ) , . . . , y ( 0 ) ( M s y m b l a y e r − 1 ) y^{(0)}(0),...,y^{(0)}(M_{symb}^{layer}-1) y(0)(0),...,y(0)(Msymblayer1)

在这里插入图片描述

预编码

向量块 [ y ( 0 ) ( i ) . . . y ( v − 1 ) ( i ) ] T , i = 0 , 1 , . . . , M s y m b l a y e r − 1 [y^{(0)}(i) ... y^{(v-1)}(i)]^T,i=0,1,...,M_{symb}^{layer}-1 [y(0)(i)...y(v1)(i)]T,i=0,1,...,Msymblayer1按如下方式预编码并映射到天线端口 { p 0 , . . . , p ρ − 1 } \{p_0,...,p_{\rho-1}\} {p0,...,pρ1}上:

在这里插入图片描述
,其中 i = 0 , 1 , . . . , M s y m b a p − 1 , M s y m p a p = M s y m b l a y e r i=0,1,...,M_{symb}^{ap}-1,M_{symp}^{ap}=M_{symb}^{layer} i=0,1,...,Msymbap1,Msympap=Msymblayer

  • 如果是基于非码本的传输,则预编码矩阵W为单位矩阵。

  • 如果是基于码本的传输:在单天线端口进行单层传输时W =1;否则通过TPMI索引查表38.211 Table 6.3.1.5-1到Table 6.3.1.5-7得到W,TPMI索引从DCI或者高层参数中获取。DCI 1_0中用字段‘Precoding information and number of layers’来指示TPMI,通过如下方式确定TPMI索引:

    • 4天线端口,高层参数配置为txConfig = codebook,transformPrecoder = disabled,maxRank = 2/3/4,那么根据codebookSubset的不同配置值查表Table 7.3.1.1.2-2获取TMPI
      在这里插入图片描述

    • 4天线端口,高层参数配置为txConfig = codebook,transformPrecoder = enabled或者transformPrecoder = disabled且maxRank = 1,那么根据codebookSubset的不同配置值查表Table 7.3.1.1.2-3获取TMPI
      在这里插入图片描述

    • 2天线端口,高层参数配置为txConfig = codebook,transformPrecoder = disabled且maxRank = 2,那么根据codebookSubset的不同配置值查表Table 7.3.1.1.2-4获取TMPI
      在这里插入图片描述

    • 2天线端口,高层参数配置为txConfig = codebook,transformPrecoder = enabled或者transformPrecoder = disabled且maxRank = 1,那么根据codebookSubset的不同配置值查表Table 7.3.1.1.2-5获取TMPI
      在这里插入图片描述

  • 如果没有配置高层参数txConfig,W=1。

例子:对于使用四个天线端口的四层传输,从DCI中得到TPMI索引为0,查表Table 6.3.1.5-7可以得到W,从而计算出 z ( p ) ( 0 ) , . . . , z ( p ) ( M s y m b a p − 1 ) z^{(p)}(0),...,z^{(p)}(M_{symb}^{ap}-1) z(p)(0),...,z(p)(Msymbap1)

在这里插入图片描述

1 2 [ 1   0   0   0 0   1   0   0 0   0   1   0 0   0   0   1 ] \frac{1}{2}\begin{bmatrix} 1\ 0\ 0\ 0 \\ 0\ 1\ 0\ 0 \\ 0\ 0\ 1\ 0 \\ 0\ 0\ 0\ 1 \\ \end{bmatrix} 21 1 0 0 00 1 0 00 0 1 00 0 0 1 * [ y ( 0 ) ( 0 )   y ( 0 ) ( 1 )   . . . y ( 0 ) ( 23 ) y ( 1 ) ( 0 )   y ( 1 ) ( 1 )   . . . y ( 1 ) ( 23 ) y ( 2 ) ( 0 )   y ( 2 ) ( 1 )   . . . y ( 2 ) ( 23 ) y ( 3 ) ( 0 )   y ( 3 ) ( 1 )   . . . y ( 3 ) ( 23 ) ] \begin{bmatrix} y^{(0)}(0)\ y^{(0)}(1)\ ...y^{(0)}(23) \\ y^{(1)}(0)\ y^{(1)}(1)\ ...y^{(1)}(23) \\ y^{(2)}(0)\ y^{(2)}(1)\ ...y^{(2)}(23) \\ y^{(3)}(0)\ y^{(3)}(1)\ ...y^{(3)}(23) \\ \end{bmatrix} y(0)(0) y(0)(1) ...y(0)(23)y(1)(0) y(1)(1) ...y(1)(23)y(2)(0) y(2)(1) ...y(2)(23)y(3)(0) y(3)(1) ...y(3)(23) = [ y ( 0 ) ( 0 ) 2    y ( 0 ) ( 1 ) 2   ...  y ( 0 ) ( 23 ) 2 y ( 1 ) ( 0 ) 2    y ( 1 ) ( 1 ) 2   ...  y ( 1 ) ( 23 ) 2 y ( 2 ) ( 0 ) 2    y ( 2 ) ( 1 ) 2   ...  y ( 2 ) ( 23 ) 2 y ( 3 ) ( 0 ) 2    y ( 3 ) ( 1 ) 2   ...  y ( 3 ) ( 23 ) 2 ] \begin{bmatrix} \frac{y^{(0)}(0)}{2}\text{\ \ }\frac{y^{(0)}(1)}{2}\text{\ \ ...\ }\frac{y^{(0)}(23)}{2} \\ \frac{y^{(1)}(0)}{2}\text{\ \ }\frac{y^{(1)}(1)}{2}\text{\ \ ...\ }\frac{y^{(1)}(23)}{2} \\ \frac{y^{(2)}(0)}{2}\text{\ \ }\frac{y^{(2)}(1)}{2}\text{\ \ ...\ }\frac{y^{(2)}(23)}{2} \\ \frac{y^{(3)}(0)}{2}\text{\ \ }\frac{y^{(3)}(1)}{2}\text{\ \ ...\ }\frac{y^{(3)}(23)}{2} \\ \end{bmatrix} 2y(0)(0)  2y(0)(1)  ... 2y(0)(23)2y(1)(0)  2y(1)(1)  ... 2y(1)(23)2y(2)(0)  2y(2)(1)  ... 2y(2)(23)2y(3)(0)  2y(3)(1)  ... 2y(3)(23) = [ p ( 0 ) ( i ) p ( 1 ) ( i ) p ( 2 ) ( i ) p ( 3 ) ( i ) ] \begin{bmatrix} p^{(0)}(i) \\ p^{(1)}(i) \\ p^{(2)}(i) \\ p^{(3)}(i) \\ \end{bmatrix} p(0)(i)p(1)(i)p(2)(i)p(3)(i)

映射到虚拟RB

对于每一个用于传输PUSCH的天线端口,复数符号块 z ( p ) ( 0 ) , . . . , z ( p ) ( M s y m b a p − 1 ) z^{(p)}(0),...,z^{(p)}(M_{symb}^{ap}-1) z(p)(0),...,z(p)(Msymbap1)应该从 z ( p ) ( 0 ) z^{(p)}(0) z(p)(0)开始按顺序映射到虚拟RB的RE ( k ′ , l ) p , μ (k',l)_{p,\mu} (k,l)p,μ,这些RE要满足下面的标准:

  • 都在分配给PUSCH传输的虚拟RB中

  • 没有用于传输DM-RS、PT-RS,也没有用作其他共同调度的UE的DM-RS

映射的规则是先频域升序,然后时域升序。

从虚拟RB映射到物理RB

VRB要按照非交织方式映射到PRB。有两种映射情况:

  • Msg3在激活的上行BWP i 上,该BWP起始于 N B W P , i s t a r t N_{BWP,i}^{start} NBWP,istart,而且包含了初始上行BWP(起始于 N B W P , 0 s t a r t N_{BWP,0}^{start} NBWP,0start)的所有RB,并且和初始上行BWP有一样的subcarrier spacing和循环前缀,这种情况下VRB n n n映射到PRB n + N B W P , 0 s t a r t − N B W P , i s t a r t n+N_{BWP,0}^{start}-N_{BWP,i}^{start} n+NBWP,0startNBWP,istart

  • 其他情况,VRB n n n映射到PRB n n n

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1879856.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL高级-MVCC-隐藏字段

文章目录 1、介绍2、测试2.1、进入服务器中的 /var/lib/mysql/atguigu/2.2、查看有主键的表 stu2.3、查看没有主键的表 employee2.3.1、创建表 employee2.3.2、查看表结构及其其中的字段信息 1、介绍 ---------------- | id | age | name | ---------------- | 1 | 1 | Js…

云计算与 AI 融合:Amazon Connect 开创客户服务智能时代

在亚马逊云科技 re:Invent 2023 大会上,Amazon Connect 引入生成式人工智能功能,标志着客户服务迎来了智能化的新时代。云计算作为提供弹性、可靠、高效服务的基础,与人工智能的融合为客户服务注入了新的活力。这次推出的新功能不仅仅是技术的…

Python和MATLAB粘性力接触力动态模型半隐式欧拉算法

🎯要点 🎯运动力模型计算制作过程:🖊相机捕捉网球运动图,制定运动数学模型,数值微分运动方程 | 🖊计算运动,欧拉算法离散积分运动,欧拉-克罗默算法微分运动方程 &#…

神经网络实战2-损失函数和反向传播

其实就是通过求偏导的方式,求出各个权重大小 loss函数是找最小值的,要求导,在计算机里面计算导数是倒着来的,所以叫反向传播。 import torch from torch.nn import L1Lossinputstorch.tensor([1,2,3],dtypetorch.float32) targe…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 灰度图像恢复(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 &#x1f…

Android 根证书管理与证书验证

大部分的安卓应用都免不了与后端服务器进行通信。在通信过程中,主要面临两方面的风险:1、中间人攻击。当通信使用 HTTP 等明文协议,通信内容可被嗅探甚至篡改。2、通信内容被攻击者分析。使用加密的协议,虽然避免了中间人攻击&…

RocketMQ 顺序消息和事务消息及其原理

RocketMQ 顺序消息和事务消息 1、Spring Cloud Alibaba RocketMq 架构图2、RocketMQ 顺序消息2.1、RockerMQ 实现顺序消费2.1.1、顺序发消息2.1.2、顺序收消息 2.2、顺序发送的技术原理2.3、顺序消费的技术原理 3、RocketMQ 的事务消息3.1、RocketMQ 事务消息流程3.2、事务消息…

查看Windows启动时长

(附图片)电脑自带检测开机时长---查看方式_电脑开机时长命令-CSDN博客 eventvwr - Windows日志 - 系统 - 查找 - 6013.jpg

如何借助 LLM 设计和实现任务型对话 Agent

1 引言 在人工智能的快速发展中,任务型对话 Agent 正成为提升用户体验和工作效率的关键技术。这类系统通过自然语言交互,专注于高效执行特定任务,如预订酒店或查询天气。尽管市场上的开源框架如 Rasa 和 Microsoft Bot Framework 在对话理解…

使用ioDraw,AI绘图只需几秒钟!

只需几秒钟,就能将文字或图片转化为精准的思维导图、流程图、折线图、柱状图、饼图等各种图表! 思维导图 思维导图工具使用入口 文字转思维导图 将文本大纲或想法转换成可视化的思维导图,以组织和结构化您的想法。 图片转思维导图 从现有…

汽车电子工程师入门系列——AUTOSAR通信服务框架(下)

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

垃圾回收与算法

目录 一、判断对象已经 "死亡" 1、引用计数法 2、可达性分析 二、垃圾收集算法 1、标记清楚算法 2、复制算法 3、标记整理算法 4、分代收集算法 4.1、新生代与复制算法 4.2老年代与标记复制算法 一、判断对象已经 "死亡" 1、引用计数法 在 Java 中&#…

基于STM32的温湿度检测TFT屏幕proteus恒温控制仿真系统

一、引言 本文介绍了一个基于STM32的恒温控制箱检测系统,该系统通过DHT11温湿度传感器采集环境中的温湿度数据,并利用TFT LCD屏幕进行实时显示。通过按键切换页面显示,通过按键切换实现恒温控制箱的恒温控制。为了验证系统的可靠性和稳定性&…

低代码表单配置平台替代普通表单配置平台,前端部分重构的设计和思路

前言 最近将公司的旧表单配置平台重构为低代码表单配置平台,这里记录一下这个过程的设计和思路,不涉及具体的代码;另外这篇文章基本只涉及前端部分,也不涉及与后端数据交互部分。 需求 固化的表单配置平台 -> 灵活的表单配置…

python格式文件

python小白考后复习 CSV格式文件ini格式文件我们可以读取所有节点还可以输出一个节点下所有键值对组成的元组获取节点下的键对应的值判断节点是否存在添加节点还可以添加键值还可以删除节点 XML格式文件读取若是文件格式存在的xml若是以字符串形式存在的xml获取子标签还有获取子…

【最长公共前缀 动态规划】2430. 对字母串可执行的最大删除数

如果有不明白的,请加文末QQ群。 本文涉及知识点 最长公共前缀 动态规划 动态规划汇总 LeetCode 2430. 对字母串可执行的最大删除数 给你一个仅由小写英文字母组成的字符串 s 。在一步操作中,你可以: 删除 整个字符串 s ,或者 …

Sping源码(九)—— Bean的初始化(非懒加载)— Bean的创建方式(构造器方法)

序言 前面几篇文章介绍了Spring中几种方式下Bean对象的实例化的过程,那如果之前的几种都不满足,按照Spring中正常Bean的实例化步骤,该如何创建这个Bean对象呢? 测试类 我们先创建几个debug中用到的栗子。 Person 以一个平平无…

pytest-两种不同写法

XUnit 的写法 熟悉 unittest 框架的人都知道,unittest 里面 fixture 的写法是 setUp 和 tearDown,setUp_class 和 tearDown_class,只有这一种写法,而且是固定的写法哈。 Pytest 是兼容 unittest 的,当然也支持这样写…

B : 斐波那契数列第n项Plus

Description 斐波那契数列即 1, 1, 2, 3, 5...,�(�)�(�−1)�(�−2) 。求斐波那契数列第 n 项 Input 每组数据给出 1≤�≤109 。 Output 斐波那契数列第 n 项 对 1097 取模 Sam…

hadoop词频统计

1 Hadoop 安装与伪分布的搭建 2 Hadoop词频统计 此文章基于搭建好hadoop之后做的词频统计实验,以上是链接为搭建hadoop的教程 目录 1 HDFS 文件系统常用命令 2 词频统计实验准备工作 2.1 启动hadoop 关闭防火墙 2.2 查看图形化界面 2.3 文件上传 3 词频统计…