%-2DPSK调制与解调%---------------------------------------------------%参数初始化%---------------------------------------------------fs=3600000;%采样频率为36000赫兹Time_Hold_On=1/1200;%一个时钟周期为1200分之1,对应比特率为1200bpsNum_Unit=fs*Time_Hold_On;%一个时钟周期内的采样点个数High_Level=ones(1,Num_Unit);%高电平(全1序列)Low_Level=zeros(1,Num_Unit);%低电平(全0序列)w=1800;%载波角频率1800HzA=1;%载波幅值%---------------------------------------------------%信号初始化%---------------------------------------------------Sign_Set=[0,1,1,0,1,0,0,1];%原始序列Lenth_Of_Sign=length(Sign_Set);%原始序列长度Sign_Sett=ones(1,Lenth_Of_Sign+1);%差分变换后的序列,初始化为长度为原始序列长度+1的全1序列(第一个码元为1)sign_orign=zeros(1,Num_Unit*(Lenth_Of_Sign+1));%初始化基带信号为全0序列sign_result=zeros(1,Num_Unit*(Lenth_Of_Sign+1));%初始化接收到的基带信号为全0序列st=zeros(1,Num_Unit*(Lenth_Of_Sign+1));%初始化调制后的信号为全0序列t=0:1/fs:Time_Hold_On*(Lenth_Of_Sign+1)-1/fs;%信号采样时间点result=zeros(1,Lenth_Of_Sign+1);%初始化接收到的序列resultt=zeros(1,Lenth_Of_Sign);%初始化差分解调后的序列%---------------------------------------------------%求差分编码%---------------------------------------------------forI=2:Lenth_Of_Sign+1%差分变换后的序列第一个值为1,从第2个开始计算Sign_Sett(I)=xor(Sign_Sett(I-1),Sign_Set(I-1));%用异或运算求差分码end%---------------------------------------------------%产生基带信号%---------------------------------------------------forI=1:Lenth_Of_Sign+1%考虑差分变换后序列中每一个值ifSign_Sett(I)==1sign_orign((I-1)*Num_Unit+1:I*Num_Unit)=High_Level;%序列值为1,基带信号为高电平elsesign_orign((I-1)*Num_Unit+1:I*Num_Unit)=Low_Level;%序列值为0,基带信号为低电平endend%---------------------------------------------------%调制部分%---------------------------------------------------forI=1:Lenth_Of_Sign+1%考虑差分变换后序列中每一个值ifSign_Sett(I)==1st((I-1)*Num_Unit+1:I*Num_Unit)=A*cos(2*pi*w*t((I-1)*Num_Unit+1:I*Num_Unit)+(pi/2));%序列值为1,相位调制为π/2elsest((I-1)*Num_Unit+1:I*Num_Unit)=A*cos(2*pi*w*t((I-1)*Num_Unit+1:I*Num_Unit));%序列值为0,相位调制为0endendfiguresubplot(2,1,1)plot(t,sign_orign);axis([0,Time_Hold_On*(Lenth_Of_Sign+2),-(A/2),A+(A/2)]);title('原始信号');grid%画出基带信号subplot(2,1,2);plot(t,st);axis([0,Time_Hold_On*(Lenth_Of_Sign+2),-3*(A/2),3*(A/2)]);title('调制后的信号');grid%画出相位调制后的信号%---------------------------------------------------%相干解调%---------------------------------------------------dt=st.*cos(2*pi*w*t);%相干相乘figureplot(t,dt);axis([0,Time_Hold_On*(Lenth_Of_Sign+2),-3*(A/2),3*(A/2)]);title('相干相乘后的波形');grid%---------------------------------------------------%低通滤波部分%---------------------------------------------------[N,Wn]=buttord(2*pi*1500,2*pi*3400,3,25,'s');%临界频率采用角频率表示,计算低通滤波器参数[b,a]=butter(N,Wn,'s');%产生N阶低通巴特沃斯滤波器[bz,az]=impinvar(b,a,fs);%映射为数字的dt=filter(bz,az,dt);%将相干相乘后的信号进行滤波figureplot(t,dt);axis([0,Time_Hold_On*(Lenth_Of_Sign+2),-3*(A/2),3*(A/2)]);title('低通滤波后的波形');grid%---------------------------------------------------%抽样判决&逆码变换部分%---------------------------------------------------forI=1:Lenth_Of_Sign+1ifdt((2*I-1)*Num_Unit/2)0.25%在时钟周期中间采样,由于相干相乘后信号幅值变为1/2,所以判决门限为0.25sign_result((I-1)*Num_Unit+1:I*Num_Unit)=High_Level;elsesign_result((I-1)*Num_Unit+1:I*Num_Unit)=Low_Level;end%由于相干相乘后得到的信号变为原来的负数,所以进行逆码变换endfigureplot(t,sign_result);axis([0,Time_Hold_On*(Lenth_Of_Sign+2),-3*(A/2),3*(A/2)]);title('逆码变换后的波形');grid%---------------------------------------------------%序列生成与差分还原%---------------------------------------------------forI=1:Lenth_Of_Sign+1result(I)=sign_result(I*Num_Unit)%将接收到的信号生成(差分)序列endforI=1:Lenth_Of_Signresultt(I)=xor(result(I),result(I+1))%将接收到的差分序列还原为原序列endwindow=boxcar(length(st));%矩形窗nfft=1024;[Pxx,f]=periodogram(st,window,nfft,fs);%求功率谱密度plot(f,10*log10(Pxx));