当前位置: 首页 > news >正文

OFDM学习-(二)长短序列和PPDU整体数据处理流程

OFDM学习

(二)长短序列和PPDU整体数据处理流程

  • OFDM学习
  • 前言
  • 一、短序列
    • 短序列的作用
  • 二、长序列
  • 三、PLCP/SIGNAL/DATA数据处理流程
  • 三、fpga实现
    • STS模块
    • LTS模块
    • 训练序列模块
    • 仿真波形
  • 总结


前言

根据框图可以知道发射机这部分信号在DA转换之前,数据是两路,分别是实部和虚部8位信号。通过DA转换也是两路模拟信号,通过IQ调制搞到射频。
PPDU包括3部分数据,长短序列是不需要进行ofdm操作的,signal和data的信号需要进行ofdm操作,也就是下面图中扰码、卷积编码、交织等等的操作,最后通过ifft和cp加窗后进行输出,最后将实部信号与虚部信号与训练序列的实部和虚部按照位置分别发送。
的

一、短序列

子载波有效数量是52个,短序列只用到了其中的12个子载波,每个载波之间的间隔为4,位置序号是:
{-24,-20,-16,-12,-8,-4, 4,8,12,16,20,24},直流分量不能使用。又因为短序列采用的是BPSK模式,因此可以通过载波位置以及调制方式决定他的数据格式。确定[9:0] STS_IM[8] 和[9:0] STS_RE[8],就实现了短序列的产生,按照位置依次将实部序列和虚部序列信号发送即可。
因此短序列在频域上就是
% STS频域表示
S=[0,0,0,0,0,0,0,0,1+i,0,0,0,-1-i,0,0,0,1+i,0,0,0,-1-i,0,0,0,-1-i,0,0,0,1+i,0,0,0,0,0,0,0,-1-i,0,0,0,-1-i,0,0,0,1+i,0,0,0,1+i,0,0,0,1+i,0,0,0,1+i,0,0,0,0,0,0,0];
但是最终需要发出去的是时域信号,所以这个频域信号理论上是要经过ifft模块处理之后发送出去,但是因为短序列都是固定的数值,因此时序信号的实部和虚部也是固定的,所以短训练序列的产生也就是通过MATLAB将频域转换为时域后,将固定的时域信号的实部值和虚部值直接使用。短训练序列的数据格式,1位符号位,1位整数位,6位小数位。

从时域上看,每一个短序列是16个采样点,也就是总共10*16=160点。

短序列的作用

接收机进行分组检测、同步等

二、长序列

类似短序列,基本原理相同,各自作用不同。

三、PLCP/SIGNAL/DATA数据处理流程

训练序列直接按照时域产生实部信号和虚部信号,不需要进行ofdm调制。

SIGNAL信号和DATA信号需要从单比特流数据经过扰码、卷积编码、交织、符号调制、16QAM调制、导频插入、IFFT模块、CP加窗等步骤最后与训练序列组合发送到DAC进行射频端的处理。

三、fpga实现

STS模块

