补偿信道后的星座图
可以看出,经过信道补偿后星座点的位置得到进一步集中。
16
设计的代码 1.M序列
function [mout] = mseq(n, taps, inidata, num)
% ****************************************************************釷鹆資贏車贖孙滅獅赘。 % n : m序列的阶数n
% taps : 反馈寄存器的连接位置 % inidata : 寄存器的初始值序列 % num : 输出的m序列的个数
% mout : 输出的m序列,如果num>1,则每一行为一个m序列 if nargin < 4 num = 1; end
mout = zeros(num,2^n-1); fpos = zeros(n,1);
fpos(taps) = 1;
for ii=1:2^n-1
mout(1,ii) = inidata(n); % 寄存器的输出值怂阐譜鯪迳導嘯畫長凉。 temp = mod(inidata*fpos,2); % 计算反馈数据 谚辞調担鈧谄动禪泻類。
inidata(2:n) = inidata(1:n-1); % 寄存器移位一次嘰觐詿缧铴嗫偽純铪锩。 inidata(1) = temp; % 更新第1个寄存器的值 熒绐譏钲鏌觶鷹緇機库。 end
if num > 1 %如果要输出多个m序列,生成其他m 鶼渍螻偉阅劍鲰腎邏蘞。 if shiftr > 0
outregi(:,1:shiftr) = inregi(:,v-shiftr+1:v); %循环移位纣忧蔣氳頑莶驅藥悯骛。 outregi(:,1+shiftr:v) = inregi(:,1:v-shiftr);
17
elseif shiftr < 0
outregi(:,1:v+shiftr) = inregi(:,1-shiftr:v); outregi(:,v+shiftr+1:v) = inregi(:,1:-shiftr); end **
2、Gold序列:
function [gout] = goldseq(m1, m2, num)
% ****************************************************************颖刍莖蛺饽亿顿裊赔泷。 % m1 : m序列1 % m2 : m序列2
% num : 生成的Gold序列个数 % gout : 生成的Gold序列输出
% ****************************************************************濫驂膽閉驟羥闈詔寢賻。
if nargin < 3 %如果没有指定生成的Gold序列个数,默认为1 num = 1; end
gout = zeros(num,length(m1));
for ii=1:num %根据Gold序列生成方法生成Gold序列 gout(ii,:) = xor(m1,m2); m2 = shift(m2,1); end
%********************** end of file ********************************
銚銻縵哜鳗鸿锓謎諏涼。
其shift函数代码同M序列
18
3、仿真部分主程序:
%直接序列扩频主程序代码
function [ber] = dscdma(user,seq)
% user: 同时进行扩频通信的用户数
% seq: 扩频码1:M-序列 2:Gold序列 3:正交Gold序列 % ber: 该用户数下的误码率
%************************** 初始化部分 *****************************挤貼綬电麥结鈺贖哓类。 sr = 25600.0; % 符号速率赔荊紳谘侖驟辽輩袜錈。 nSymbol=1000; %每种信噪比下发送的符号数
塤礙籟馐决穩賽釙冊庫。 M = 4; % 4-QAM调制裊樣祕廬廂颤谚鍘羋蔺。 br = sr * log2(M); % 比特速率仓嫗盤紲嘱珑詁鍬齊驁。 graycode=[0 1 3 2]; % Gray编码规则 绽萬璉轆娛閬蛏鬮绾瀧。 EbNo=0:2:10; % Eb/No 变化范围
骁顾燁鶚巯瀆蕪領鲡赙。
%********************** 脉冲成形滤波器参数 **************************
瑣钋濺暧惲锟缟馭篩凉。 delay = 10; % 升余弦滤波器时延
鎦诗涇艳损楼紲鯗餳類。 Fs = 8; % 滤波器过采样数栉缏歐锄棗鈕种鵑瑶锬。 rolloff = 0.5; % 升余弦滤波器滚降因子
辔烨棟剛殓攬瑤丽阄应。 rrcfilter = rcosine(1,Fs,'fir/sqrt',rolloff,delay); 峴扬斕滾澗辐滠兴渙藺。 %设计根升余弦滤波器
%********************** 扩频码产生参数 **********************詩叁撻訥烬忧毀厉鋨骜。
% user = user1; % 用户数
则鯤愜韋瘓賈晖园栋泷。 19
stage = 3; % m序列的阶数
胀鏝彈奥秘孫戶孪钇賻。 ptap1 = [1 3]; % m序列1的寄存器连接方式
鳃躋峽祷紉诵帮废掃減。 ptap2 = [2 3]; % m序列2的寄存器连接方式
稟虛嬪赈维哜妝扩踴粜。 regi1 = [1 1 1 ]; % m序列1的寄存器初始值陽簍埡鲑罷規呜旧岿錟。 regi2 = [1 1 1]; % m序列2的寄存器初始值
沩氣嘮戇苌鑿鑿槠谔應。
%******************** 扩频码的生成 *********************
switch seq
case 1 % M-序列钡嵐縣緱虜荣产涛團蔺。 code = mseq(stage,ptap1,regi1,user);
case 2 % Gold 序列懨俠劑鈍触乐鹇烬觶騮。 m1 = mseq(stage,ptap1,regi1); m2 = mseq(stage,ptap2,regi2); code = goldseq(m1,m2,user);
case 3 % 正交 Gold 序列謾饱兗争詣繚鮐癞别瀘。 m1 = mseq(stage,ptap1,regi1); m2 = mseq(stage,ptap2,regi2);
code = [goldseq(m1,m2,user),zeros(user,1)]; end
code = code * 2 - 1; clen = length(code);
%************************** 衰落信道参数 **************************呙铉們欤谦鸪饺竞荡赚。
ts = 1 / Fs / sr/ clen; % 信道采样时间间隔
莹谐龌蕲賞组靄绉嚴减。 t=(0:nSymbol*Fs*clen-1+2*delay*Fs)*ts; % 每种信噪比下的符号传输时间
麸肃鹏镟轿騍镣缚縟糶。 y = 160; % 多普勒频移 [Hz]納畴鳗吶鄖禎銣腻鰲锬。 %h=rayleigh(fd,t);
%**************************** 仿真开始 ****************************風撵鲔貓铁频钙蓟纠庙。
20