繼續(xù)講解!本堂課開始給出直接序列擴(kuò)頻的程序?qū)嵗3绦螂m然簡單,但是能說明和驗(yàn)證部分理論。學(xué)習(xí)就是要從簡單入手,然后再逐步深入。之前給出的直接序列擴(kuò)頻程序就是純理論仿真程序。
不過講之前先聊聊5G。喊了好幾年了,真的快來到了。中國企業(yè)這次不會(huì)再是旁觀者了。2018年6月,隨著5G新空口(NR: New Radio)獨(dú)立組網(wǎng)功能的凍結(jié),5G已經(jīng)完成第一階段的全面標(biāo)準(zhǔn)化工作,進(jìn)入全面產(chǎn)業(yè)化階段,預(yù)計(jì)2020年實(shí)現(xiàn)全面商用。與前幾代移動(dòng)通信相比,5G的系統(tǒng)性能大幅提高,峰值速率可達(dá)10Gbps~20Gbps,用戶體驗(yàn)速率可達(dá)100Mbps~1Gbps,連接數(shù)密度每平方公里可達(dá)100萬,每平方米流量密度可達(dá)10Mbps,能夠支持500km/h運(yùn)動(dòng)情況下的通信。從業(yè)務(wù)能力來說,5G能夠滿足更為豐富的業(yè)務(wù)需求。過去幾代移動(dòng)通信主要實(shí)現(xiàn)“人與人”之間的通信;而在5G時(shí)代,還要實(shí)現(xiàn)“人與物”、“物與物”之間的高效通信,最終實(shí)現(xiàn)“萬物互聯(lián)”。國際電信聯(lián)盟(ITU)將增強(qiáng)的移動(dòng)寬帶(eMBB)、高可靠低延遲通信(uRLLC)以及大規(guī)模機(jī)器通信(mMTC)定義為5G的三大主要應(yīng)用場景。2018年,國家喊出了6G。對于這個(gè)消息,我有點(diǎn)暈!5G似乎還沒能穩(wěn)定運(yùn)行啊?技術(shù)可以先行。2022年了,5G有了,芯片被卡脖子了。
來看程序吧。
這可是老師當(dāng)年在企業(yè)時(shí)寫的研發(fā)代碼哦!
珍惜的看吧!
% 衛(wèi)星地球站多進(jìn)制位移m序列擴(kuò)頻系統(tǒng)算法仿真 %
%%********* 程序說明 **********%
%% File: IF_satelliteMaryds_sim1.m %%
%% date: 2008-03-31 author: 算法工匠%%
%%% 目的
%%% 本程序進(jìn)行衛(wèi)星地球站中多進(jìn)制位移m序列擴(kuò)頻系統(tǒng)算法仿真。
%%% 為測試程序的誤碼率性能,故沒有捕獲部分。
%%% 仿真環(huán)境
%%% 信號源設(shè)置:信號源僅含有同步碼。
%%% 采樣速率:碼片速率的4倍,奈奎斯特采樣, 設(shè)置有采樣偏差
%%% 中頻頻率:1倍碼片速率 載波偏差:200Hz
%%% 碼片速率: 2.4KHz 加噪采用awgn方式
%%% 無捕獲部分。
%%% 程序結(jié)構(gòu)
%%% 系統(tǒng)的同步碼采用32位的m序列作為對頻偏和同步的引導(dǎo),
% 幀頭采用碼長63位m序列的前32位比特,采用BPSK調(diào)制方式
%%% 數(shù)據(jù)傳送采用QPSK調(diào)制方式(以后可改進(jìn)為oqpsk方式),
% 數(shù)據(jù)傳送過程中有同步輔助。
%%% 偽碼跟蹤在I信道中完成。
%%% I信道使用位移的m序列(采用[5,2]反饋結(jié)構(gòu))進(jìn)行同步,
% BTR、幀頭和幀尾是包含在該路信號中。使用差分調(diào)制。
%%% Q路用16ary多進(jìn)制擴(kuò)頻。
% Q信使用位移的m序列(采用[5,4,2,1]反饋結(jié)構(gòu))進(jìn)行數(shù)據(jù)傳輸。
%%% I路的BTR碼采用全1的模式,利于用fft的捕獲方式。
%%% 切記:改抽樣因子的同時(shí),要改動(dòng)捕獲門限值。
%%% 改進(jìn)之處
clear all;
%%************ 程序主體 ************%%
format long;
start_time = clock;
%%%%%%%%%% %%%%%%%
%% 固定參數(shù)部分 %%
%%%%%%%%%%%%%%%%%%
%--升滾降平方根濾波器的參數(shù)設(shè)置---
ins_value = 8; % 內(nèi)插因子
br = 4; % 信息源比特率
sr = 1;
cr = 2.4e3*1 ; % 碼片速率
%---產(chǎn)生擴(kuò)頻序列----
stg = 5;
taps = [ 2, 5 ];
inidata = [ 1, 1, 1, 1, 1 ];
n = 1;
I_mseq = funct_mseq(stg, taps, inidata, n);
I_mseq_nrz = [2*I_mseq-1 -1]; % Unbipolar -> Bipolar
time_Iseq = ceil(1/ins_value.*(1:length(I_mseq_nrz)*ins_value));
I_mseq_nrz_ceil = I_mseq_nrz(time_Iseq);
I_mseq_fft = fft(I_mseq_nrz_ceil);
I_mseq_ceil_triple = [I_mseq_nrz_ceil I_mseq_nrz_ceil I_mseq_nrz_ceil];
stg = 5;
taps = [ 1, 2, 4, 5 ];
inidata = [ 1, 1, 1, 1, 1 ];
n = 1;
Q_mseq = funct_mseq(stg, taps, inidata, n);
Q_mseq_nrz = [2*Q_mseq-1 -1]; % Unbipolar -> Bipolar
Q_mseq_nrz_ceil = Q_mseq_nrz(time_Iseq);
Q_mseq_ceil_triple = [Q_mseq_nrz_ceil Q_mseq_nrz_ceil Q_mseq_nrz_ceil];
Q_mseq_doub = [2*Q_mseq-1 -1 2*Q_mseq-1 -1];
for i = 1:16
Q_mseqmarix(i,:) = Q_mseq_doub(2*(i-1)+1:2*(i-1)+32);
end
%---采樣頻偏參數(shù)---
offset=0.01;
ideal_samplefre = ins_value*cr;
samplefre = ideal_samplefre+offset;
%----載波和頻偏參數(shù)----
fcarrier = 1*cr;
foffset = 110;
ophase = pi/3;
%----DLL參數(shù)設(shè)置 ----
Bd = 0.001;
% 環(huán)路噪聲帶寬
damp = 0.707;
% 阻尼系數(shù)
td = 32/cr;
% 相關(guān)積分時(shí)間
Kd = 1;
% 環(huán)路增益
Wd = 2*Bd/(damp+1/(4*damp));
% 自然角頻率
Cd1 = 8*damp*Wd*td/(Kd*(4+4*damp*Wd*td+(Wd*td)^2));
% 環(huán)路濾波器的系數(shù)
Cd2 = 4*(Wd*td)^2/(Kd*(4+4*damp*Wd*td+(Wd*td)^2));
%%%%%%%%%%%
%% 發(fā)射機(jī)部分 %%
%%%%%%%%%%
%----- 信息組幀 -----
%---- I路成幀 ----
%---BTR碼--
% I_BTR = [ 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 ]; % 16位
I_BTR = ones(1,16);
%-幀頭 采用63碼長的m序列中前32比特--
I_framestart_uwcode = [ 1 -1 1 1 1 -1 1 -1 1 1 -1 1 -1 -1 1 1 -1 1 1 -1 -1 -1 1 -1 -1 1 -1 -1 -1 -1 1 1];
%---幀尾 采用3個(gè)barker碼級聯(lián)--
I_frameend_uwcode = [ -1 -1 -1 -1 -1 1 1 -1 -1 1 -1 1 -1 -1 -1 -1 -1 -1 1 1 -1 -1 1 -1 1 -1 -1 -1 -1 -1 -1 1];
%--- 幀信息內(nèi)容 ------
frame_msg = 2*randint(1,2000)-1;
%-串并轉(zhuǎn)化 分解為I路和Q路信息---
IQdata = reshape(frame_msg,5,length(frame_msg)/5);
IQdata(1,151:190) = ones(1,40); % 設(shè)置標(biāo)志以便調(diào)試程序
Iinformation = IQdata(1,:);
Qinformation = reshape([IQdata(2,:);IQdata(3,:);IQdata(4,:);IQdata(5,:)],1,4*length(frame_msg)/5);
%---- 成幀 --------
frame_msg_infI = [ I_BTR I_framestart_uwcode Iinformation I_frameend_uwcode ];
frame_msg_infQ = [zeros(1,length([I_BTR I_framestart_uwcode])) Qinformation zeros(1,length(I_frameend_uwcode))];
%---- 調(diào)制 ------
%--- I路信息的DBPSK調(diào)制 ---
len=2;
inf_phase(1)=0;
for i=1:length(frame_msg_infI)
if frame_msg_infI(i) == 1
inf_phase(len) = inf_phase(len-1);
elseif frame_msg_infI(i) == -1
inf_phase(len) = inf_phase(len-1) + pi;
end
len =len +1;
end
Tra_baseI = cos(inf_phase);
% 注意:這里會(huì)導(dǎo)致I路多出一個(gè)符號,因此信號源要多加32個(gè)0
%---I路信息的直擴(kuò)調(diào)制-----
for index = 1:length(Tra_baseI)
I_tx_dsseq ((index-1)*32+1:index*32) = Tra_baseI(index)*I_mseq_nrz;
end
%--Q路信息的多進(jìn)制擴(kuò)頻調(diào)制----
Mary_bits = 4;
for index = 1:length(Qinformation)/Mary_bits
if (Qinformation(Mary_bits*index-3)== -1 && Qinformation(Mary_bits*index-2)== -1 && Qinformation(Mary_bits*index-1)== -1 && Qinformation(Mary_bits*index)== -1)
Q_tx_dsseq((index-1)*32+1:index*32) = Q_mseqmarix(1,:);
Q_mseqsite(index) = 1; % 本語句的目的是為了可以進(jìn)行誤碼的追蹤。
elseif (Qinformation(Mary_bits*index-3)== 1 && Qinformation(Mary_bits*index-2)== -1 && Qinformation(Mary_bits*index-1)== -1 && Qinformation(Mary_bits*index)== -1)
Q_tx_dsseq ((index-1)*32+1:index*32) = Q_mseqmarix(2,:);
Q_mseqsite(index) = 32*ins_value - 2*(2-1)*ins_value + 1;
elseif (Qinformation(Mary_bits*index-3)== -1 && Qinformation(Mary_bits*index-2)== 1 && Qinformation(Mary_bits*index-1)== -1 && Qinformation(Mary_bits*index)== -1)
Q_tx_dsseq ((index-1)*32+1:index*32) = Q_mseqmarix(3,:);
Q_mseqsite(index) = 32*ins_value - 2*(3-1)*ins_value + 1;
elseif (Qinformation(Mary_bits*index-3)== 1 && Qinformation(Mary_bits*index-2)== 1 && Qinformation(Mary_bits*index-1)== -1 && Qinformation(Mary_bits*index)== -1)
Q_tx_dsseq ((index-1)*32+1:index*32) = Q_mseqmarix(4,:);
Q_mseqsite(index) = 32*ins_value - 2*(4-1)*ins_value + 1;
elseif (Qinformation(Mary_bits*index-3)== -1 && Qinformation(Mary_bits*index-2)== -1 && Qinformation(Mary_bits*index-1)== 1 && Qinformation(Mary_bits*index)== -1)
Q_tx_dsseq ((index-1)*32+1:index*32) = Q_mseqmarix(5,:);
Q_mseqsite(index) = 32*ins_value - 2*(5-1)*ins_value + 1;
elseif (Qinformation(Mary_bits*index-3)== 1 && Qinformation(Mary_bits*index-2)== -1 && Qinformation(Mary_bits*index-1)== 1 && Qinformation(Mary_bits*index)== -1)
Q_tx_dsseq ((index-1)*32+1:index*32) = Q_mseqmarix(6,:);
Q_mseqsite(index) = 32*ins_value - 2*(6-1)*ins_value + 1;
elseif (Qinformation(Mary_bits*index-3)== -1 && Qinformation(Mary_bits*index-2)== 1 && Qinformation(Mary_bits*index-1)== 1 && Qinformation(Mary_bits*index)== -1)
Q_tx_dsseq ((index-1)*32+1:index*32) = Q_mseqmarix(7,:);
Q_mseqsite(index) = 32*ins_value - 2*(7-1)*ins_value + 1;
elseif (Qinformation(Mary_bits*index-3)== 1 && Qinformation(Mary_bits*index-2)== 1 && Qinformation(Mary_bits*index-1)== 1 && Qinformation(Mary_bits*index)== -1)
Q_tx_dsseq ((index-1)*32+1:index*32) = Q_mseqmarix(8,:);
Q_mseqsite(index) = 32*ins_value - 2*(8-1)*ins_value + 1;
elseif (Qinformation(Mary_bits*index-3)== -1 && Qinformation(Mary_bits*index-2)== -1 && Qinformation(Mary_bits*index-1)== -1 && Qinformation(Mary_bits*index)== 1)
Q_tx_dsseq ((index-1)*32+1:index*32) = Q_mseqmarix(9,:);
Q_mseqsite(index) = 32*ins_value - 2*(9-1)*ins_value + 1;
elseif (Qinformation(Mary_bits*index-3)== 1 && Qinformation(Mary_bits*index-2)== -1 && Qinformation(Mary_bits*index-1)== -1 && Qinformation(Mary_bits*index)== 1)
Q_tx_dsseq ((index-1)*32+1:index*32) = Q_mseqmarix(10,:);
Q_mseqsite(index) = 32*ins_value - 2*(10-1)*ins_value + 1;
elseif (Qinformation(Mary_bits*index-3)== -1 && Qinformation(Mary_bits*index-2)== 1 && Qinformation(Mary_bits*index-1)== -1 && Qinformation(Mary_bits*index)== 1)
Q_tx_dsseq ((index-1)*32+1:index*32) = Q_mseqmarix(11,:);
Q_mseqsite(index) = 32*ins_value - 2*(11-1)*ins_value + 1;
elseif (Qinformation(Mary_bits*index-3)== 1 && Qinformation(Mary_bits*index-2)== 1 && Qinformation(Mary_bits*index-1)== -1 && Qinformation(Mary_bits*index)== 1)
Q_tx_dsseq ((index-1)*32+1:index*32) = Q_mseqmarix(12,:);
Q_mseqsite(index) = 32*ins_value - 2*(12-1)*ins_value + 1;
elseif (Qinformation(Mary_bits*index-3)== -1 && Qinformation(Mary_bits*index-2)== -1 && Qinformation(Mary_bits*index-1)== 1 && Qinformation(Mary_bits*index)== 1)
Q_tx_dsseq ((index-1)*32+1:index*32) = Q_mseqmarix(13,:);
Q_mseqsite(index) = 32*ins_value - 2*(13-1)*ins_value + 1;
elseif (Qinformation(Mary_bits*index-3)== 1 && Qinformation(Mary_bits*index-2)== -1 && Qinformation(Mary_bits*index-1)== 1 && Qinformation(Mary_bits*index)== 1)
Q_tx_dsseq ((index-1)*32+1:index*32) = Q_mseqmarix(14,:);
Q_mseqsite(index) = 32*ins_value - 2*(14-1)*ins_value + 1;
elseif (Qinformation(Mary_bits*index-3)== -1 && Qinformation(Mary_bits*index-2)== 1 && Qinformation(Mary_bits*index-1)== 1 && Qinformation(Mary_bits*index)== 1)
Q_tx_dsseq ((index-1)*32+1:index*32) = Q_mseqmarix(15,:);
Q_mseqsite(index) = 32*ins_value - 2*(15-1)*ins_value + 1;
elseif (Qinformation(Mary_bits*index-3)== 1 && Qinformation(Mary_bits*index-2)== 1 && Qinformation(Mary_bits*index-1)== 1 && Qinformation(Mary_bits*index)== 1)
Q_tx_dsseq ((index-1)*32+1:index*32) = Q_mseqmarix(16,:);
Q_mseqsite(index) = 32*ins_value - 2*(16-1)*ins_value + 1;
elseif (Qinformation(Mary_bits*index-3)== 0 && Qinformation(Mary_bits*index-2)== 0 && Qinformation(Mary_bits*index-1)== 0 && Qinformation(Mary_bits*index)== 0)
Q_tx_dsseq ((index-1)*32+1:index*32) = zeros(1,32);
Q_mseqsite(index) = 0;
end
end
%--- 擴(kuò)頻調(diào)制信息成幀 -----
% Ibit_flow = [ zeros(1,100) I_tx_dsseq zeros(1,100) ]; %
% Qbit_flow = [ zeros(1,100) Q_tx_dsseq zeros(1,100) ];
% 信息添加起始內(nèi)容表征突發(fā)模式
Ibit_flow = [ I_tx_dsseq zeros(1,100) ]; %
Qbit_flow = [ zeros(1,(length([I_BTR I_framestart_uwcode])+1)*32) Q_tx_dsseq zeros(1,length(I_frameend_uwcode)*32) zeros(1,100) ]; %
%%% 幀尾加0是為方便本程序比較誤碼率所設(shè),實(shí)際系統(tǒng)中沒有該部分內(nèi)容
%-- 內(nèi)插ins_value倍并加入采樣頻偏 -
ins_seq = ceil(cr/samplefre.*(1:length(Ibit_flow)*ins_value));
Isignalsample = Ibit_flow(ins_seq);
Qsignalsample = Qbit_flow(ins_seq);
%---生成有載波調(diào)制的數(shù)據(jù)---
time = (0:length(Isignalsample)-1)/samplefre;
tra_IFsignal = Isignalsample.*cos(2*pi*(fcarrier+foffset).*time+ophase) + Qsignalsample.*sin(2*pi*(fcarrier+foffset).*time+ophase);
什么是多進(jìn)制擴(kuò)頻?這些可是當(dāng)年本人在企業(yè)研發(fā)的干貨啊,就先給出調(diào)制部分的內(nèi)容吧,讓同學(xué)們近距離的接觸“實(shí)戰(zhàn)”程序。如果想深入學(xué)習(xí),那就請考研吧。畢竟只有到了研究生階段才會(huì)深入學(xué)習(xí)擴(kuò)頻知識,本科階段的學(xué)習(xí)以掌握基本原理為主。未完,待續(xù)!
20181118記錄:
【流量主】公眾號文中流量主違規(guī)示例及操作建議周知
為保障你持續(xù)獲取文中廣告位展示收益,避免出現(xiàn)如違規(guī)遮蓋、誘導(dǎo)點(diǎn)擊等違規(guī)行為,請認(rèn)真閱讀公眾號文中流量主違規(guī)示例及操作建議。
如有疑問:可通過公眾號“微信廣告助手”聯(lián)系我們。
微信廣告團(tuán)隊(duì)
2018年11月16日
收到了微信發(fā)來的郵件,值得好好讀一下。
不能違規(guī),要嚴(yán)格遵守。
畢竟公眾號是在微信的幫助下不斷的成長!
如果公眾號已經(jīng)是流量主了,請注意不要違規(guī),不然會(huì)被封號。
修訂記錄
20181123 完成初稿;
20221213修訂內(nèi)容v2;
原文標(biāo)題:計(jì)算機(jī)通信與網(wǎng)絡(luò)v2 實(shí)驗(yàn)課程(22)
文章出處:【微信公眾號:通信工程師專輯】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
-
通信網(wǎng)絡(luò)
+關(guān)注
關(guān)注
22文章
2076瀏覽量
52958
原文標(biāo)題:計(jì)算機(jī)通信與網(wǎng)絡(luò)v2 實(shí)驗(yàn)課程(22)
文章出處:【微信號:gh_30373fc74387,微信公眾號:通信工程師專輯】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
計(jì)算機(jī)網(wǎng)絡(luò)入門指南

微軟OmniParser V2:大模型轉(zhuǎn)化為計(jì)算機(jī)智能體
微軟OmniParser V2發(fā)布:大模型轉(zhuǎn)化為計(jì)算機(jī)智能體
BU-67121W實(shí)驗(yàn)室航空電子接口計(jì)算機(jī)North Hills
云端超級計(jì)算機(jī)使用教程
刀片計(jì)算機(jī)設(shè)計(jì)方案:192-6U VPX i7 刀片計(jì)算機(jī)

工業(yè)中使用哪種計(jì)算機(jī)?

量子計(jì)算機(jī)與普通計(jì)算機(jī)工作原理的區(qū)別

評論