⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qdpsk.m

📁 实现QPSK和BPSK的调制解调程序
💻 M
字号:

%**************           程序说明            ***************************%
%%%%%%%%%%%%%%%% File: dqpsk.m%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%% date: 2007-04-27  author: haige shengzhou corp. %%%%%%%%%%

%%% 目的:进行QDPSK调制性能分析 %%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%变量名定义%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%nd:原是码元的个数;
%%%Origin_code_I:原始I路信号;
%%%Origin_code_Q:原始Q路信号;
%%%Transimit_code_I:码变换后I路信号;
%%%Transimit_code_Q:码变换后Q路信号;
%%%%receive_decode_I:接收端译码后I路信号;
%%%%receive_decode_Q:接收端译码后Q路信号;
%%%%%%%%%%%%%%%%程序主体%%%%%%%%%%%%%%%%%%%%%%%%%
clear all;

nd = 100;   % Number of symbols that simulates in each loop
 Origin_code_I=rand(1,nd)>0.5;  % 原始I路信号;
 Origin_code_Q=rand(1,nd)>0.5;  % 原始Q路信号;
 [Transimit_code_I,Transimit_code_Q]=qdpskmod(Origin_code_I,Origin_code_Q);%%原始信号编码
ins_value = 16;
for i=1:nd*ins_value
    if rem(i,ins_value) ==1
        Ibit_flowzero(i) =Transimit_code_I(fix((i-1)/ins_value)+1);
    else
        Ibit_flowzero(i) =0;        
    end
end
for i=1:nd*ins_value
    if rem(i,ins_value) ==1
        Qbit_flowzero(i) =Transimit_code_Q(fix((i-1)/ins_value)+1);
    else
        Qbit_flowzero(i) =0;        
    end
end

%升滚降平方根滤波器的参数设置;
alpha=1 ;  %滚降因子。
sr=2.4e3 ; %符号率,符号率为2.4KHz。
%%---ins_value倍的采样

[psf,den] = rcosine(1*sr,ins_value*sr,'fir/sqrt',alpha,1);
Ipulse=conv(Ibit_flowzero,psf);
Qpulse=conv(Qbit_flowzero,psf);% 卷积后数据长度为length(Qbit_flowzero)+length(psf)-1
%去处滤波器延迟效应
Isignal =Ipulse((length(psf)-1)/2+1:length(Ipulse));
Qsignal =Qpulse((length(psf)-1)/2+1:length(Qpulse));
	
%     spow=sum(Isignal.*Isignal+Qsignal.*Qsignal)/nd;  % sum: built in function
% 	attn=0.5*spow*sr/br*10.^(-ebn0/10);
% 	attn=sqrt(attn);  % sqrt: built in function
%     
%     [Transimit_code_I3,Transimit_code_Q3]= comb(Transimit_code_I2,Transimit_code_Q2,attn);% add white gaussian noise
% 	[Transimit_code_I4,Transimit_code_Q4]= compconv(Transimit_code_I3,Transimit_code_Q3,xh2);
%     
%      syncpoint=irfn*IPOINT+1;
%     Transimit_code_I5=Transimit_code_I4(syncpoint:IPOINT:length(Transimit_code_I3));
%     Transimit_code_Q5=Transimit_code_Q4(syncpoint:IPOINT:length(Transimit_code_Q3));
offset=0; % 
ideal_samplefre =ins_value*sr;
samplefre= ideal_samplefre+offset;
%--------生成有载波调制的数据----------------------
fcarrier = 21.4e6;
foffset = 0;
ophase= pi/3;
time=[0:length(Isignal)-1]/samplefre;
tra_IFsignal=Isignal.*cos(2*pi*(fcarrier+foffset).*time+ophase)-Qsignal.*sin(2*pi*(fcarrier+foffset).*time+ophase);
       
%-----------------------------接收机部分-------------
fc = 21.4e6;
LP_fircof = fir1(128,0.125);
    Rec_Ibasesignal =tra_IFsignal.*cos(2*pi*fc.*time+ophase);
    Rec_Qbasesignal=-1*tra_IFsignal.*sin(2*pi*fc.*time+ophase);
    %---------------匹配滤波--------
    Rec_MFIbase =filter(psf,1,Rec_Ibasesignal);%产生(length(LP_fircof)-1)/2位延迟
        Rec_MFQbase =filter(psf,1,Rec_Qbasesignal);         %---------------低通滤波--------
        Rec_LPIbase =filter(LP_fircof,1,Rec_MFIbase);%产生(length(LP_fircof)-1)/2位延迟
        Rec_LPQbase=filter(LP_fircof,1,Rec_MFQbase); 
        FIRfilter_delay =(length(LP_fircof)-1)/2+(length(psf)-1)/2;
        Rec_Idec= Rec_LPIbase(FIRfilter_delay+1:ins_value:length(Rec_LPIbase));
        Rec_Qdec= Rec_LPQbase(FIRfilter_delay+1:ins_value:length(Rec_LPQbase));
    
    Transimit_code_I6=Rec_Idec>=0;
    Transimit_code_Q6=Rec_Qdec>=0;
    [receive_decode_I,receive_decode_Q]=dpskdemod(Transimit_code_I6,Transimit_code_Q6);%译码
    
    figure(1)
    subplot(2,1,1);
    plot(Origin_code_I);
     subplot(2,1,2);
    plot(receive_decode_I);

%      figure(2)
%     subplot(2,1,1);
%     plot(Transimit_code_I);
%      subplot(2,1,2);
%     plot(Transimit_code_I5);
%        
%       figure(3)
%     subplot(2,1,1);
%     plot(Transimit_code_Q);
%      subplot(2,1,2);
%     plot(Transimit_code_Q5);
%************************** Bit Error Rate (BER) ****************************
% Transimit_code_I6=2*Transimit_code_I6-1;
% Transimit_code_Q6=2*Transimit_code_Q6-1;
%     noe1=sum(abs(Transimit_code_I6-Transimit_code_I))+sum(abs(Transimit_code_Q6-Transimit_code_Q));
% 
%     noe2=sum(abs(receive_decode_I-Origin_code_I))+sum(abs(receive_decode_Q-Origin_code_Q));  % sum: built in function
% 	nod2=length(Origin_code_I)+length(Origin_code_Q);  % length: built in function
% 	noe=noe+noe2;
% 	nod=nod+nod2;
% 
% end % for iii=1:nloop    
% 
% %********************** Output result ***************************
% 
% ber = noe/nod;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -