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

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

for indx=1:length(EbNo) indx

%************************** 发射端 ********************************灭嗳骇諗鋅猎輛觏馊藹。 data = randsrc(user,nSymbol,[0 :3]) ; % 产生各个用户的发射数据铹鸝饷飾镡閌赀诨癱骝。 data1=graycode(data+1); % Gray编码攙閿频嵘陣澇諗谴隴泸。 data1 = qammod(data1,M); % 4-QAM 调制

趕輾雏纨颗锊讨跃满賺。 [out] = spread(data1,code); % 扩频夹覡闾辁駁档驀迁锬減。

out1=rcosflt(out.',sr,Fs*sr,'filter',rrcfilter);

% 通过脉冲成形滤波器

spow = sum(abs((out1)).^2) / nSymbol; % 计算每个用户信号功率

视絀镘鸸鲚鐘脑钧欖粝。 if user > 1 % 用户数大于1时,所有用户数据相加

偽澀锟攢鴛擋緬铹鈞錠。 out1=sum(out1.'); else

out1=out1.'; end

sigma = sqrt(0.5 * spow * sr / br * 10^(-EbNo(indx)/10)); 緦徑铫膾龋轿级镗挢廟。 % 根据信噪比计算高斯白噪声方差 y=[];

for ii=1:user

y(ii,:)=out1+sigma(ii).*(randn(1,length(out1))+j*randn(1,length(out1))); % 加入高斯白噪声(AWGN)騅憑钶銘侥张礫阵轸蔼。 end

y=rcosflt(y.',sr,Fs*sr,'Fs/filter',rrcfilter);

% 通过脉冲成形滤波器进行滤波

y=downsample(y,Fs); % 降采样

疠骐錾农剎貯狱颢幗騮。 for ii=1:user

y1(:,ii)=y(2*delay+1:end-2*delay,ii); end

yd = despread(y1.',code); % 数据解扩镞锊过润启婭澗骆讕瀘。 demodata = qamdemod(yd,M); % 4-QAM 解调

21

榿贰轲誊壟该槛鲻垲赛。 demodata=graycode(demodata+1); % Gray编码逆映射

邁茑赚陉宾呗擷鹪讼凑。

[err,ber(indx)]=biterr(data,demodata,log2(M)); % 统计误比特率嵝硖贪塒廩袞悯倉華糲。 end

主程序中spread函数的代码:

%扩频函数

function [out] = spread(data, code) switch nargin

case { 0 , 1 } %如果输入参数个数不对,提示错误该栎谖碼戆沖巋鳧薩锭。 error('缺少输入参数'); end

[hn,vn] = size(data); [hc,vc] = size(code);

if hn > hc %如果扩频码数小于输入的待扩频的数据序列,提示错误劇妆诨貰攖苹埘呂仑庙。 error('缺少扩频码序列'); end

out = zeros(hn,vn*vc); for ii=1:hn

out(ii,:) = reshape(code(ii,:).'*data(ii,:),1,vn*vc);臠龍讹驄桠业變墊罗蘄。 end

解扩函数despread的代码:

%信号解扩

function out = despread(data, code)

switch nargin %如果输入参数个数不对,提示错误鰻順褛悦漚縫冁屜鸭骞。 case { 0 , 1 }

error('缺少输入参数'); end

[hn,vn] = size(data);

[hc,vc] = size(code);

out = zeros(hc,vn/vc);

22

for ii=1:hc

xx=reshape(data(ii,:),vc,vn/vc); out(ii,:)= code(ii,:)*xx/vc; end

4、M序列DS-CDMA在AWGN下的性能,代码:

%m-序列DS-CDMA在AWGN信道下的性能仿真 clear all

user=[1 4 7 ]; seq=1;

for index=1:length(user)

ber(index,:)=dscdma(user(index),seq); end

EbNo=0:2:10;

semilogy(EbNo,ber(1,:),'-kx',EbNo,ber(2,:),'-ko',EbNo,ber(3,:),'-k*');穑釓虚绺滟鳗絲懷紓泺。 legend('user=1','user=4','user=7','user=9') title('m序列DS-CDMA在Rayleigh信道下的性能') xlabel('信噪比EbNo(dB)') ylabel('误比特率(BER)')

5、正交Gold序列在AWGN信道下的性能,代码:

%正交Gold序列DS-CDMA在AWGN信道下的性能仿真 clear all

user=[1 1 1]; seq=3;

for indx=1:length(user)

ber(indx,:)=dscdma(user(indx),seq); end

EbNo=0:2:10;

semilogy(EbNo,ber(1,:),'-kx',EbNo,ber(2,:),'-ko',EbNo,ber(3,:),'-k*');隶誆荧鉴獫纲鴣攣駘賽。 legend('user=1','user=4','user=7')

title('正交Gold序列DS-CDMA在Reyleigh信道下的性能') xlabel('信噪比EbNo(dB)')

23

ylabel('误比特率(BER)')

24