基于MATLAB的扩频通信仿真 下载本文

电气信息学院 通信工程专业 课程设计报告

[hc,vc] = size(code1); if hn > hc error('lack of spread code sequences'); end iout = zeros(hn,vn*vc); qout = zeros(hn,vn*vc); for ii=1:hn iout(ii,:) = reshape(rot90(code1(ii,:),3)*idata(ii,:),1,vn*vc); qout(ii,:) = reshape(rot90(code1(ii,:),3)*qdata(ii,:),1,vn*vc); end 3.3 信道仿真部分

实现高斯白噪声代码函数 function [iout, qout] = comb2(idata, qdata, attn) %各变量含义说明 % idata 输入序列实部 % qdata 输入序列虚部 % iout 输出序列实部 % qout 输出序列虚部 % attn 根据信噪比得到的信号衰减水平 v = length(idata); h = length(attn); iout = zeros(h,v); qout = zeros(h,v); for ii=1:h iout(ii,:) = idata + randn(1,v) * attn(ii); qout(ii,:) = qdata + randn(1,v) * attn(ii); end 11

电气信息学院 通信工程专业 课程设计报告

3.4 接收机部分

3.4.1 接收机的解扩部分函数 function [iout, qout] = despread(idata, qdata, code1) %各变量含义说明 % idata 输入序列实部 % qdata 输入序列虚部 % iout 输出序列实部 % qout 输出序列虚部 % code1 扩频码序列 switch nargin case { 0 , 1 } error('lack of input argument'); case 2 code1 = qdata; qdata = idata; end [hn,vn] = size(idata); [hc,vc] = size(code1); vn = fix(vn/vc); iout = zeros(hc,vn); qout = zeros(hc,vn); for ii=1:hc iout(ii,:) = rot90(flipud(rot90(reshape(idata(ii,:),vc,vn)))*rot90(code1(ii,:),3)); qout(ii,:) = rot90(flipud(rot90(reshape(qdata(ii,:),vc,vn)))*rot90(code1(ii,:),3)); end 3.4.2 接收机解调部分的函数 function [demodata]=qpskdemod(idata,qdata,para,nd,ml) %各变量含义说明 % idata 输入数据的实部 % qdata 输入数据的虚部 % demodata 解调后的数据 % para 并行的信道数 % nd 输入数据个数 % ml 调制阶数 demodata=zeros(para,ml*nd); demodata((1:para),(1:ml:ml*nd-1))=idata((1:para),(1:nd))>=0; 12

电气信息学院 通信工程专业 课程设计报告

demodata((1:para),(2:ml:ml*nd))=qdata((1:para),(1:nd))>=0;

13

电气信息学院 通信工程专业 课程设计报告

3.5 误码计算和绘图部分 %误码率分析 noe2 = sum(sum(abs(data-demodata))); nod2 = user * nd * ml; noe = noe + noe2; nod = nod + nod2; % fprintf('%d\\t%e\\n',ii,noe2/nod2); end %数据文件 ber = noe / nod; fprintf('%d\\t%d\\t%d\\t%e\\n',ebn0,noe,nod,noe/nod); fid = fopen('BER.dat','a'); fprintf(fid,'%d\\t%e\\t%f\\t%f\\t\\n',ebn0,noe/nod,noe,nod); fclose(fid); err_rate_final(ebn0+6)=ber; end %性能仿真图 figure semilogy(SNR,err_rate_final,'b-*'); xlabel('信噪比/dB') ylabel('误码率') axis([-5,10,0,1]) grid on 14

电气信息学院 通信工程专业 课程设计报告

3.6 初始化设置以及仿真循环设置 Main函数为 clear all; clc sr = 256000.0; % 符号速率 ml = 2; % 调制阶数 br = sr * ml; % 比特速率 nd = 100; % 符号数 SNR=-5:1:10; % Eb/No %**************************扩频码初值设定************** user = 1; % 用户数 stage = 3; % 序列阶数 ptap1 = [1 3]; % 第一个线性移位寄存器的系数 disp('--------------start-------------------'); %******************扩频码的产生****************** for ebn0=-5:1:10 % m序列 code = mseq(stage,ptap1,regi1,user); code = code * 2 - 1; clen = length(code); %******************仿真运算开始****************** nloop = 1000; % 仿真循环次数 noe = 0; nod = 0; for ii=1:nloop %******************发射机****************** data = rand(user,nd*ml) > 0.5; [ich, qch] = qpskmod(data,user,nd,ml); % QPSK 调制 [ich1,qch1] = spread(ich,qch,code); % 扩频 ich2 = ich1; qch2 = qch1; %******************接收机****************** [ich3,qch3] = comb2(ich2,qch2,attn); % 添加高斯白噪声(AWGN) sampl = irfn * IPOINT + 1; ich4 = ich3(:,sampl:IPOINT:IPOINT*nd*clen+sampl-1); qch4 = qch3(:,sampl:IPOINT:IPOINT*nd*clen+sampl-1); [ich5 qch5] = despread(ich4,qch4,code); % 解扩 demodata = qpskdemod(ich5,qch5,user,nd,ml); % QPSK解调 %******************误码率分析****************** noe2 = sum(sum(abs(data-demodata))); nod2 = user * nd * ml; noe = noe + noe2; nod = nod + nod2; 15