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

📄 gmsk_va_c1.m

📁 gmsk的源代码
💻 M
字号:
%GMSK调制,维特比解调(鉴相)
clear all
close all

%--------------------------------------------------------------------------
%参数设置
data_len = 1000;          %码元个数
sample_number = 8;          %采样个数
Rb = 24000;                 %码元速率
fc = 96000;                 %载波频率
alpha = 0.25;               %BbTb值
%**************************************************************************

%--------------------------------------------------------------------------
%随机产生传输信号
data = rand_binary(data_len);
%**************************************************************************

%--------------------------------------------------------------------------
%GMSK基带调制
[signal_out,I_out,Q_out,phase,gt,qt] = mod_gmsk(data,data_len,sample_number,Rb,alpha);
%**************************************************************************

%--------------------------------------------------------------------------
%中频搬移
I_temp=interp(I_out,4);
Q_temp=interp(Q_out,4);

fc=96000;
Fs=fc*sample_number;
t=1/Fs:1/Fs:length(I_temp)*1/Fs;
signal_i=I_temp.*cos(2*pi*fc*t);
signal_q=Q_temp.*cos(2*pi*fc*t);
signal_mod=I_temp.*cos(2*pi*fc*t)-Q_temp.*sin(2*pi*fc*t);
%**************************************************************************

%--------------------------------------------------------------------------
%加噪声
for snr = 0:15
signal_mod1 = awgn(signal_mod,snr);

    %--------------------------------------------------------------------------
    %解调,去载波
    N=300;                                              % 滤波器的阶数为(N+1)  
    F=[0,fc-1000,fc+1000,Fs/2]*2/Fs;
    A=[1,1,0,0];
    lpf=firls(N,F,A);
    
    I_dem=signal_mod1.*cos(2*pi*fc*t)*2;
    I_dem=conv(I_dem,lpf);
    I_dem=I_dem(N/2+1:N/2+length(I_temp));
    Q_dem=signal_mod1.*sin(2*pi*fc*t)*2;
    Q_dem=conv(Q_dem,lpf);
    Q_dem=-Q_dem(N/2+1:N/2+length(I_temp));
    
    I_dem_out=zeros(1,length(I_dem)/4);         % 抽取
    Q_dem_out=zeros(1,length(Q_dem)/4);
    for i=1:length(I_dem_out)
       I_dem_out(i)=I_dem(4*(i-1)+1);
       Q_dem_out(i)=Q_dem(4*(i-1)+1);
    end;
    %**************************************************************************
    
    %--------------------------------------------------------------------------
    %鉴相
    for i = 1:length(I_dem_out)
        if (I_dem_out(i)>=0)&(Q_dem_out(i)>=0)
            fai(i) = acos(I_dem_out(i));
        elseif (I_dem_out(i)<=0)&(Q_dem_out(i)>=0)
            fai(i) = acos(I_dem_out(i));
        else
            fai(i) = 2*pi - acos(I_dem_out(i));
        end
    end
    %**************************************************************************

    %--------------------------------------------------------------------------
    %维特比算法
    decision = VA_gmsk_phase(fai,data_len,sample_number,qt,15);
    %**************************************************************************

    %--------------------------------------------------------------------------
    %计算误码率
    [num,ber(snr+1)] = symerr(data,decision);
    %**************************************************************************
end
%**************************************************************************

%--------------------------------------------------------------------------
%误码率曲线
semilogy([0:15],ber,'r*-');
%**************************************************************************

⌨️ 快捷键说明

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