www.pudn.com > OQPSK.rar > oqpsk_main.m, change:2013-04-19,size:10138b


clc; 
clear; 
Parameter;  %导入载波参量,码元数,抽样点数,信噪比的范围,画图中坐标的范围 
 
%产生二进制信源 
m=randn(1,N);                                    %  产生1到n的随机数 
data=sign(m);                              % 将大于0的变为1小于0的变为-1 
per_signal=sigexpand(data,fc*N_sample);          %将序列data的周期变为Ts 
gt=ones(1,fc*N_sample);                      % 产生宽度为Ts的矩形窗 
data_NRZ=conv(per_signal,gt);                    % 卷积产生基带信号 
 
figure(5); 
plot(t,per_signal(1:Lt)); 
xlabel('时间(S)'); 
ylabel('信号'); 
title('周期信号的波形图'); 
axis([tx1,tx2,ty1,ty2]); 
%*************基带信号的图形************************************* 
 
figure(1); 
subplot(2,4,1); 
plot(t,data_NRZ(1:Lt)); 
axis([tx1,tx2,ty1,ty2]); 
xlabel('时间(S)'); 
ylabel('幅度'); 
title('基带信号时域波形图'); 
grid; 
 
[f,data_NRZf]=T2F(t,data_NRZ(1:Lt));% 进行傅里叶变换 
figure(1); 
subplot(2,4,5); 
plot(f,10*log10(abs(data_NRZf).^2/T)); 
axis([fx1,fx2,fy1,fy2]); 
xlabel('频率(Hz)'); 
ylabel('功率谱密度(dB/Hz)'); 
title('基带信号功率谱图'); 
grid; 
 
figure(4); 
subplot(2,2,1); 
plot(t,data_NRZ(1:Lt)); 
axis([tx1,tx2,ty1,ty2]); 
xlabel('时间(S)'); 
ylabel('幅度'); 
title('基带信号时域波形图'); 
grid; 
 
figure(4); 
subplot(2,2,2); 
plot(f,10*log10(abs(data_NRZf).^2/T)); 
axis([fx1,fx2,fy1,fy2]); 
xlabel('频率(Hz)'); 
ylabel('功率谱密度(dB/Hz)'); 
title('基带信号功率谱图'); 
grid; 
%****************************************************************** 
 
% ***********************串并转换*********************************** 
data_i=[]; 
data_q=[]; 
for i=1:N 
    if rem(i,2)==1 
        data_i((i+1)/2)=data(i); 
    else 
        data_q(i/2)=data(i); 
    end 
end 
 
per_signal_i=sigexpand(data_i,2*fc*N_sample);   %功能同上                    
gt1=ones(1,2*fc*N_sample);                               
i_channel=conv(per_signal_i,gt1); 
 
 
%***********************i路和q路的基带信号***************************** 
figure(1); 
subplot(2,4,2); 
plot(t,i_channel(1:Lt)); 
axis([tx1,tx2,ty1,ty2]); 
xlabel('时间(S)'); 
ylabel('幅度'); 
title('i支路基带信号时域波形图'); 
grid; 
 
[f1,i_channel_f]=T2F(t,i_channel(1:Lt)); 
figure(1); 
subplot(2,4,6); 
plot(f1,10*log10(abs(i_channel_f).^2/T)); 
axis([fx1,fx2,fy1,fy2]); 
xlabel('频率(Hz)'); 
ylabel('功率谱密度(dB/Hz)'); 
title('i支路基带信号功率谱图'); 
grid; 
 
figure(3); 
subplot(2,4,1); 
plot(t,i_channel(1:Lt)); 
axis([tx1,tx2,ty1,ty2]); 
xlabel('时间(S)'); 
ylabel('幅度'); 
title('i支路基带信号时域波形图'); 
grid; 
 
 
per_signal_q=sigexpand(data_q,2*fc*N_sample);                        
gt1=ones(1,2*fc*N_sample);                               
q_channel=conv(per_signal_q,gt1);                                    
q_channel_DLY=[-ones(1,N_sample*fc),q_channel(1:end-N_sample*fc)]; 
 %进行延时,在前面添-1 
 
