您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > qdpsk程序matlab
Matlab程序:%-----------------------------QDPSK----------------------------------clearall;closeall;clc;%---------------------------------------------------------------------%参数设置Fc=5e6;data_len=10000;%---------------------------------------------------------------------%随机产生传输信号rand_data_len=randn(1,data_len);fori=1:data_lenifrand_data_len(i)=0.5input(i)=1;elseinput(i)=0;endend%---------------------------------------------------------------------%串并转换fori=1:data_lenifrem(i,2)==1ifinput(i)==1I(i)=-1;I(i+1)=-1;elseI(i)=1;I(i+1)=1;endelseifinput(i)==1Q(i-1)=-1;Q(i)=-1;elseQ(i-1)=1;Q(i)=1;endendend%---------------------------------------------------------------------%码变换I_diff=zeros(1,data_len);Q_diff=zeros(1,data_len);I_diff(1)=I(1);Q_diff(1)=Q(1);fori=2:data_lenifI(i)==1&&Q(i)==1%0-+11--1ifI_diff(i-1)==1&&Q_diff(i-1)==1I_diff(i)=1;Q_diff(i)=1;elseifI_diff(i-1)==-1&&Q_diff(i-1)==1I_diff(i)=-1;Q_diff(i)=1;elseifI_diff(i-1)==-1&&Q_diff(i-1)==-1I_diff(i)=-1;Q_diff(i)=-1;elseI_diff(i)=1;Q_diff(i)=-1;endelseifI(i)==-1&&Q(i)==1ifI_diff(i-1)==1&&Q_diff(i-1)==1I_diff(i)=-1;Q_diff(i)=1;elseifI_diff(i-1)==-1&&Q_diff(i-1)==1I_diff(i)=-1;Q_diff(i)=-1;elseifI_diff(i-1)==-1&&Q_diff(i-1)==-1I_diff(i)=1;Q_diff(i)=-1;elseI_diff(i)=1;Q_diff(i)=1;endelseifI(i)==-1&&Q(i)==-1ifI_diff(i-1)==1&&Q_diff(i-1)==1I_diff(i)=-1;Q_diff(i)=-1;elseifI_diff(i-1)==-1&&Q_diff(i-1)==1I_diff(i)=1;Q_diff(i)=-1;elseifI_diff(i-1)==-1&&Q_diff(i-1)==-1I_diff(i)=1;Q_diff(i)=1;elseI_diff(i)=-1;Q_diff(i)=1;endelseifI_diff(i-1)==1&&Q_diff(i-1)==1I_diff(i)=1;Q_diff(i)=-1;elseifI_diff(i-1)==-1&&Q_diff(i-1)==1I_diff(i)=1;Q_diff(i)=1;elseifI_diff(i-1)==-1&&Q_diff(i-1)==-1I_diff(i)=-1;Q_diff(i)=1;elseI_diff(i)=-1;Q_diff(i)=-1;endendend%---------------------------------------------------------------------%零内插zero=5;%采样率为25MHzfori=1:zero*data_lenifrem(i,zero)==1Izero(i)=I_diff(fix((i-1)/zero)+1);Qzero(i)=Q_diff(fix((i-1)/zero)+1);elseIzero(i)=0;Qzero(i)=0;endend%---------------------------------------------------------------------%脉冲成形滤波器NT=50;N=2*zero*NT;Fs=25e6;rf=0.1;psf=rcosfir(rf,NT,zero,Fs,'sqrt');Ipulse=conv(Izero,psf);Qpulse=conv(Qzero,psf);%---------------------------------------------------------------------%调制fori=1:zero*data_len+Nt(i)=(i-1)/(Fc*zero);Imod(i)=Ipulse(i).*sqrt(2)*cos(2*pi*Fc*t(i));Qmod(i)=Qpulse(i).*(-sqrt(2)*sin(2*pi*Fc*t(i)));endsum=Imod+Qmod;%---------------------------------------------------------------------%加噪声forSNR=0:10sum1=awgn(sum,SNR);%---------------------------------------------------------------------%解调%---------------------------------------------------------------------%相乘器fori=1:zero*data_len+NIdem(i)=sum1(i).*sqrt(2)*cos(2*pi*Fc*t(i));Qdem(i)=sum1(i).*(-sqrt(2)*sin(2*pi*Fc*t(i)));end%---------------------------------------------------------------------%匹配滤波器mtf=rcosfir(rf,NT,zero,Fs,'sqrt');Imat=conv(Idem,mtf);Qmat=conv(Qdem,mtf);%---------------------------------------------------------------------%抽取fori=1:zero*data_lenIsel(i)=Imat(i+N);Qsel(i)=Qmat(i+N);end%---------------------------------------------------------------------%采样fori=1:data_lenIsam(i)=Isel((i-1)*zero+1);Qsam(i)=Qsel((i-1)*zero+1);end%---------------------------------------------------------------------%判决threshold=0.2;fori=1:data_lenifIsam(i)=thresholdI_final(i)=0;elseI_final(i)=1;endifQsam(i)=thresholdQ_final(i)=0;elseQ_final(i)=1;endend%---------------------------------------------------------------------%码反变换I_abs=zeros(1,data_len);Q_abs=zeros(1,data_len);I_abs(1)=I_final(1);Q_abs(1)=Q_final(1);fori=2:data_lenifI_final(i-1)==0&&Q_final(i-1)==0%前一输入双比特为00ifI_final(i)==0&&Q_final(i)==0%本时刻输入00I_abs(i)=0;Q_abs(i)=0;%输出数据00elseifI_final(i)==0&&Q_final(i)==1%本时刻输入01I_abs(i)=0;Q_abs(i)=1;%输出数据01elseifI_final(i)==1&&Q_final(i)==1%本时刻输入11I_abs(i)=1;Q_abs(i)=1;%输出数据11else%本时刻输入10I_abs(i)=1;Q_abs(i)=0;%输出数据10endelseifI_final(i-1)==0&&Q_final(i-1)==1%前一输入双比特为01ifI_final(i)==0&&Q_final(i)==0%本时刻输入00I_abs(i)=1;Q_abs(i)=0;%输出数据10elseifI_final(i)==0&&Q_final(i)==1%本时刻输入01I_abs(i)=0;Q_abs(i)=0;%输出数据00elseifI_final(i)==1&&Q_final(i)==1%本时刻输入11I_abs(i)=0;Q_abs(i)=1;%输出数据01else%本时刻输入10I_abs(i)=1;Q_abs(i)=1;%输出数据11endelseifI_final(i-1)==1&&Q_final(i-1)==1%前一输入双比特为11ifI_final(i)==0&&Q_final(i)==0%本时刻输入00I_abs(i)=1;Q_abs(i)=1;%输出数据11elseifI_final(i)==0&&Q_final(i)==1%本时刻输入01I_abs(i)=1;Q_abs(i)=0;%输出数据10elseifI_final(i)==1&&Q_final(i)==1%本时刻输入11I_abs(i)=0;Q_abs(i)=0;%输出数据00else%本时刻输入10I_abs(i)=0;Q_abs(i)=1;%输出数据01endelse%前一输入双比特为10ifI_final(i)==0&&Q_final(i)==0%本时刻输入00I_abs(i)=0;Q_abs(i)=1;%输出数据01elseifI_final(i)==0&&Q_final(i)==1%本时刻输入01I_abs(i)=1;Q_abs(i)=1;%输出数据11elseifI_final(i)==1&&Q_final(i)==1%本时刻输入11I_abs(i)=1;Q_abs(i)=0;%输出数据10else%本时刻输入10I_abs(i)=0;Q_abs(i)=0;%输出数据00endendend%---------------------------------------------------------------------%并串转换fori=1:data_lenifrem(i,2)==1ifI_abs(i)==1final(i)=1;elsefinal(i)=0;endelseifQ_abs(i)==1final(i)=1;elsefinal(i)=0;endendend%---------------------------------------------------------------------%计算误码率[num,ber(SNR+1
本文标题:qdpsk程序matlab
链接地址:https://www.777doc.com/doc-2854289 .html