`timescale 1ns / 1ps 
///
// Company:                                                                      
// Engineer: YWang                                                                    
//                                                                                   
// Create Date: 2023-03-10  14:53:45
// Design Name:                                                                    
// Module Name: STS_generator.v                                                          
// Project Name:                                                                   
// Target Devices:                                                                  
// Tool versions:                                                                  
// Description:                                                                  
//                                                                                  
// Dependencies: 0                                                                  
//                                                                                  
// Revision:                                                                    
// Revision 0.01 - File Created                                                     
// Additional Comments:                                                        
//                                                                                   
/// 
module   STS_generator(  input                   clk         ,   input                   rst_n       ,   input                   Tx_Clr      ,   input                   Start_En    ,output reg [7:0]        STS_Im      ,output reg [7:0]        STS_Re      ,output reg              STS_Vld     ,output reg [7:0]        STS_Index   ,output reg              STS_Done             
);                 reg  [15:0] Short_Mem [15:0];reg  [3:0]  i,j;wire        STS_Req;assign STS_Req = Start_En || (STS_Index>0);always @(posedge clk or negedge rst_n) beginif(~rst_n) begin  Short_Mem[0]  <= {8'b00001100,8'b00001100};Short_Mem[1]  <= {8'b11011110,8'b00000001};Short_Mem[2]  <= {8'b11111101,8'b11101100};Short_Mem[3]  <= {8'b00100100,8'b11111101};Short_Mem[4]  <= {8'b00011000,8'b00000000};Short_Mem[5]  <= {8'b00100100,8'b11111101};Short_Mem[6]  <= {8'b11111101,8'b11101100};Short_Mem[7]  <= {8'b11011110,8'b00000001};Short_Mem[8]  <= {8'b00001100,8'b00001100};Short_Mem[9]  <= {8'b00000001,8'b11011110};Short_Mem[10] <= {8'b11101100,8'b11111101};Short_Mem[11] <= {8'b11111101,8'b00100100};Short_Mem[12] <= {8'b00000000,8'b00011000};Short_Mem[13] <= {8'b11111101,8'b00100100};Short_Mem[14] <= {8'b11101100,8'b11111101};Short_Mem[15] <= {8'b00000001,8'b11011110};STS_Vld <= 0;STS_Index <=  0;STS_Done <= 0;STS_Re <= 0;STS_Im <= 0;i <= 0;j <= 0;end  else if( Tx_Clr  ) begin i <= 0;j <= 0;STS_Vld <= 0;STS_Index <= 0;STS_Done <= 0;endelse if( STS_Req && (STS_Index<161) ) beginSTS_Index <= STS_Index + 1;STS_Vld <=  1'b1; if(i<10)    beginif(j==15) begin j <= 0;i <= i+ 1; STS_Re <= Short_Mem[j][15:8];  STS_Im <= Short_Mem[j][7:0];endelse  beginif(i==0 && j==0) beginSTS_Re <= Short_Mem[j][15:8]>>1; //鍔犵獥锛屽乏绉讳竴 STS_Im <= Short_Mem[j][7:0]>>1;//娉ㄦ剰锛歋hort_Mem銆�0銆戜负姝f暟endelse beginSTS_Re <= Short_Mem[j][15:8];  STS_Im <= Short_Mem[j][7:0];endj <= j + 1;endendelse begin  //鏈�鍚庝竴浣�STS_Re <= Short_Mem[0][15:8]>>1; //鍔犵獥锛屽乏绉讳竴  绗竴涓��STS_Im <= Short_Mem[0][7:0]>>1; STS_Done <= 1'b1;endend else begin STS_Vld <= 1'b0;endendendmodule          

LTS模块

`timescale 1ns / 1ps 
///
// Company:                                                                      
// Engineer: YWang                                                                    
//                                                                                   
// Create Date: 2023-03-10  14:53:45
// Design Name:                                                                    
// Module Name: LTS_generator.v                                                          
// Project Name:                                                                   
// Target Devices:                                                                  
// Tool versions:                                                                  
// Description:                                                                  
//                                                                                  
// Dependencies: 0                                                                  
//                                                                                  
// Revision:                                                                    
// Revision 0.01 - File Created                                                     
// Additional Comments:                                                        
//                                                                                   
/// 
module   LTS_generator(  input                   clk         ,   input                   rst_n       ,   input                   Tx_Clr      ,   input                   Start_En    ,output reg [7:0]        LTS_Im      ,output reg [7:0]        LTS_Re      ,output reg              LTS_Vld     ,output reg [7:0]        LTS_Index   ,output reg              LTS_Done             
);                 reg  [15:0] Long_Mem [63:0];reg  [6:0]  i,j;wire        LTS_Req;assign LTS_Req = Start_En || (LTS_Index>0);always @(posedge clk or negedge rst_n) beginif(~rst_n) begin  //鏃跺煙鏍峰�� Re      ImLong_Mem[0]  <= {8'b00101000 , 8'b00000000};Long_Mem[1]  <= {8'b11111111 , 8'b11100001};Long_Mem[2]  <= {8'b00001010 , 8'b11100100};Long_Mem[3]  <= {8'b00011001 , 8'b00010101};Long_Mem[4]  <= {8'b00000101 , 8'b00000111};Long_Mem[5]  <= {8'b00001111 , 8'b11101010};Long_Mem[6]  <= {8'b11100011 , 8'b11110010};Long_Mem[7]  <= {8'b11110110 , 8'b11100101};Long_Mem[8]  <= {8'b00011001 , 8'b11111001};Long_Mem[9]  <= {8'b00001110 , 8'b00000001};Long_Mem[10] <= {8'b00000000 , 8'b11100011};Long_Mem[11] <= {8'b11011101 , 8'b11110100};Long_Mem[12] <= {8'b00000110 , 8'b11110001};Long_Mem[13] <= {8'b00001111 , 8'b11111100};Long_Mem[14] <= {8'b11111010 , 8'b00101001};Long_Mem[15] <= {8'b00011111 , 8'b11111111};Long_Mem[16] <= {8'b00010000 , 8'b11110000};Long_Mem[17] <= {8'b00001001 , 8'b00011001};Long_Mem[18] <= {8'b11110001 , 8'b00001010};Long_Mem[19] <= {8'b11011110 , 8'b00010001};Long_Mem[20] <= {8'b00010101 , 8'b00011000};Long_Mem[21] <= {8'b00010010 , 8'b00000100};Long_Mem[22] <= {8'b11110001 , 8'b00010101};Long_Mem[23] <= {8'b11110010 , 8'b11111010};Long_Mem[24] <= {8'b11110111 , 8'b11011001};Long_Mem[25] <= {8'b11100001 , 8'b11111100};Long_Mem[26] <= {8'b11011111 , 8'b11111011};Long_Mem[27] <= {8'b00010011 , 8'b11101101};Long_Mem[28] <= {8'b11111111 , 8'b00001110};Long_Mem[29] <= {8'b11101000 , 8'b00011101};Long_Mem[30] <= {8'b00010111 , 8'b00011011};Long_Mem[31] <= {8'b00000011 , 8'b00011001};Long_Mem[32] <= {8'b11011000 , 8'b00000000};Long_Mem[33] <= {8'b00000011 , 8'b11100111};Long_Mem[34] <= {8'b00010111 , 8'b11100101};Long_Mem[35] <= {8'b11101000 , 8'b11100011};Long_Mem[36] <= {8'b11111111 , 8'b11110010};Long_Mem[37] <= {8'b00010011 , 8'b00010011};Long_Mem[38] <= {8'b11011111 , 8'b00000101};Long_Mem[39] <= {8'b11100001 , 8'b00000100};Long_Mem[40] <= {8'b11110111 , 8'b00100111};Long_Mem[41] <= {8'b11110010 , 8'b00000110};Long_Mem[42] <= {8'b11110001 , 8'b11101011};Long_Mem[43] <= {8'b00010010 , 8'b11111100};Long_Mem[44] <= {8'b00010101 , 8'b11101000};Long_Mem[45] <= {8'b11011110 , 8'b11101111};Long_Mem[46] <= {8'b11110001 , 8'b11110110};Long_Mem[47] <= {8'b00001001 , 8'b11100111};Long_Mem[48] <= {8'b00010000 , 8'b00010000};Long_Mem[49] <= {8'b00011111 , 8'b00000001};Long_Mem[50] <= {8'b11111010 , 8'b11010111};Long_Mem[51] <= {8'b00001111 , 8'b00000100};Long_Mem[52] <= {8'b00000110 , 8'b00001111};Long_Mem[53] <= {8'b11011101 , 8'b00001100};Long_Mem[54] <= {8'b00000000 , 8'b00011101};Long_Mem[55] <= {8'b00001110 , 8'b11111111};Long_Mem[56] <= {8'b00011001 , 8'b00000111};Long_Mem[57] <= {8'b11110110 , 8'b00011011};Long_Mem[58] <= {8'b11100011 , 8'b00001110};Long_Mem[59] <= {8'b00001111 , 8'b00010110};Long_Mem[60] <= {8'b00000101 , 8'b11111001};Long_Mem[61] <= {8'b00011001 , 8'b11101011};Long_Mem[62] <= {8'b00001010 , 8'b00011100};Long_Mem[63] <= {8'b11111111 , 8'b00011111};LTS_Vld <= 0;LTS_Index <=  0;LTS_Done <= 0;LTS_Re <= 0;LTS_Im <= 0;i <= 0;j <= 0;end  else if( Tx_Clr  ) begin i <= 0;j <= 0;LTS_Vld <= 0;LTS_Index <= 0;LTS_Done <= 0;endelse if( LTS_Req && (LTS_Index<161) ) beginLTS_Index <= LTS_Index + 1;LTS_Vld <=  1'b1; if(i==0)    beginif(j==31) begin j <= 0;i <= i+ 1; LTS_Re <= Long_Mem[j+32][15:8];  LTS_Im <= Long_Mem[j+32][7:0];endelse  beginif(i==0 && j==0) beginLTS_Re <= 8'b11101100; //鐭缁冨簭鍒楀埌闀胯缁冨簭鍒楃殑绐楀彛鍑芥暟LTS_Im <= Long_Mem[j+32][7:0];endelse beginLTS_Re <= Long_Mem[j+32][15:8];  LTS_Im <= Long_Mem[j+32][7:0];endj <= j + 1;endendelse if( i==1 || i==2 )    beginif(j==63) begin j <= 0;i <= i+ 1; LTS_Re <= Long_Mem[j][15:8];  LTS_Im <= Long_Mem[j][7:0];endelse  begin LTS_Re <= Long_Mem[j][15:8];  LTS_Im <= Long_Mem[j][7:0]; j <= j + 1;endendelse begin  //  鍔犵獥澶勭悊LTS_Re <= Long_Mem[0][15:8]>>1; //鍔犵獥锛屽乏绉讳竴浣�  LTS_Im <= Long_Mem[0][7:0]>>1; LTS_Done <= 1'b1;endend else begin LTS_Vld <= 1'b0;endendendmodule          