figure(1); 
subplot(2,4,3); 
plot(t,q_channel_DLY(1:Lt)); 
axis([tx1,tx2,ty1,ty2]); 
xlabel('时间(S)'); 
ylabel('幅度'); 
title('q支路基带信号时域波形图'); 
grid; 
 
[f2,q_channel_f]=T2F(t,q_channel_DLY(1:Lt));  
figure(1); 
subplot(2,4,7); 
plot(f2,10*log10(abs(q_channel_f).^2/T)); 
axis([fx1,fx2,fy1,fy2]); 
xlabel('频率(Hz)'); 
ylabel('功率谱密度(dB/Hz)'); 
title('q支路基带信号功率谱图'); 
grid; 
 
figure(3); 
subplot(2,4,5); 
plot(t,q_channel_DLY(1:Lt)); 
axis([tx1,tx2,ty1,ty2]); 
xlabel('时间(S)'); 
ylabel('幅度'); 
title('q支路基带信号时域波形图'); 
grid; 
 
% **********************载波***********************************8 
carrier_i=A*cos(2*pi*fc*t); 
carrier_q=A*sin(2*pi*fc*t); 
 
figure(1); 
subplot(2,4,4); 
plot(t,carrier_i); 
axis([tx1,tx2,ty1,ty2]); 
xlabel('时间(S)'); 
ylabel('幅度'); 
title('载波信号时域波形图'); 
grid; 
 
