📄 qam16.m
字号:
%本程序中时间单位是微秒
%频率单位为MHz
%码速率单位是Mb/s
global dt t f df N T
close all
clear Eb_N0 Pe
N=2^13; %采样点数
L=32; %每码元的采样点数
M=N/L %码元数
Rb=2; %码速率是2Mb/s
Tb=1/Rb; %码元间隔
Ts=4/Rb; %每一支路码元间隔
dt=Tb/L; %时域采样间隔
df=1/(N*dt) %频域采样间隔
T=N*dt %截短时间
Bs=N*df/2 %系统带宽
alpha=0.5 %滚降系数
fc=10*Rb; %载波频率
t=[-T/2+dt/2:dt:T/2]; %每一支路时域横坐标
f=[-Bs+df/2:df:Bs]; %每一支路频域横坐标
%升余弦
hr1=sin(pi*t/Ts)./(pi*t/Ts);
hr2=cos(alpha*pi*t/Ts)./(1-(2*alpha*t/Ts).^2);
hr=hr1.*hr2;
HR=abs(t2f(hr));
%取模是为了忽略时延
GT=sqrt(HR);
GR=GT;
%产生冲激序列
a=round(rand(1,M));
a1=zeros(1,M/2); %串并变换
a2=zeros(1,M/2);
ac=zeros(1,M/4); %数摸变换
as=zeros(1,M/4);
%噪声
for loop1=1:10
Eb_N0(loop1)=(loop1-1) %Eb/N0 in dB
eb_n0(loop1)=10^(Eb_N0(loop1)/10);
Eb=1;
n0=Eb/eb_n0(loop1); %信道的噪声谱密度
sita=n0*Bs; %信道中噪声功率
n_err=0; %误码计数
for i=1:M/2
a1(i)=a(2*i-1);
end
for k=1:M/4
if (a1(2*k-1)==0)&(a1(2*k)==0), %数摸变换
ac(k)=-3;
elseif (a1(2*k-1)==0)&(a1(2*k)==1),
ac(k)=-1;
elseif (a1(2*k-1)==1)&(a1(2*k)==1),
ac(k)=1;
else (a1(2*k-1)==1)&(a1(2*k)==0),
ac(k)=3;
end
end
imp1=zeros(1,N); %产生冲激序列
imp1(2*L:4*L:N)=ac/dt;
IMP1=t2f(imp1);
%%第二路
for j=1:M/2;
a2(j)=a(2*i);
% m=2i-1;
end
for m=1:M/4
if (a1(2*m-1)==0)&(a1(2*m)==0), %数摸变换
as(m)=-3;
elseif (a1(2*m-1)==0)&(a1(2*m)==1),
as(m)=-1;
elseif (a1(2*m-1)==1)&(a1(2*m)==1),
as(m)=1;
else (a1(2*m-1)==1)&(a1(2*m)==0),
as(m)=3;
end
end
imp2=zeros(1,N); %产生冲激序列
imp2(2*L:4*L:N)=as/dt;
IMP2=t2f(imp2);
It=f2t(IMP1.*GT);
Qt=f2t(IMP2.*GT);
s1=It.*(cos(2*pi*fc*t));
s2=-Qt.*(sin(2*pi*fc*t));
Qam=It.*(sqrt(2)*cos(2*pi*fc*t))-Qt.*(sqrt(2)*sin(2*pi*fc*t));%Qam表示输出的时域波形
%%%%%%%%%%%%%%%%%%%%%%%%调制完成%%%%%%%%%%%%%%%%%%%
% %噪声
% for loop1=1:10
% Eb_N0(loop1)=(loop1-1) %Eb/N0 in dB
% eb_n0(loop1)=10^(Eb_N0(loop1)/10);
% Eb=1;
% n0=Eb/eb_n0(loop1); %信道的噪声谱密度
% sita=n0*Bs; %信道中噪声功率
%
% n_err=0; %误码计数
for loop2=1:5
n_ch=sqrt(sita)*randn(size(t)); %信道噪声
s=Qam+n_ch;
%%%%%%%%%%%%%%%%%%%%%%%%开始解调%%%%%%%%%%%%%%%%%%%
s1=s.*cos(2*pi*t);
s2=s.*(-sin(2*pi*t));
r1=real(f2t(t2f(s1).*GR)); %解调信号1
r2=real(f2t(t2f(s2).*GR)); %解调信号2
y1=r1(2*L:4*L:N); %取样1
y2=r2(2*L:4*L:N); %取样2
%%%%%%%%%%%判决%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
aa1=zeros(1,M/2); %并串变换
aa2=zeros(1,M/2);
for ii=1:M/4
if y1>=2 %判决1
aa1(2*ii-1)=1;
aa1(2*ii)=0;
elseif y1<2&y1>0
aa1(2*ii-1)=1;
aa1(2*ii)=1;
elseif y1<0&y1>-2
aa1(2*ii-1)=0;
aa1(2*ii)=1;
else
aa1(2*ii-1)=0;
aa1(2*ii)=0;
end
end
for jj=1:M/4
if y2>=2 %判决2
aa2(2*jj-1)=1;
aa2(2*jj)=0;
elseif y2<2&y2>=0
aa2(2*jj-1)=1;
aa2(2*jj)=1;
elseif y2<0&y2>=-2
aa2(2*jj-1)=0;
aa2(2*jj)=1;
else
aa2(2*jj-1)=0;
aa2(2*jj)=0;
end
end
c=zeros(1,M);%并串变换
for n=1:2:M-1
c(n)=aa1((n+1)/2);
c(n+1)=aa2((n+1)/2);
end
end
figure(1) %画星座图
subplot(2,1,1)
stem(ac,as,'filled');
grid on
axis([-5,5,-5,5]);
end
figure(2) %调制解调信号的波形
subplot(2,1,1) %发送的调制信号
plot(t/Ts,s1);
hold on
xlabel('t/Ts');
ylabel('信号幅度');
axis([-5,5,-5,5]); %只取20个码元进行观察
title('16QAM同相支路信号');
plot(t/Ts,It*sqrt(2),'g');
plot(t/Ts,-It*sqrt(2),'g');
subplot(2,1,2) %接收的解调信号
plot(t/Ts,y1);
xlabel('t/Ts');
ylabel('信号幅度');
axis([-5,5,-3,3]); %只取20个码元进行观察
title('同相支路解调信号波形)');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -