www.pudn.com > qam.rar > qam.m


%调制qammod(a,16); 解调用qamdemod  画星座图modmap('qam',4)  
clear;      %设置参数 
M = 16; 
fd=200; 
fc=4*fd; 
fs=4*fc; 
rolloff = 0.5; 
nsamp = 4;          
num=1000;          %符号个数 
% ******* -----产生QAM基带信号 -----******************************* 
x = randint(1,num,M); 
y = qammod(x,M); 
subplot(2,2,1); 
plot(real(y),imag(y),'*'),title('基带星座图'); 
i=real(y); 
q=imag(y); 
%************************************************************* 
% ****************----- 成形滤波 -----***************************** 
 
filtorder = 33;                      % 滤波器长 
delay = (filtorder-1)/(nsamp*2);     % 群延时 
rrcfilter = rcosine(fd,nsamp*fd,'fir/sqrt',rolloff,delay);   
yi=conv(rrcfilter,upsample(i,nsamp));    
yq=conv(rrcfilter,upsample(q,nsamp)); 
 
%************************************************************ 
% *****************----- 加载波 -----************************ 
yii=interp(yi,fs/fc);%内插 
yqq=interp(yq,fs/fc); 
nn=1:length(yii); 
yic=yii.*cos(2*pi*nn*fc/fs);% 加载波 
yqc=yqq.*sin(2*pi*nn*fc/fs);% 加载波 
iq = yic+yqc; 
 
%******************-----进入信道-----****************************** 
iq = awgn(iq,8,'measured');      %信道中 载波噪声   
%********************************************************* 
%********************----- 去载波 ------************************ 
 
ii=iq.*cos(2*pi*nn*fc/fs); 
qq=iq.*sin(2*pi*nn*fc/fs); 
 
b=fir1(32,0.2);         
yif=filter(b,1,ii);  
yqf=filter(b,1,qq);  
 
yiw=2.*downsample(yif,fs/fc,0); 
yqw=2.*downsample(yqf,fs/fc,0); 
subplot(2,2,3); 
plot(1:500,yiw(1+4:500+4),'r',1:500,yi(1:500),'g'),title('红载波后,绿载波前'); 
%*********************************************************** 
% ******************----- 匹配 -----*********************** 
icc=conv(rrcfilter,yiw); 
qcc=conv(rrcfilter,yqw); 
 
icr=downsample(icc,nsamp,0); 
qcr=downsample(qcc,nsamp,0); 
 
ic=icr(2+delay*2:length(icr)-delay*2+1);      %去掉冗余 
qc=qcr(2+delay*2:length(icr)-delay*2+1); 
 
%******************************************************** 
%*********************画出重构星座图 
subplot(2,2,2); 
plot(ic,qc,'*'),title('重构星座图'); 
 
%************************ 判 决****************************** 
iq2=ic+j.*qc; 
z = qamdemod(iq2,M); 
err=abs(z-x);       %与原信号比较 
subplot(2,2,4); 
plot(err); 
numerr=(length(find(err>0)))/num;       %画出错误符号 
numerr 
%*********************** 结束 ********************************