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) begin
        if(~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;
        end
        else if( STS_Req && (STS_Index<161) ) begin
            STS_Index <= STS_Index + 1;
            STS_Vld <=  1'b1; 
            if(i<10)    begin
                if(j==15) begin 
                    j <= 0;
                    i <= i+ 1; 
                    STS_Re <= Short_Mem[j][15:8];  
                    STS_Im <= Short_Mem[j][7:0];
                end
                else  begin
                    if(i==0 && j==0) begin
                        STS_Re <= Short_Mem[j][15:8]>>1; //鍔犵獥锛屽乏绉讳竴 
                        STS_Im <= Short_Mem[j][7:0]>>1;//娉ㄦ剰锛歋hort_Mem銆�0銆戜负姝f暟
                    end
                    else begin
                        STS_Re <= Short_Mem[j][15:8];  
                        STS_Im <= Short_Mem[j][7:0];
                    end
                    j <= j + 1;
                end
            end
            else begin  //鏈�鍚庝竴浣�
                STS_Re <= Short_Mem[0][15:8]>>1; //鍔犵獥锛屽乏绉讳竴  绗竴涓��
                STS_Im <= Short_Mem[0][7:0]>>1; 
                STS_Done <= 1'b1;
            end
        end 
        else begin 
            STS_Vld <= 1'b0;
        end
    end


                   
endmodule          

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) begin
        if(~rst_n) begin  //鏃跺煙鏍峰�� Re      Im
            Long_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;
        end
        else if( LTS_Req && (LTS_Index<161) ) begin
            LTS_Index <= LTS_Index + 1;
            LTS_Vld <=  1'b1; 
            if(i==0)    begin
                if(j==31) begin 
                    j <= 0;
                    i <= i+ 1; 
                    LTS_Re <= Long_Mem[j+32][15:8];  
                    LTS_Im <= Long_Mem[j+32][7:0];
                end
                else  begin
                    if(i==0 && j==0) begin
                        LTS_Re <= 8'b11101100; //鐭缁冨簭鍒楀埌闀胯缁冨簭鍒楃殑绐楀彛鍑芥暟
                        LTS_Im <= Long_Mem[j+32][7:0];
                    end
                    else begin
                        LTS_Re <= Long_Mem[j+32][15:8];  
                        LTS_Im <= Long_Mem[j+32][7:0];
                    end
                    j <= j + 1;
                end
            end
            else if( i==1 || i==2 )    begin
                if(j==63) begin 
                    j <= 0;
                    i <= i+ 1; 
                    LTS_Re <= Long_Mem[j][15:8];  
                    LTS_Im <= Long_Mem[j][7:0];
                end
                else  begin 
                    LTS_Re <= Long_Mem[j][15:8];  
                    LTS_Im <= Long_Mem[j][7:0]; 
                    j <= j + 1;
                end
            end
            else begin  //  鍔犵獥澶勭悊
                LTS_Re <= Long_Mem[0][15:8]>>1; //鍔犵獥锛屽乏绉讳竴浣�  
                LTS_Im <= Long_Mem[0][7:0]>>1; 
                LTS_Done <= 1'b1;
            end
        end 
        else begin 
            LTS_Vld <= 1'b0;
        end
    end


                   
endmodule          

 


训练序列模块

