5G NR PUSCH物理层过程

物理层过程

在这里插入图片描述

加扰

假设要在单个码字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.mzph.cn/pingmian/38289.shtml

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

相关文章

架构师篇-9、从事件风暴到微服务设计的落地过程

用户付款功能第二个版本的设计实现 单一职责原则(SRP) 软件系统中的每个元素只完成自己职责内的事,将其他的事交给别人去做“职责”通常人理解为一个事情,与该事情相关的事都是它的责任 一个职责是软件变化的一个原因 第二次需求…

设计模式-状态模式和策略模式

1.状态模式 1.1定义 当一个对象的内在状态改变时允许根据当前状态作出不同的行为; 1.2 适用场景 (1)一个对象的行为取决于它的状态,并且它必须在运行时根据状态来决定其行为. (2)代码中包含了大量的与状态有关的条件语句,例如:一个操作含有庞大的多分值语句(if…

pytest测试框架pytest-random-order插件随机执行用例顺序

Pytest提供了丰富的插件来扩展其功能,本章介绍下pytest-random-order插件,随机设置pytest测试用例的运行顺序,并对随机性进行一些控制。 官方文档: https://pytest-cov.readthedocs.io/en/latest/index.html 适配版本说明&#x…

xlsx实现excel下载功能——js

import dayjs from "dayjs"; import * as XLSX from "xlsx"; import XLSXS from "xlsx-style";export function export2Excel(info: {// 文件名&#xff08;工作簿名&#xff09;title: string;// 数据data: any[] | Record<string, any>[…

Crontab命令详解:轻松驾驭Linux定时任务,提升系统效率

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》《MYSQL》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 引言&#xff1a; crond是Linux系统中用来定期执行命令或指定程序任务的一种服务或软件…

AI agent是什么,什么技术栈

AI agent&#xff0c;也称为会话代理或聊天机器人&#xff0c; 是一种通过文本或语音模拟人类对话的计算机程序。 它们旨在以自然且引人入胜的方式理解和响应用户输入。 AI agent 被广泛用于各种应用中&#xff0c;包括客户服务、营销、 销售和教育。 有两种主要类型的 AI agen…

软件包管理简介

windows的软件包都不能直接在windows当中安装和使用&#xff0c;好处是windows中的大部分病毒和木马对于Linux都是不可识别的。坏处是所有的软件都必须对linux单独进行软件开发。 1.软件包分类 源码包 脚本安装包 绝大多数源代码包都是使用C语言来写的。 特征是开源。 二进…

Qt开发报错:Q_INTERFACES Error: Undefined interface

1、背景 VS2019qt5.12.10 从svn拉下来的项目&#xff0c;结果报错&#xff1a; Q_INTERFACES Error: Undefined interface 之前在VS的扩展中在线安装了qt插件&#xff0c; 安装了一半&#xff0c;比较慢&#xff0c;直接强行退出了。。 后来安装了qt官网的插件。。。。 2、报…

Linux内核 -- 汇编结合ko案例之PMU获取cpu cycle技术

ARMv7汇编实现周期计数读取与清空 本文档详细描述了如何在ARMv7平台上使用汇编语言编写周期计数器读取与清空函数&#xff0c;如何在内核模块中导出这些函数供其他模块调用&#xff0c;以及如何使用Netlink接口供用户态程序进行调用。 1. 汇编函数实现 首先&#xff0c;编写…

nginx架构学习

前言 这篇文章主要记录下对nginx架构的学习记录。 架构设计 优秀的模块化设计 高度模块化的设计是Nginx的架构基础。在Nginx中&#xff0c;除了少量的核心代码&#xff0c;其他一切皆 为模块。 在这5种模块中&#xff0c;配置模块与核心模块都是与Nginx框架密切相关的&…

Pharmacy Management System v1.0 文件上传漏洞(CVE-2022-30887)

前言 CVE-2022-30887 是一个存在于 Pharmacy Management System v1.0 中的远程代码执行&#xff08;RCE&#xff09;漏洞。这个漏洞存在于 /php_action/editProductImage.php 组件中。攻击者可以通过上传一个精心制作的图像文件来执行任意代码。 漏洞详细信息 漏洞描述: Pha…

第二十三课,再识字符串

前言&#xff0c;再识字符串 字符串是我们学习python编程第一眼见到的东西&#xff0c;一行print(“hello world”)可谓是太亲切了&#xff0c;但在此之前我们对字符串的认知也仅局限于如何用单引号、双引号、三引号去定义字符串并打印&#xff0c;今天开始我们就更深入地去理…

推荐系统入门

https://github.com/LongxingTan/Machine-learning-interview/blob/main/03_system/03_ml/recommendation.md 离线层&#xff1a;不用实时数据&#xff0c;不提供实时响应&#xff1b; 近线层&#xff1a;使用实时数据&#xff0c;不保证实时响应&#xff1b; 在线层&#xff…

【大数据】StarRocks的系统架构

StarRocks 架构简洁&#xff0c;整个系统的核心只有 FE&#xff08;Frontend&#xff09;、BE (Backend) 或 CN (Compute Node) 两类进程&#xff0c;方便部署与维护&#xff0c;节点可以在线水平扩展&#xff0c;元数据和业务数据都有副本机制&#xff0c;确保整个系统无单点。…

淘宝评论数据爬取全攻略:一网打尽好评差评,轻松分析消费趋势

在大数据时代&#xff0c;淘宝评论数据如同一座金矿&#xff0c;蕴藏着消费者的直接反馈和市场趋势。作为Python爬虫工程师&#xff0c;如何高效、合法地挖掘这座金矿&#xff1f;本文将手把手教你打造一款强大的淘宝评论爬虫&#xff0c;让你在数据分析的海洋里乘风破浪。关键…

Sharding 分片配置实例

Sharding 分片配置实例 shardingRule:tables:t_order:actualDataNodes: ds${0..1}.t_order${0..1}databaseStrategy:inline:shardingColumn: user_idalgorithmExpression: ds${user_id % 2}tableStrategy: inline:shardingColumn: order_idalgorithmExpression: t_order${orde…

轻松解锁电脑强悍性能,4000MHz的玖合星舞 DDR4 内存很能打

轻松解锁电脑强悍性能&#xff0c;4000MHz的玖合星舞 DDR4 内存很能打 哈喽小伙伴们好&#xff0c;我是Stark-C~ 很多有经验的电脑玩家在自己DIY电脑选购内存条的时候&#xff0c;除了内存总容量&#xff0c;最看重的参数那就是频率了。内存频率和我们常说的CPU主频一样&…

通用管理页面的功能实现

在Windows Forms&#xff08;WinForms&#xff09;应用程序中&#xff0c;创建一个通用的管理页面通常涉及对数据的增删改查&#xff08;CRUD&#xff09;操作&#xff0c;以及一些额外的功能&#xff0c;如数据过滤、排序、导出和导入等。 先看一个仓库管理页面要素。 仓库管…

uniapp开发H5、手机APP、微信小程序 可拖动菜单按钮

ml-fab 插件地址&#xff1a;https://ext.dcloud.net.cn/plugin?id18909 1、可拖拽悬浮按钮 ml-fab&#xff0c;支持自定义插槽&#xff0c;点击可展开一个图标按钮菜单&#xff0c;可随意拖拽。 2、支持自定义插槽&#xff0c;可实现自定义配置。 3、操作简单易上手。 ml-f…

同元软控受邀出席2024年工业软件与新质生产力创新发展论坛

近日&#xff0c;由广东省工业软件学会主办的“2024年工业软件与新质生产力创新发展论坛”在广州成功举办。同元软控深圳子公司副总经理周胜受邀出席&#xff0c;并作《数智驱动创新&#xff0c;科学计算与系统建模仿真加速新质生产力进化》主题演讲。 本次论坛集结工业软件界…