训练序列模块

`timescale 1ns / 1ps 
///
// Company:                                                                      
// Engineer: YWang                                                                    
//                                                                                   
// Create Date: 2023-03-10  14:22:41
// Design Name:                                                                    
// Module Name: symbol_train.v                                                          
// Project Name:                                                                   
// Target Devices:                                                                  
// Tool versions:                                                                  
// Description:                                                                  
//                                                                                  
// Dependencies: 0                                                                  
//                                                                                  
// Revision:                                                                    
// Revision 0.01 - File Created                                                     
// Additional Comments:????????????????                                                     
//                                                                                   
/// 
module   symbol_train(  input               clk         ,   input               rst_n       ,   input               Tx_Clr      ,   input               Start_En    ,output  [7:0]       Train_Im    ,output  [7:0]       Train_Re    ,output              Train_Vld   ,output  [8:0]       Train_Index ,output              Train_Done           
);              wire                STS_Start_En;wire    [7:0]       STS_Im      ;wire    [7:0]       STS_Re      ;wire                STS_Vld     ;wire    [7:0]       STS_Index   ;wire                STS_Done    ;wire                LTS_Start_En;wire    [7:0]       LTS_Im      ;wire    [7:0]       LTS_Re      ;wire                LTS_Vld     ;      wire    [7:0]       LTS_Index   ;wire                LTS_Done    ;STS_generator  u_STS(.clk                (clk            ),.rst_n              (rst_n          ),.Tx_Clr             (Tx_Clr         ),.Start_En           (STS_Start_En   ),.STS_Im             (STS_Im         ),.STS_Re             (STS_Re         ),.STS_Vld            (STS_Vld        ),.STS_Index          (STS_Index      ),.STS_Done           (STS_Done       ));LTS_generator  u_LTS(.clk                (clk            ),.rst_n              (rst_n          ),.Tx_Clr             (Tx_Clr         ),.Start_En           (LTS_Start_En   ),.LTS_Im             (LTS_Im         ),.LTS_Re             (LTS_Re         ),.LTS_Vld            (LTS_Vld        ),.LTS_Index          (LTS_Index      ),.LTS_Done           (LTS_Done       ));assign Train_Im = STS_Vld ? STS_Im : LTS_Vld ? LTS_Im : 8'b0 ; assign Train_Re = STS_Vld ? STS_Re : LTS_Vld ? LTS_Re : 8'b0 ; assign Train_Vld = STS_Vld ? 1'b1 : LTS_Vld ? 1'b1 : 1'b0;assign Train_Index = STS_Index + LTS_Index;assign Train_Done = LTS_Done;assign STS_Start_En = Start_En;assign LTS_Start_En = STS_Done;endmodule          

仿真波形

在这里插入图片描述

总结

训练序列的产生要明白:
频域上用了12个子载波,间隔为4,BPSK符号格式,功率因数1.4几来着?。
频域固定,因此时域实部和虚部也是固定,通过MATLAB就可以直接得到时域的训练序列的实部和虚部的数值,因此直接在程序中写死循环即可。
数据格式:1位符号,1位整数,6位小数

代码参考:基于FPGA的OFDM基带发射机的设计与实现

训练模块代码未做修改。

相关文章:

OFDM学习-(二)长短序列和PPDU整体数据处理流程

OFDM学习 &#xff08;二&#xff09;长短序列和PPDU整体数据处理流程 OFDM学习前言一、短序列短序列的作用 二、长序列三、PLCP/SIGNAL/DATA数据处理流程三、fpga实现STS模块LTS模块训练序列模块仿真波形 总结 前言 根据框图可以知道发射机这部分信号在DA转换之前&#xff0c…...

.NET周刊【12月第4期 2024-12-22】

国内文章 dotnet 简单使用 ICU 库进行分词和分行 https://www.cnblogs.com/lindexi/p/18622917 本文将和大家介绍如何使用 ICU 库进行文本的分词和分行。 dotnet 简单聊聊 Skia 里的 SKFontMetrics 的各项属性作用 https://www.cnblogs.com/lindexi/p/18621674 本文将和大…...

Conda 安装 Jupyter Notebook

文章目录 1. 安装 Conda下载与安装步骤&#xff1a; 2. 创建虚拟环境3. 安装 Jupyter Notebook4. 启动 Jupyter Notebook5. 安装扩展功能&#xff08;可选&#xff09;6. 更新与维护7. 总结 Jupyter Notebook 是一款非常流行的交互式开发工具&#xff0c;尤其适合数据科学、机器…...

鸿蒙开发:实现键值数据库存储

前言 鸿蒙当中数据持久化存储&#xff0c;为我们提供了多种的实现方式&#xff0c;比如用户首选项方式&#xff0c;关系型数据库方式&#xff0c;键值型数据库方式&#xff0c;文件存储方式等等&#xff0c;对于数据量比较的小的&#xff0c;我们直接选择轻量级的用户首选项方式…...

WebGL 实践(一)开发环境搭建

WebGL 是一种基于 JavaScript 的 API&#xff0c;用于在浏览器中渲染 2D和3D 图形&#xff0c;很多场景都能用&#xff0c;例如游戏开发、数据可视化、在线教育和虚拟现实等应用领域。 零、基础知识 相关基础知识很重要&#xff0c;如果会html、JavaScript等技术掌握起来会更…...

在线机考|2024华为实习秋招春招编程题(最新)——第3题_PCB印刷电路板布线_300分(八)

题目内容 在PCB印刷电路板设计中,器件之间的连线需要避免线路的阻抗值增大、而且赛件之间还有别的器件和别的干扰源,在布线时我们希望受到的干扰尽量小。现将电路板简化成一个MN的矩阵,每个位置(单元格)的值表示其源干扰度。 如果单元格的值为0,表示此位置没有干扰源;如果单…...

Spring源码分析之事件机制——观察者模式(三)

目录 自定义事件 事件监听器 事件发布者&#xff08;服务层&#xff09; 使用示例controller层 Spring源码分析之事件机制——观察者模式&#xff08;一&#xff09;-CSDN博客 Spring源码分析之事件机制——观察者模式&#xff08;二&#xff09;-CSDN博客 这两篇文章是这…...

C#实现画图,及实现图像运动,C#中GDI+图形图像技术(Graphics类、Pen类、Brush类)C#之快速入门GDI+绘图 C#实现快速画图功能

下载源码 <-------- 在C#的世界里&#xff0c;GDI如同一位多才多艺的艺术家&#xff0c;以其强大的绘图能力&#xff0c;让开发者能够轻松地在应用程序中挥洒创意&#xff0c;绘制出丰富多彩的图形世界。GDI不仅支持基本的几何图形绘制&#xff0c;还能处理复杂的图像处理任…...

【51单片机零基础-chapter6:LCD1602调试工具】

实验0-用显示屏LCD验证自己的猜想 如同c的cout,前端的console.log() #include <REGX52.H> #include <INTRINS.H> #include "LCD1602.h" int var0; void main() {LCD_Init();LCD_ShowNum(1,1,var211,5);while(1){;} }实验1-编写LCD1602液晶显示屏驱动函…...

算法题(24):只出现一次的数字(二)

审题&#xff1a; 数组中除了答案元素只出现一次外&#xff0c;其他元素都会出现三次&#xff0c;我们需要找到并返回答案元素 思路&#xff1a; 由于现在会出现三次&#xff0c;所以利用异或运算符的方法就会失效。而所有数据都在32位二进制范围内&#xff0c;所以我们采用依次…...

趣味编程:心形曲线

目录 1.序言 2.代码展示 3.代码详解 3.1 头文件包含 3.2 绘制坐标轴函数 3.3 main 函数主体部分 4. 小结 1.序言 2025年的第一篇博客就用这个笛卡尔心形图开篇吧&#xff0c;寓意着新年大家能够有心有所属&#xff0c;祝诸位程序猿 / 程序媛 能够早点遇到自己的另一半。…...

C# 设计模式(结构型模式):享元模式

C# 设计模式&#xff08;结构型模式&#xff09;&#xff1a;享元模式 (Flyweight Pattern) 在软件开发中&#xff0c;尤其是在处理大量对象时&#xff0c;我们常常会面临内存和性能上的挑战。当多个对象具有相似的状态时&#xff0c;通常会占用大量的内存资源&#xff0c;从而…...

计算机毕业设计Django+Tensorflow音乐推荐系统 音乐可视化 卷积神经网络CNN LSTM音乐情感分析 机器学习 深度学习 Flask

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

mysql 死锁案例及简略分析

准备数据 # 创一个测试表&#xff0c;存储引擎使用 innodb create table test_lock (id int primary key auto_increment,name varchar(20),age int )engine innodb;insert into test_lock (name,age) values (ionc001,10); insert into test_lock (name,age) values (ionc00…...

第四届计算机、人工智能与控制工程

第四届计算机、人工智能与控制工程 The 4th International Conference on Computer, Artificial Intelligence and Control Engineering 重要信息 大会官网&#xff1a;www.ic-caice.net 大会时间&#xff1a;2025年1月10-12日 大会地点&#xff1a;中国合肥 (安徽大学磬苑…...

RIP配置实验

RIP配置实验 案例简介 天一公司下属三个分公司&#xff0c;属于不同的地区&#xff0c;三个公司之间用路由器连接&#xff0c;路由器名称分别为分别为 Router0、Router1、Router2&#xff0c;请把一公司的部门pc0,通过二公司路由器&#xff0c;连接三公司的部门pc1,公司之间通…...

C# 整型、浮点型 数值范围原理分析

总目录 前言 一、整型、浮点型 数值范围列表 二、什么是大小、范围 在上面的列表中&#xff0c;每个数据类型都有自己的Range (范围) 和 Size (大小)。 1. 范围 范围好理解&#xff0c;就是对应数据类型的数据范围&#xff0c;如 sbtyte 的数据范围是 -128~127&#xff0c;超…...

Adobe Acrobat Pro DC 2023 下载安装教程,附详细图文

简介&#xff1a; Adobe Acrobat Pro DC 2023 是由 Adobe 公司推出的一款全面的 PDF 编辑、查看和管理软件。这款软件无论是个人用户还是企业级用户&#xff0c;都可以凭借其强大的功能满足不同的需求。作为一款业内领先的 PDF 处理工具&#xff0c;Adobe Acrobat Pro DC 不仅…...

stable diffusion秋叶启动器安装roop插件

方法简洁明了&#xff1a; 第一步&#xff1a;下载秋叶启动器 第二步&#xff1a;输入网址&#xff1a;https://visualstudio.microsoft.com/zh-hans/downloads/&#xff0c;下载vs安装程序&#xff0c;安装开始会自动弹出如下窗口&#xff0c;选择2个环境&#xff1a;Python开…...

7-14 统计工龄

给定公司多名员工的工龄&#xff0c;按输入工龄顺序输出每个工龄段有多少员工。 输入格式: 给出多个整数&#xff0c;即每个员工的工龄&#xff0c;范围在[0, 50]。 输出格式: 按输入工龄顺序输出每个工龄的员工个数&#xff0c;格式为&#xff1a;“工龄:人数”。 每项占一…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论

路径问题的革命性重构&#xff1a;基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中&#xff08;图1&#xff09;&#xff1a; mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...

解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用

在工业制造领域&#xff0c;无损检测&#xff08;NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统&#xff0c;以非接触式光学麦克风技术为核心&#xff0c;打破传统检测瓶颈&#xff0c;为半导体、航空航天、汽车制造等行业提供了高灵敏…...

Ubuntu Cursor升级成v1.0

0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开&#xff0c;快捷键也不好用&#xff0c;当看到 Cursor 升级后&#xff0c;还是蛮高兴的 1. 下载 Cursor 下载地址&#xff1a;https://www.cursor.com/cn/downloads 点击下载 Linux (x64) &#xff0c;…...

Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么&#xff1f;它的作用是什么&#xff1f; Spring框架的核心容器是IoC&#xff08;控制反转&#xff09;容器。它的主要作用是管理对…...