中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

【硬件測試】基于FPGA的BPSK+幀同步系統開發與硬件片內測試,包含高斯信道,誤碼統計,可設置SNR

1.硬件片內測試效果

本文是之前寫的文章

 

《基于FPGA的BPSK+幀同步系統verilog開發,包含testbench,高斯信道,誤碼統計,可設置SNR》

 

的硬件測試版本。

 

在系統在仿真版本基礎上增加了ila在線數據采集模塊,vio在線SNR設置模塊,數據源模塊。

 

硬件ila測試結果如下:(完整代碼運行后無水印):

 

vio設置SNR=15db

 

 

 

vio設置SNR=5db

 

 

 

硬件測試操作步驟可參考程序配套的操作視頻。

 

2.算法涉及理論知識概要

2.1 bpsk

      BPSK信號與2ASK信號的時域表達式在形式上是完全相同的,所不同的只是兩者基帶信號s(t)的構成,一個由雙極性NRZ碼組成,另一個由單極性NRZ碼組成。因此,求BPSK信號的功率譜密度時,也可采用與求2ASK信號功率譜密度相同的方法。

1)當雙極性基帶信號以相等的概率(p=1/2)出現時,BPSK信號的功率譜僅由連續譜組成。BPSK信號的功率譜由連續譜和離散譜兩部分組成。其中,連續譜取決于數字基帶信號s(t)經線性調制后的雙邊帶譜,而離散譜則由載波分量確定。

2)BPSK的連續譜部分與2ASK信號的連續譜基本相同(僅差一個常數因子)。因此,BPSK信號的帶寬、頻帶利用率也與2ASK信號的相同。

        在數字調制中,BPSK(后面將會看到2DPSK也同樣)的頻譜特性與2ASK十分相似。相位調制和頻率調制一樣,本質上是一種非線性調制,但在數字調相中,由于表征信息的相位變化只有有限的離散取值,因此,可以把相位變化歸結為幅度變化。這樣一來,數字調相同線性調制的數字調幅就聯系起來了,為此可以把數字調相信號當作線性調制信號來處理了。但是不能把上述概念推廣到所有調相信號中去。

       BPSK (Binary Phase Shift Keying)-------二進制相移鍵控。是把模擬信號轉換成數據值的轉換方式之一,利用偏離相位的復數波浪組合來表現信息鍵控移相方式。BPSK使用了基準的正弦波和相位反轉的波浪,使一方為0,另一方為1,從而可以同時傳送接受2值(1比特)的信息。

 

       由于最單純的鍵控移相方式雖抗噪音較強但傳送效率差,所以常常使用利用4個相位的QPSK和利用8個相位的BPSK。

 

        ?二進制相移鍵控(BPSK)信號進行相干解調的系統,其包括:用于從所述BPSK信號中恢復出頻率為2F的載波信號(C)的裝置;用于將頻率為2F的所述信號注入到注入鎖定振蕩器(ILO)中的裝置,該注入鎖定振蕩器的固有諧振頻率為f[r],該f[r]大致等于f,該注入鎖定振蕩器提供用于恢復具有(θ[e]-k)/2相移的原始載波的差分輸出(o[p]、o[n])信號,其中θ=arcsin[(f[r]-r)/αA[i]f],其中α和k是取決于所述注入鎖定振蕩器(ILO)中的主要非線性的類型的參數,而A[i]是所恢復的頻率為2f的載波信號的幅值,以及用于將所述差分輸出(o[p]、o[n])信號與所述輸入BPSK信號的副本進行組合,以產生解調信號(DEMOD)的裝置。

 

2.2 幀同步

        在數字通信中,信息通常是以幀為單位進行組織和傳輸的。幀同步的目的是確定每一幀的起始位置,以便接收端能夠正確地解調出每幀中的數據。

 

       設發送的幀結構為:幀同步碼 + 信息碼元序列 。幀同步碼是具有特定規律的碼序列,用于接收端識別幀的起始。

 

       幀同步的過程就是在接收序列中尋找與幀同步碼匹配的位置,一旦找到匹配位置,就確定了幀的起始位置,后續的碼元就可以按照幀結構進行正確的劃分和處理。

 

 

 

3.Verilog核心程序

 

wire [1:0]o_msg;
 
//產生模擬測試數據
signal signal_u(
.i_clk (i_clk),
.i_rst (~i_rst),
.o_bits(o_msg)
);
 
 
 
 
 
 
//設置SNR
wire signed[7:0]o_SNR;
vio_0 your_instance_name (
  .clk(i_clk),                // input wire clk
  .probe_out0(o_SNR)  // output wire [7 : 0] probe_out0
);
 
wire signed[15:0]o_fir;
wire signed[15:0]o_carrier;
wire signed[31:0]o_mod;
wire signed[15:0]o_modn;
wire signed[15:0]o_carrier_local;
wire signed[31:0]o_dw;
wire signed[31:0]o_demod ;
wire signed[31:0]o_error_num;
wire signed[31:0]o_total_num; 
wire  o_bits;
wire [1:0]o_bits_data;
wire [1:0]o_bits_head;
wire [7:0]o_peak;
wire  o_en_data;
wire  o_en_pn;
wire  o_frame_start; 
 
BPSK uut(
.i_clk(i_clk),
.i_rst(~i_rst),
.i_bits(o_msg),
.i_SNR(o_SNR),
.o_fir(o_fir),
.o_carrier(o_carrier),
.o_mod(o_mod),
.o_modn(o_modn),
.o_carrier_local(o_carrier_local),
.o_dw(o_dw),
.o_demod(o_demod),
.o_bits          (o_bits),
.o_bits_data     (o_bits_data),
.o_bits_head     (o_bits_head),
.o_peak          (o_peak),
.o_en_data       (o_en_data),
.o_en_pn         (o_en_pn),
.o_frame_start   (o_frame_start),
.o_error_num     (o_error_num),
.o_total_num     (o_total_num)
);
 
 
 
wire signed[15:0]o_mod2=o_mod[21:6];
wire signed[15:0]o_demod2=o_demod[23:8];
 
 
//ila篇內測試分析模塊
ila_0 ila_u (
	.clk(i_clk), // input wire clk
	.probe0({ 
	        o_msg,o_SNR,//10
            o_fir,o_mod2,o_modn,o_demod2,//80
	        o_bits_data,o_bits_head,o_peak,o_en_data,o_en_pn,//14
	        o_error_num[19:0],o_total_num[23:0]//44
 
	         })
	);	 
 
 
 
endmodule

  

 

 

 

 

 

posted @ 2025-06-14 23:27  我愛C編程  閱讀(22)  評論(0)    收藏  舉報