基于Matlab的CDMA通信完整系统分析及仿真 下载本文

内容发布更新时间 : 2024/12/23 19:20:41星期一 下面是文章的全部内容请认真阅读。

补偿信道后的星座图

可以看出,经过信道补偿后星座点的位置得到进一步集中。

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