`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基带发射机的设计与实现

训练模块代码未做修改。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解决 `pnpm install` 出现 `ERR_PNPM_ENOENT` 错误的方法

解决 pnpm install 出现 ERR_PNPM_ENOENT 错误的方法 在使用 pnpm 进行项目开发时&#xff0c;我们可能会遇到 ERR_PNPM_ENOENT 这样的错误&#xff0c;本文将详细介绍该错误的解决方法。 错误描述 当我们运行 pnpm install 命令时&#xff0c;可能会遇到如下错误信息&#…

Flutter中的网络请求图片存储为缓存,与定制删除本地缓存

Flutter中的网络请求图片存储为缓存&#xff0c;与定制删除本地缓存 1&#xff1a;封装请求图片函数 2&#xff1a;访问的图片都会转为本地缓存&#xff0c;当相同的请求url&#xff0c;会在本地调用图片 3&#xff1a;本地缓存管理【windows与andriod已经测试】【有页面】【有…

数据库新建用户后(Host:%),报错:localhost无法连接

存在问题 在给数据库&#xff08;MySQL、MariaDB等&#xff09;创建了新的用户名&#xff08;eg&#xff1a;maxscale&#xff09;后&#xff0c;无法使用新用户名登录&#xff0c;并报如下错误&#xff1a;ERROR 1045 (28000): Access denied for user maxscalelocalhost (us…

1-markdown转网页样式页面 --[制作网页模板] 【测试代码下载】

markdown转网页 将Markdown转换为带有样式的网页页面通常涉及以下几个步骤&#xff1a;首先&#xff0c;需要使用Markdown解析器将Markdown文本转换为HTML&#xff1b;其次&#xff0c;应用CSS样式来美化HTML内容。此外&#xff0c;还可以加入JavaScript以增加交互性。下面我将…

通过 4 种方式快速将音乐从 iPod 传输到 Android

概括 在 iPod 上听音乐很酷&#xff0c;但是当您拥有最新的 Android 手机时&#xff0c;也许您想在新手机上欣赏 iPod 音乐。那么&#xff0c;你的计划是什么&#xff1f;如何将音乐从 iPod 传输到 Android&#xff1f; 如果您担心这个问题&#xff0c;请看看下面的方法。他们…

grouped.get_group((‘B‘, ‘A‘))选择分组

1. df.groupby([team, df.name.str[0]]) df.groupby([team, df.name.str[0]]) 这一部分代码表示对 DataFrame df 按照 两个条件 进行分组&#xff1a; 按照 team 列&#xff08;即团队&#xff09;。按照 name 列的 首字母&#xff08;df.name.str[0]&#xff09;。 df.name.s…

力扣28找出字符串中第一个匹配项的下标

class Solution:def strStr(self, haystack: str, needle: str) -> int:# 特殊情况处理if not needle:return 0# 获取 haystack 和 needle 的长度a len(needle)b len(haystack)# 遍历 haystack&#xff0c;检查每个子字符串是否与 needle 匹配for i in range(b - a 1):if…

icp备案网站个人备案与企业备案的区别

个人备案和企业备案是在进行ICP备案时需要考虑的两种不同情况。个人备案是指个人拥有的网站进行备案&#xff0c;而企业备案则是指企业或组织名下的网站进行备案。这两者在备案过程中有一些明显的区别。 首先&#xff0c;个人备案相对来说流程较为简单。个人备案只需要提供个人…

ElasticSearch备考 -- 整体脉络梳理

1、 search 、Update、reindex ElasticSearch 备考 -- 查询&高亮&排序 ElasticSearch 备考 -- 聚合查询 ElasticSearch 备考 -- 异步检索 2、search temple ElasticSearch备考 -- Search template 3、custom analyzer ElasticSearch 备考 -- 自定义分词 2、…

用css实现瀑布流布局

上效果 知识理解 column-count: 4; column-gap: 15px;实现固定四行瀑布流布局 columns: 200px auto;column-gap: 15px;由浏览器根据容器的宽度自动调整&#xff0c;尽可能一行多个200px宽度的列数 <!DOCTYPE html> <html lang"en"><head><me…

Springboot日志打印、SpringBoot集成Log4j2、异步日志

文章目录 一、Log4j2介绍1.1、常用日志框架1.2、为什么选用log4j2 二、Log4j2整合步骤2.1、引入jar包2.2、配置文件2.3、配置文件模版 三、异步日志3.1、引入disruptor3.2、修改启动类3.3、修改日志文件的内容3.4、再次进行测试 四、可能遇到的问题4.1、日志打印不生效&#xf…

浏览器选中文字样式

效果 学习 Chrome: 支持 ::selection。Firefox: 支持 :-moz-selection 和 ::selection。Safari: 支持 ::selection。Internet Explorer: 支持 :-ms-selection。Microsoft Edge: 支持 ::-ms-selection 和 ::selection。 代码 <!DOCTYPE html> <html lang"en&qu…

【UE5】UnrealEngine源码构建2:windows构建unreal engine 5.3.2

参考大神知乎的文章:UE5 小白也能看懂的源码编译指南 据说会耗费400G的空间。 代码本身并不大,可能是依赖特别多,毕竟看起来UE啥都能干,核心还是c++的, 【UE5】UnrealEngine源码构建1:tag为5.3.2源码clone 本着好奇+ 学习的态度,想着也许有机会能更为深入的熟悉UE的机制…

STM32 拓展 RTC(实时时钟)

RTC简介 RTC(Real Time Clock,实时时钟)。是一个掉电后仍然可以继续运行的独立定时器。 RTC模块拥有一个连续计数的计数器,在相应的软件配置下,可以提供时钟日历的功能。修改计数器的值可以重新设置当前时间和日期 RTC还包含用于管理低功耗模式的自动唤醒单元。 RTC实质…

uniapp 自定义类微信支付键盘 (微信小程序)

效果图 代码: <view class"popups popupsB"><view class"appreciatePrice"><view class"appreciatePriceTitle">赞赏金额</view><view class"appreciatePriceInput flex ac">&#xffe5;<input typ…

Nginx代理本地exe服务http为https

Nginx代理本地exe服务http为https 下载NginxNginx命令exe服务http代理为https 下载Nginx 点击下载Nginx 下载好之后是一个压缩包&#xff0c;解压放到没有中文的路径下就可以了 Nginx命令 调出cmd窗口cd到安装路径 输入&#xff1a;nginx -v 查看版本 nginx -h&#xff…

二、CSS基础

一、选择器(1) 大白话&#xff1a;我们人为认为的解析方式是&#xff0c;从左往右查找&#xff0c;对于浏览器来说&#xff0c;是从右往左查找&#xff0c;解析速度更高。 注&#xff1a; 伪类选择器 - 作用于实际存在的元素&#xff0c;用于描述元素的某种特定状态或关系&…

GoF23种设计模式 简介

文章目录 面向对象(OO)设计原则&#xff08;7&#xff09;单一职责原则开闭原则里氏代换原则依赖倒转原则接口隔离原则合成复用原则迪米特法则 创建型模式 &#xff08;5&#xff09;工厂方法模式 &#xff08;类模式&#xff0c;其余都是对象模式&#xff09;抽象工厂模式建造…

关于Zotero

1、文献数据库&#xff1a; Zotero的安装 Zotero安装使用_zotero只能安装在c盘吗-CSDN博客 2、如何使用zotero插件 我刚下载的时候就结合使用的是下面的这两个博主的分享&#xff0c;感觉暂时是足够的。 Zotero入&#x1f6aa;基础 - 小红书 Green Frog申请easyscholar密钥…

Linux实验报告15-添加系统调用

目录 一&#xff1a;实验目的 二&#xff1a;实验内容 &#xff08;1&#xff09;查看系统内核版本 &#xff08;2&#xff09;安装内核版本源码 &#xff08;3&#xff09;修改注册表 &#xff08;4&#xff09;添加系统调用头文件 &#xff08;5&#xff09;实现系统调…