首页/文章/ 详情

大学毕业设计一席谈之二十六 GMSK准相干解调和最大似然解调(8)深议VA解调

精品
作者优秀平台推荐
详细信息
文章亮点
作者优秀
优秀教师/博士学历/特邀专家/独家讲师
平台推荐
内容稀缺
10月前浏览195

继续讲解!VA解调来源于维特比译码,我也是在本人写的维特比译码程序上进行的修改才得到的最大似然解调程序!这是这个系列中难度的天花板,对于很多研究生而言,也是如此!本文耗时半年多才完成,价格非常贵,非专业人士不要购买,因为难度非常大。很多人买了也看不懂!但本文是给出了源代码,对于相关人士帮助会非常大!之前已经写过维特比解调的程序,那是全状态的分析。现在看看简化状态下的VA解调的性能和复杂度。依旧是先看资料,有了比对和指引,写起来就快了。本文写作长达两年多时间,超过七千字,内容有相当大的难度,再次强调非专业人士切莫购买!自己写了这么多篇文章,本文首次谈及为何需要进行相位旋转,想想很多学生为了这个概念在那百思不得其解,通信搞起来确实抽象。当年我为搞懂这个概念也看了很多遍书,一次一次的推导,人笨就得多看书。现在不一样了,有了AI这个帮手,解释起来很容易理解,加速了我们的学习过程。目前为止,我看到的是加速作用,还没有看到替代功能,不过苗头已经出现,智能化程度确实在提高。我们算法人员的危机感一直都有,不多惧怕多一个对手!看懂了本文,搞定GMSK解调将一马平川!!!2025年11月,通过本文的写作把AI训练水平提升到了一个新高度,大家看了文章自然会了解这个训练过程!!!本人一直有想在杂志上发表本文的意愿,之前还缺理论推导部分,现在补上了,也许两年之后会在一个小杂志上出现,纯粹为了考核指标。

难点!MLSE!

注意:这里简化了状态!要想得到这个状态图,那么接收端是不需要进行解旋转操作的,这是不同于准相干解调的地方!!!恰恰由于没有解旋转才能出现下图的四个状态!!!

好的论文一定是既要有分析,也要有仿真结果!本人读了五遍以上,才把各种细节搞清楚!

看到这,大家肯定想急切的知道该如何写代码呢?别急,再看看另一篇论文(超级经典)给出的参考资料!两篇文章合起来看会更有启发!上一篇文章中的代码就出自此文。

1997年,我还在读本科,老外都已经在MATLAB上开发这么复杂的算法了!那时国内也只有华为和中兴等少数几家厂家能开发交换机等相关产品,GSM 基站等设备还在研发中!本文也是GMSK解调的经典知识,现在学也不晚,经典意味着基础,打好基础才能建起高楼大厦。

要想把这些程序吃透,也并非易事,然后还要观察在频偏下的影响!先一步一步的挨个分析程序吧!虽然工作量很大,但吃透程序必须这么做!本人将上文中的代码进行了简化,将多个函数的内容体现在主程序中,更方便读者看懂和消化内容。黄色代码部分尤为要关注!!!

%---------------------    设定参数
% GSM 05.05 PARAMETERS
Tb = 3.692e-6;
BT = 0.3;
OSR = 4;

% THE NUMBER OF BITS GENERATED BY THE DATA GENERATOR. 
INIT_L = 114;

% SETUP THE TRAINING SEQUENCE USED FOR BUILDING BURSTS
TRAINING = [0 0 1 0 0 1 0 1 1 1 0 0 0 0 1 0 0 0 1 0 0 1 0 1 1 1];

% CONSTRUCT THE MSK MAPPED TRAINING SEQUENCE USING TRAINING.
% MAKE A POLAR VERSION OF TRAINING
TRAININGPol=(2.*TRAINING)-1;

% DO DIFFERENTIAL ENCODING OF THE BITS
for n=2:length(TRAININGPol)
  diff_TRAININGPol(n) = TRAININGPol(n)*TRAININGPol(n-1);
end

% DO GMSK MAPPING OF POLAR a(n)
% THIS IS A CHOICE, AND IT MAY BE WRONG!!!!!!
T_SEQ(1)=1;
for n=2:length(TRAININGPol)
  T_SEQ(n)=1i*diff_TRAININGPol(n)*T_SEQ(n-1);
end

% PREPARE THE TABLES NEEDED BY THE VITERBI ALGORITHM.
[ SYMBOLS , PREVIOUS , NEXT , START , STOPS ] = viterbi_init(Lh);

% THIS IS THE SIMULATION LOOP, OVER THE BURSTS
A_Loop=0;
for Loop=1:LOOPS
  % GET THE TIME
  t0=clock;
  for n=1:10
    %%%%%%%%%%%%%  生成GSM信号
    %--------- GET DATA FOR A BURST
    tx_data = randi([0 1],1,INIT_L);
    % 帧结构
    %   [ TAIL | DATA | CTRL | TRAINING | CTRL | DATA | TAIL ]
    %   [  3   |  57  |  1   |    26    |  1   |  57  |  3   ]
    
    TAIL = [0 0 0];
    CTRL = [1];

    % COMBINE THE BURST BIT SEQUENCE
  tx_burst = [TAIL tx_data(1:57) CTRL TRAINING CTRL tx_data(58:114) TAIL];

    %--------- DIFFERENTIAL ENCODING    
    L = length(tx_burst);

    % INTERMEDIATE VECTORS FOR DATA PROCESSING
    d_hat = zeros(1,length(tx_burst));
    alpha = zeros(1,length(tx_burst));

% DIFFERENTIAL ENCODING ACCORDING TO GSM
% AN INFINITE SEQUENCE OF 1'ENS ARE ASSUMED TO PRECEED THE ACTUAL BURST
    data = [1 tx_burst];
    for n = 1+1:(L+1)
      d_hat(n-1) = xor( data(n),data(n-1) );
    end
    alpha = 1 - 2.*d_hat;

    % PREPARING DATA FOR OUTPUT
    burst = alpha;

    %---------    GMSK MODULATION OF BURST SEQUENCE    
    % ACCUIRE GMSK FREQUENCY PULSE AND PHASE FUNCTION
    % SIMULATION SAMPLE FREQUENCY
    Ts = Tb/OSR;

    % PREPARING VECTORS FOR DATA PROCESSING
    PTV = -2*Tb:Ts:2*Tb;
    RTV = -Tb/2:Ts:Tb/2-Ts;
    % GENERATE GAUSSIAN SHAPED PULSE
    sigma = sqrt(log(2))/(2*pi*BT);
    gauss = (1/(sqrt(2*pi)*sigma*Tb))*exp(-PTV.^2/(2*sigma^2*Tb^2)); 

来源:通信工程师专辑
ACTMATLAB通信UM理论
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2025-12-04
最近编辑:10月前
算法工匠
博士后 | 高级工程师 诚信做事 认真讲课 传播知识
获赞 428粉丝 2859文章 624课程 40
点赞
收藏
作者推荐
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