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