资源简介
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两个支路的信号转换到
- 上一篇:MATLAB GUI 多界面图像处理
- 下一篇:LFM信号模糊函数Matlab代码
评论
共有 条评论