[f3,carrier_f]=T2F(t,carrier_i); 
figure(1); 
subplot(2,4,8); 
plot(f3,10*log10(abs(carrier_f).^2/T));  
% p=2/T *10*log10(abs(h1tf)为求功率谱的公式 
axis([fx1,fx2,fy1,fy2]); 
xlabel('频率(Hz)'); 
ylabel('功率谱密度(dB/Hz)'); 
title('载波信号功率谱图'); 
grid; 
 
 
%***************************生成oqpsk信号********************************** 
s_oqpsk_i=i_channel(1:Lt).* carrier_i;            %iq支路分别调制 
s_oqpsk_q=q_channel_DLY(1:Lt).*carrier_q;   
figure(2); 
subplot(2,2,1); 
plot(t,s_oqpsk_i); 
axis([tx1,tx2,ty1,ty2]); 
xlabel('时间(S)'); 
ylabel('幅度'); 
title('i支路频带信号时域波形图'); 
grid; 
 
[f4,s_oqpsk_i_f]=T2F(t,s_oqpsk_i); 
figure(2); 
subplot(2,2,3); 
plot(f4,10*log10(abs(s_oqpsk_i_f).^2/T)); 
axis([fx1,fx2,fy1,fy2]); 
xlabel('频率(Hz)'); 
ylabel('功率谱密度(dB/Hz)'); 
title('i支路频带信号功率谱图'); 
grid; 
 
 
figure(2); 
subplot(2,2,2); 
plot(t,s_oqpsk_q); 
axis([tx1,tx2,ty1,ty2]); 
xlabel('时间(S)'); 
ylabel('幅度'); 
title('q支路频带信号时域波形图'); 
grid; 
 
[f5,s_oqpsk_q_f]=T2F(t,s_oqpsk_q); 
figure(2); 
subplot(2,2,4); 
plot(f5,10*log10(abs(s_oqpsk_q_f).^2/T)); 
axis([fx1,fx2,fy1,fy2]); 
xlabel('频率(Hz)'); 
ylabel('功率谱密度(dB/Hz)'); 
title('q支路频带信号功率谱图'); 
grid; 
 
 
s_oqpsk=s_oqpsk_i+s_oqpsk_q;                %两路信号相加得到调制后的信号 
figure(8); 
subplot(2,2,1); 
plot(t,s_oqpsk); 
axis([tx1,tx2,ty1,ty2]); 
xlabel('时间(S)'); 
ylabel('幅度'); 
title('已调信号时域波形图'); 
grid; 
 
[f6,s_oqpskf]=T2F(t,s_oqpsk); 
figure(8); 
subplot(2,2,3); 
plot(f6,10*log10(abs(s_oqpskf).^2/T)); 
axis([fx1,fx2,fy1,fy2]); 
xlabel('频率(Hz)'); 
ylabel('功率谱密度(dB/Hz)'); 
title('已调信号功率谱图'); 
grid; 
% 信道加入高斯白噪声进行接收解调 
% ********************产生高斯白噪声*********************************** 
m=1; 
p1=-10; 
noise = wgn(m,Lt,p1); 
%********************************************************************** 
% 接收信号 
 y_oqpsk = s_oqpsk + noise; 
%**************************眼图**************************************** 
eyediagram(y_oqpsk,32,2,8); 
 
figure(8); 
subplot(2,2,2); 
plot(t,y_oqpsk); 
axis([tx1,tx2,ty1,ty2]); 
xlabel('时间(S)'); 
ylabel('幅度'); 
title('接收信号时域波形图 '); 
grid; 
 
[f7,y_oqpskf]=T2F(t,y_oqpsk); 
figure(8); 
subplot(2,2,4); 
plot(f7,10*log10(abs(y_oqpskf).^2/T)); 
axis([fx1,fx2,fy1,fy2]); 
xlabel('频率(Hz)'); 
ylabel('功率谱密度(dB/Hz)'); 
title('接收信号功率谱图 Pn=-10dB'); 
grid; 
%[t,ny_oqpsk]=bpf(f7,y_oqpskf,1,8); 
 
% ****************************************相干解调************************ 
% 通过乘法器1 
r_oqpsk_i = y_oqpsk .* carrier_i; 
 
figure(3); 
subplot(2,4,2); 
plot(t,r_oqpsk_i); 
axis([tx1,tx2,ty1,ty2]); 
xlabel('时间(S)'); 
ylabel('幅度'); 
title('i支路通过乘法器信号时域波形图'); 
grid; 
 
%通过低通滤波器 
[f8,r_oqpsk_if]=T2F(t,r_oqpsk_i); 
 
B1=1; 
[t1,r_oqpsk_i1]=lpf(f8,r_oqpsk_if,B1); 
 
figure(3); 
subplot(2,4,3); 
plot(t1,r_oqpsk_i1) 
axis([tx1,tx2,ty1,ty2]); 
xlabel('时间(S)'); 
ylabel('幅度'); 
title('i支路通过低通滤波器信号时域波形图'); 
grid; 
 
%抽样判决 
per_signal_i1=r_oqpsk_i1(fc*N_sample:2*fc*N_sample:end);  
 
per_signal_q2=sign(per_signal_i1);                   %判决 
per_signal_q22=sigexpand(per_signal_q2,2*fc*N_sample);  
i_channel1=conv(per_signal_q22,gt1);          %得到i支路信号 
i_channel_DLY=[-ones(1,N_sample*fc),i_channel1(1:end-N_sample*fc)];   %i支路信号延时 
 
 
figure(3); 
subplot(2,4,4); 
plot(t,i_channel_DLY(1:Lt)); 
axis([tx1,tx2,ty1,ty2]); 
xlabel('时间(S)'); 
ylabel('幅度'); 
title('i支路抽样判决后信号时域波形图'); 
grid; 
% 通过乘法器2 
r_oqpsk_q = y_oqpsk .* carrier_q; 
figure(3); 
subplot(2,4,6); 
plot(t,r_oqpsk_q); 
axis([tx1,tx2,ty1,ty2]); 
xlabel('时间(S)'); 
ylabel('幅度'); 
title('q支路通过乘法器信号时域波形图'); 
grid; 
 
%***********************通过低通滤波器********************************** 
[f9,r_oqpsk_qf]=T2F(t,r_oqpsk_q); 
[t2,r_oqpsk_q1]=lpf(f9,r_oqpsk_qf,B1); 
figure(3); 
subplot(2,4,7); 
plot(t2,r_oqpsk_q1) 
axis([tx1,tx2,ty1,ty2]); 
xlabel('时间(S)'); 
ylabel('幅度'); 
title('q支路通过低通滤波器信号时域波形图'); 
grid; 
 
%***************************************抽样判决**************************** 
 
per_signal33=r_oqpsk_q1(fc*N_sample:2*fc*N_sample:end);  
 
per_signal44=sign(per_signal33);     %判决 
per_signal444=sigexpand(per_signal44,2*fc*N_sample);  
q_channel1=conv(per_signal444,gt1);                                  
 
figure(3); 
subplot(2,4,8); 
plot(t,q_channel1(1:Lt)) 
axis([tx1,tx2,ty1,ty2]); 
xlabel('时间(S)'); 
ylabel('幅度'); 
title('q支路抽样判决后信号时域波形图'); 
grid; 
per_signal_q2DLY=i_channel_DLY(fc*N_sample:2*fc*N_sample:end); 
 
% ********************************并串转换************************* 
per_signal_data=[]; 
for s=1:N/2 
    per_signal_data(2*s-1)=per_signal_q2DLY(s); 
    per_signal_data(2*s)=per_signal44(s); 
end 
 
r_per_signaldata=sigexpand(per_signal_data,fc*N_sample);  
 
 
%***********************解调信号输出********************************** 
r_oqpsk=conv(r_per_signaldata,gt); 
z_r_oqpsk=[r_oqpsk(2*N_sample*fc+1:N*N_sample*fc),ones(1,2*N_sample*fc)]; 
% 
%*除延时 
 
 
 
figure(4); 
subplot(2,2,3); 
plot(t,z_r_oqpsk(1:Lt)); 
axis([tx1,tx2,ty1,ty2]); 
xlabel('时间(S)'); 
ylabel('幅度'); 
title('解调信号时域波形图 Pn=-10dB'); 
grid; 
 
[f10,z_r_oqpskf]=T2F(t,r_oqpsk(1:Lt)); 
figure(4); 
subplot(2,2,4); 
plot(f10,10*log10(abs(z_r_oqpskf).^2/T)); 
axis([fx1,fx2,fy1,fy2]); 
xlabel('频率(Hz)'); 
ylabel('功率谱密度(dB/Hz)'); 
title('解调信号功率谱图 Pn=-10dB'); 
grid; 
 
%**************************星座图************************************** 
star_map_complex=i_channel(1:fc*N*N_sample)+j*q_channel_DLY(1:fc*N*N_sample); 
scatterplot(star_map_complex); 
axis([-4,4,-4,4]); 
grid; 
xlabel('实部'); 
ylabel('虚部'); 
title('星座图'); 
 
%*********************************************************************** 
 
 
data_NRZJ=data_NRZ(1:fc*N*N_sample); 
p=find(data_NRZJ<0); 
data_NRZJ(p)=0; 
q=find(z_r_oqpsk<0); 
z_r_oqpsk(q)=0; 
r=find(data_NRZ>0); 
data_NRZJ(r)=1; 
s=find(z_r_oqpsk>0); 
z_r_oqpsk(s)=1; 
%*************************EVM******************************************** 
 
 
% evm=EVM(y_oqpskf,s_oqpskf) 
 
%***************************误码率********************************* 
figure 
[num,rt] = biterr(data_NRZJ,z_r_oqpsk); 
Ps = erfc(sqrt(EsN0)*sin(pi/M));  
Pb=2/3*Ps; 
%通过一系列计算可以得到 
     %  
     %由于   
     %可以进一步得到,  
semilogy(EsN0dB,Pb,'rd -'); 
xlabel('Es/N0(dB)'); ylabel('误码率'); 
grid on; 
title('oqpsk系统的误码率'); 
%***************************程序结束**********************************