• 大小: 8KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-06-01
  • 语言: Matlab
  • 标签: QDPSK  

资源简介

QDPSK的调制与解调的M文件 QDPSK的调制与解调的M文件

资源截图

代码片段和文件信息

function []=qdpsk()
t0=0.004999;   
% 0.004999 50个码元 0.049999 500个码元  0.099999 1000个码元
% 码元宽度 0.0001s, 每个码元100个采样点
%输入至少为10个码元以上
ts=0.000001;
fc=50000;   %载波频率
snr=20; %信噪比,以dB来表示
snr_lin =10^(snr/10); %dB转换
fs=1/ts;
df=0.3;  %频率分辨率
t=(0:ts:t0);
N=length(t)/100;   %计算输入二进制数字序列的长度

%载波信号生成
c0=cos(2*pi*fc.*t);          % 0
c1=cos(2*pi*fc.*t+pi/2);     % pi/2
c2=cos(2*pi*fc.*t+pi);       % pi
c3=cos(2*pi*fc.*t+3/2*pi);   % 3/2pi

%生成消息信号(二进制数字序列)
m2=zeros(1N);   %初始化变量
%m2(1)、m2(2)不赋值,清零处理
%数字序列从m2(3)开始计算
for i=3:N
    m2(i)=fix(2*rand(1));
end

%将二进制数字序列转换为时域信号
m2_time=zeros(1N*100);   %初始化变量
for k=1:N
    for i=(100*k-99):(100*k)
         m2_time(i)=m2(k);
    end   
end


%绘制二进制数字基带序列(不归零码型)
%plot(tm2_time)
%axis([0 0.001 -0.5 1.5])

%码变换
%将绝对码转换为相对码m2_d
%第一组相对码设定为 00
m2_d=zeros(1N);
for i=3:2:(N-1)
    if m2(i)==0&&m2(i+1)==0
        if m2_d(i-2)==0&&m2_d(i-1)==0
            m2_d(i)=0;m2_d(i+1)=0;
        elseif m2_d(i-2)==1&&m2_d(i-1)==0
            m2_d(i)=1;m2_d(i+1)=0;
        elseif m2_d(i-2)==1&&m2_d(i-1)==1
            m2_d(i)=1;m2_d(i+1)=1;
        else
            m2_d(i)=0;m2_d(i+1)=1;
        end
    elseif m2(i)==1&&m2(i+1)==0
        if m2_d(i-2)==0&&m2_d(i-1)==0
            m2_d(i)=1;m2_d(i+1)=0;
        elseif m2_d(i-2)==1&&m2_d(i-1)==0
            m2_d(i)=1;m2_d(i+1)=1;
        elseif m2_d(i-2)==1&&m2_d(i-1)==1
            m2_d(i)=0;m2_d(i+1)=1;
        else
            m2_d(i)=0;m2_d(i+1)=0;
        end       
    elseif m2(i)==1&&m2(i+1)==1
        if m2_d(i-2)==0&&m2_d(i-1)==0
            m2_d(i)=1;m2_d(i+1)=1;
        elseif m2_d(i-2)==1&&m2_d(i-1)==0
            m2_d(i)=0;m2_d(i+1)=1;
        elseif m2_d(i-2)==1&&m2_d(i-1)==1
            m2_d(i)=0;m2_d(i+1)=0;
        else
            m2_d(i)=1;m2_d(i+1)=0;
        end
    else
        if m2_d(i-2)==0&&m2_d(i-1)==0
            m2_d(i)=0;m2_d(i+1)=1;
        elseif m2_d(i-2)==1&&m2_d(i-1)==0
            m2_d(i)=0;m2_d(i+1)=0;
        elseif m2_d(i-2)==1&&m2_d(i-1)==1
            m2_d(i)=1;m2_d(i+1)=0;
        else
            m2_d(i)=1;m2_d(i+1)=1;
        end
    end
end

%载波调制:相位选择法
% 00---0 10---90 11---180 01---270
%QDPSK调制
qdpsk=zeros(1N*100);           %初始化

for k=1:(N/2)
    for i=(100*k-99):(100*k)
      if m2_d(2*k-1)==0&&m2_d(2*k)==0
          qdpsk(i)=c0(i); 
      elseif m2_d(2*k-1)==1&&m2_d(2*k)==0
          qdpsk(i)=c1(i);
      elseif m2_d(2*k-1)==1&&m2_d(2*k)==1 
          qdpsk(i)=c2(i);  
      else
          qdpsk(i)=c3(i);  
     end
    end      
end


%计算信号功率和噪声功率
signal_power=spower(qdpsk(1:length(t))); %计算已调信号功率
noise_power=signal_power/snr_lin;
noise_std=sqrt(noise_power);            %计算噪声的标准方差
noise=noise_std*randn(1length(t));     %生成噪声

%将噪声叠加至QDPSK已调信号
qdpsk_n=qdpsk+noise;

%本地载波生成
c_l1=cos(2*pi*fc.*t);
c_l2=sin(2*pi*fc.*t);

%相乘器
%分为2个支路,分别标记为1和2
qdpsk_dem11=qdpsk_n.*c_l1;
qdpsk_dem12=qdpsk_n.*c_l2;


%将2两个支路的信号转换到

评论

共有 条评论