1.算法描述
整個(gè)模型的基本框圖為


軟件無線電是現(xiàn)代通信技術(shù)的重要研究領(lǐng)域和發(fā)展方向,目前發(fā)展迅速.快速發(fā)展的軟件無線電技術(shù)與落后的硬件計(jì)算資源之間的矛盾越來越突出.為了緩解這個(gè)矛盾,一方面可以加快集成電路的研發(fā)進(jìn)度,提升硬件的計(jì)算性能;另一方面可以對(duì)信號(hào)處理的算法進(jìn)行深入的改進(jìn)研究,降低算法的運(yùn)算量,在現(xiàn)有的硬件水平下提出符合實(shí)際的解決方案.在信號(hào)處理的各種算法中,調(diào)制解調(diào)算法的地位十分重要.尤其是其中的解調(diào)算法,其復(fù)雜度已被作為衡量整個(gè)信號(hào)處理系統(tǒng)工作性能的有效指標(biāo). 本文的研究對(duì)象是恒定包絡(luò)連續(xù)相位調(diào)制技術(shù)中的最小頻移鍵控(MSK).這種調(diào)制方式具有恒定包絡(luò),相位連續(xù),功率譜密度較集中,頻帶利用率高等特點(diǎn).MSK信號(hào)的諸多優(yōu)點(diǎn)使得它在信號(hào)理論研究和應(yīng)用中具有重要意義.
MSK信號(hào)是一種相位連續(xù)、包絡(luò)恒定并且占用帶寬最小的二進(jìn)制正交FSK信號(hào)。它的第k個(gè)碼元可以表示為:

MSK信號(hào)具有特點(diǎn)如下:①M(fèi)SK信號(hào)是正交信號(hào);②其波形在碼元間是連續(xù)的;③其包絡(luò)是恒定不變的;④其附加相位在一個(gè)碼元持續(xù)時(shí)間內(nèi)線性地變化2/p±;⑤調(diào)制產(chǎn)生的頻率偏移等于T4/1±Hz;⑥在一個(gè)碼元持續(xù)時(shí)間內(nèi)含有的載波周期數(shù)等于1/4的整數(shù)倍。這里,我們考慮到硬件平臺(tái)的高度可移植性,我們采用了無核化設(shè)計(jì),就是全部使用verilog進(jìn)行設(shè)計(jì),下面首先說明一下系統(tǒng)的各個(gè)管腳。

時(shí)鐘,接板子的晶振。
系統(tǒng)復(fù)位,高電平復(fù)位清0,你接板子上任意一個(gè)開關(guān)即可。
數(shù)據(jù)發(fā)送端數(shù)據(jù),有符號(hào),你接起高位即可,示波器看
MSK符號(hào),多維有符號(hào)數(shù),需要使用chipscope在線看
MSK符號(hào),多維有符號(hào)數(shù),需要使用chipscope在線看
MSK調(diào)制,多維有符號(hào)數(shù),需要使用chipscope在線看
MSK調(diào)制,多維有符號(hào)數(shù),需要使用chipscope在線看
調(diào)制端最后輸出的中頻信號(hào)
接收端解調(diào)信號(hào)
接收端解調(diào)信號(hào)
低通濾波信號(hào)
低通濾波信號(hào)
MSK差分解調(diào)信號(hào)
最后的數(shù)據(jù)
誤碼數(shù)
總比特?cái)?shù)(兩個(gè)相除就是誤碼率)
2.仿真效果預(yù)覽
matlab2022a仿真結(jié)果如下:





3.Verilog核心程序
`timescale 1ns / 1ps
module tops(
i_clk,
i_rst,
//Trans
o_Trans_data_samples,
o_Msk_I_samples,
o_Msk_Q_samples,
o_msk_cos,
o_msk_sin,
o_msk_R,
o_msk_Rn,
//Rec
o_msk_cos_rec,
o_msk_sin_rec,
o_msk_filter_recI,
o_msk_filter_recQ,
o_data,
o_bit,
o_error_num,
o_total_num
);
input ?????????????i_clk;
input ?????????????i_rst;
//Trans
output signed[1:0] o_Trans_data_samples;
output signed[9:0] o_Msk_I_samples;
output signed[9:0] o_Msk_Q_samples; ??
output signed[15:0]o_msk_cos;
output signed[15:0]o_msk_sin; ??
output signed[15:0]o_msk_R;
output signed[15:0]o_msk_Rn;
//Rec
output signed[15:0]o_msk_cos_rec;
output signed[15:0]o_msk_sin_rec;
output signed[15:0]o_msk_filter_recI;
output signed[15:0]o_msk_filter_recQ;
output signed[31:0]o_data;
output signed[1:0] o_bit;
output signed[31:0]o_error_num;
output signed[31:0]o_total_num;
//Trans
//output ?o_clk_4M; //100M ~ 4M ?, 25 ??times
//output ?o_clk_1600K; //100M ~ 0.8M, 125 ?times
//output ?o_clk_200K; ???//100M ~ 0.1M, 1000 ?times
wire clk200;
wire clk_4M;
Msk_mod Msk_mod_u(
.i_clk ??????????????(i_clk),
.i_rst ??????????????(~i_rst),
.o_clk_4M ???????????(clk_4M),
.o_clk_1600K ????????(),
.o_clk_200K ?????????(clk200),
.o_Trans_data ???????(),
.o_Trans_data_samples(o_Trans_data_samples),
.o_Msk_I ????????????(),
.o_Msk_Q ????????????(),
.o_Msk_I_samples ????(o_Msk_I_samples),
.o_Msk_Q_samples ????(o_Msk_Q_samples),
.o_cos ??????????????(),
.o_sin ??????????????(),
.o_msk_cos ??????????(o_msk_cos),
.o_msk_sin ??????????(o_msk_sin),
.o_msk_R ????????????(o_msk_R)
);
awgns awgns_u(
.i_clk(clk_4M),
.i_rst(~i_rst),
.i_power(16'd100),
.i_din(o_msk_R),
.o_dout(o_msk_Rn)
);
//Rec
Msk_demod Msk_demod_u(
.i_clk ???????????(i_clk),
.i_rst ???????????(~i_rst),
.i_msk_R ?????????(o_msk_Rn),
.o_msk_cos_rec ???(o_msk_cos_rec),
.o_msk_sin_rec ???(o_msk_sin_rec),
.o_msk_filter_recI(o_msk_filter_recI),
.o_msk_filter_recQ(o_msk_filter_recQ),
.o_data ??????????(o_data),
.o_bit ???????????(o_bit)
);
//error calculate
Error_Chech Error_Chech_u(
.i_clk(clk200),
.i_rst(~i_rst),
.i_trans(o_Trans_data_samples),
.i_rec(o_bit),
.o_error_num(o_error_num),
.o_total_num(o_total_num)
);
endmodule
01_117m