m基于matlab的连续相位调制(CPM)解调系统仿真,包括解调,同步等模块

news2025/2/3 9:09:11

目录

1.算法描述

2.仿真效果预览

3.MATLAB核心程序

4.完整MATLAB


1.算法描述

        随着数字通信技术的飞速发展,数字通信的调制技术也得到了快速发展,其中连续相位调制(Continuous Phase Modulation,CPM)作为一种全新的通信调制方法得到了越来越多的关注。CPM和传统调制方法不同之处在于,其具有带外辐射小,抗干扰能力强以及频率利用效率高等优势。这是由于传统的FSK和PSK等调制方式,其存在调制相位不连续的情况,而这种不连续的现象会导致相位突变问题,即在信号的传输过程中,信号会从一个相位特性突然切换到另外一个相位特性使得信号在频域存在较大的旁瓣,那么此时需要一个较大的频带来进行传输,导致频谱利用率低下,而CPM调制方式则可以有效避免这种现象发生。CPM是一种通过恒包络调制,从而降低了CPM信号的发送功率。       

       CPM(连续相位调制)是近年来发展很快的一种高效的调制技术。与其它调制技术相比,它具有较高的频谱利用率和功率效率,这也令它在通信资源日益紧张的今天得到了越来越多的关注。CPM信号包含大量的信号形式,其共同的特点是信号包络恒定、相位连续。CPM调制体系是一种信道编码和调制相结合的方式,通过生成相位状态格子序列控制下一时刻的状态转移,因此信息符号的调制直接具有编码效应,从而无须更多的冗余符号.CPM调制体系可以通过最大似然序列估计(MLSE)对接收信号进行软判决,实现低信噪比条件下的高检测概率.这些优良特性使得CPM技术在幅度衰落信道中实现高数据传输速率的通信系统中具有广阔的应用前景.

        CPM即使连续相位调制(Continue Phase Modulation),是一种相位调制技术,它具有相位连续的特点,频谱特性优良,相比PSK调制方式,具有更高的频带利用率。并且,CPM调制体系是一种信道编码和调制相结合的方式,通过生成相位状态格子序列控制下一时刻的状态转移,因此信息符号的调制直接具有编码效应,从而无须更多的冗余符号.CPM调制体系可以通过最大似然序列估计(MLSE)对接收信号进行软判决,实现低信噪比条件下的高检测概率.这些优良特性使得CPM技术在幅度衰落信道中实现高数据传输速率的通信系统中具有广阔的应用前景.

      CPM基带信号可以表示为
      

其瞬时相位信息可以表示为:

CPM信号最大的优势在于其频谱利用率较高,当传输的符号为等概率情况下,CPM信号的功率谱表达式为 :

CPM解调系统如下: 

 

        在CPM解调过程中,接收信号通过载波同步模块,得到解调之后的基带信号,然后通过低通滤波器滤除存在的高频信息,然后将得到的基带信号进行定时同步操作得到定时同步的基带数据,从而完成CPM解调。  目前, CPM信号的载波同步方法主要分为数据辅助同步和非数据辅助同步。数据辅助同步方法的同步性能较好, 但需占用额外的传输带宽和功率; 非数据辅助同步方法不需额外的带宽和功率, 但同步精度较差, 且仅适用于信噪比较高的情况, 很难实现有效同步。

    传统的CPM信号使用Viterbi算法实现相干解调, 不便于软信息的提取, 为此, 采用MAP算法对CPM信号进行软解调, 以获取载波相位同步所需的软解调信息。

由Rimoldi分解可知, CPM信号隐含一个具有记忆性的网格编码器, 类比卷积码的网格图, 可定义 

时刻CPM信号的状态为: 时刻的状态即为: 相邻时刻两个相位状态之间的关系为:

CPM信号的网格图如图1所示, 其中 

和 分别表示起始状态和结束状态, 和 分别表示输入信息符号和输出码字符号, 表示状态集合, 表示输入符号集合, 表示任意两个网格状态之间的所有可能状态转移。

2.仿真效果预览

matlab2022a仿真结果如下:

 

 

 

3.MATLAB核心程序

。。。。。。。。。。。。。。。。。。。。。。。。。
 
OVS=8;
N_fft=OVS*2*4;   
M_fft=OVS*2;   
L_fft=N_fft/M_fft;
 
N_data=100;
preamble=[1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0];
tao0=0.2*T/OVS;
 
t=[0:T/OVS:L*T];
gt=( 1-cos( 2*pi*(t-tao0)/(L*T) ) )/(2*L*T);
gt=gt(1:(length(gt)-1));
 
 
databit=rand(1,N_data)>0.5;
modbit=[preamble,databit];
length_modbit=length(modbit);
length_modsignal=(length_modbit+2)*OVS;
 
mod_gt=zeros(1,length_modsignal);
for ii=1:length_modbit
    if modbit(ii)==1    %1is modulated to -1
        mod_gt((ii-1)*OVS+1:(ii-1)*OVS+L*OVS)=mod_gt((ii-1)*OVS+1:(ii-1)*OVS+L*OVS)-gt;
    else
        mod_gt((ii-1)*OVS+1:(ii-1)*OVS+L*OVS)=mod_gt((ii-1)*OVS+1:(ii-1)*OVS+L*OVS)+gt;
    end
end 
 
phai=zeros(1,length_modsignal);
for ii=1:length_modsignal
 
 phai(ii)=mod(2*pi*h*sum(mod_gt(1:ii)),2*pi);
 
end 
modsignal=cos(phai);
 
I=cos(phai);
Q=sin(phai);
 
%假设已经鉴频完毕
freq_d=[zeros(1,16*OVS),mod_gt+2000*2*pi];
freq_demod=awgn(freq_d,10);   
 
 
tmp_fft_L=zeros(1,length(freq_demod)-N_fft+1); %tone component
tmp_deltaf=zeros(1,length(freq_demod)-N_fft+1);%carrier offset
tmp_symbole=zeros(1,length(freq_demod)-N_fft+1);%symbol timing error
for ii=N_fft:(length(freq_demod))
    tmp_deltaf(ii-N_fft+1)=sum(freq_demod(ii-N_fft+1:ii))/(2*pi*N_fft);
    nn=0;
    for jj=ii-N_fft+1:ii
        tmp_fft_L(ii-N_fft+1)=tmp_fft_L(ii-N_fft+1)+freq_demod(jj)*exp(-i*(2*pi/M_fft)*nn);%第L个
        nn=nn+1;
    end
    tmp_symbole(ii-N_fft+1)=-((T/ts)/pi)*angle(tmp_fft_L(ii-N_fft+1));
end 
 
tmp_symbole=abs(tmp_symbole);
 
 
tao=tmp_symbole(150:278);
  for i=1:length(tao)/(2*OVS)
             for k=1:2*OVS
                 mtao(i,k)=tao((i-1)*2*OVS+k);
             end
  end
            ktao=min(mtao,[],2);
            ktao=ktao';
mse=0;
for ii=1:length(ktao)
        mse=mse+ (  ktao(ii)-tao0*OVS/T )^2;   
end
01_173m
EbN0=[5:2.5:30]; 
     for yy=1:length(tao0)
%         for yy=1:1
        t=[0:T/CY:L*T];
        gt=1/(2*L*T).*ones(1,length(t));
        qt=(  t-tao0(yy) )/(2*L*T); 
%     gt=(1-cos(2*pi*(t)/(L*T)))/(2*L*T);%gt脉冲函数LRC
%     qt=-1/4*(-2*pi*(t-tao0(yy))+L*T*sin(2*pi*(t-tao0(yy))/L/T))/L/T/pi;

        pha=zeros(1,length(data));
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% modulation
         for i=L:length(data)
        
                k=i-L+1;
                if(k>1)
                pha(k)=mod(pha(k-1)+pi*h*data(k-1),2*pi);
                end
                pha_t((k-1)*CY+1:k*CY)=mod(2*pi*h* (data(i)*qt(1:CY))+pha(k) ,2*pi);
                %s((k-1)*CY+1:k*CY)=cos(pha_t((k-1)*CY+1:k*CY));
        end
% plot(pha)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

        mo_exp=exp(pha_t*j);

            for tt=1:length(EbN0)
%          for tt=1:1
                %snr(tt) = EbN0(tt)- 10 * log10(CY) + 10 * log10(log2(m));
                mo_exp_res=awgn(mo_exp,EbN0(tt));

%                     mo_exp_res=mo_exp;
                cnt=1;
                ll=length(mo_exp_res)/CY;
                x_multi=zeros(1,CY,ll);
                x_multi_temp=zeros(1,CY);
                 all_ee_sum=zeros(1,CY);
                  ee_sum=zeros(1,CY);
              for i=1:m  
                  cnt=i+1;
                   x_multi=zeros(1,CY,ll);
                    for k=(i+1):ll
                        xk1=mo_exp_res( (k-1-i)*CY+1:(k-i)*CY);
                        xk2=mo_exp_res( (k-1)*CY+1:(k)*CY);
                        x_multi(1,:,cnt)=( conj(xk1).*xk2 ).^2/ll;
                        cnt=cnt+1;
                    end
                   ee_sum=zeros(1,CY);
                    for a=1:CY
                        for it=1:cnt-1
                            ee_sum(a)=ee_sum(a)+x_multi(1,a,it);
                            ee_sum(a)=ee_sum(a);
                        end
                    end
                    abs(ee_sum);
                all_ee_sum=all_ee_sum+abs(ee_sum);

              end
                
                rm_sum=0;
                for a=1:CY
                       rm_sum=rm_sum+abs(all_ee_sum(a))*exp(-j*2*pi*(a-1)/CY)*1/4;
                       rm_sum=rm_sum;
                end
                tao(yy,tt)=-T*angle(rm_sum)/(2*pi);
            end


    end

4.完整MATLAB

V

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/103793.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GNN 极简入门

文章目录图基本知识GNN简介GCNPYG极简入门Data Handling of GraphsCommon Benchmark DatasetsMini-batchesData TransformsLearning Methods on Graphs图基本知识 😸图是由节点的有穷非空集合和节点之间边的集合组成,通常表示为 G(V,E)G(V, E)G(V,E)&am…

涨知识系列:爆款短视频拍摄技巧之一,构图

拍摄技巧主要分为两个部分,一个是构图,一个是拍摄手法。这部分内容其实也是比较简单的,因为短视频毕竟不需要做到像拍电影那么专业。所以在短视频当中我们只要学会一些基本的技巧就完全够用了。更重要的是我们需要对构图和拍摄手法有一个概念…

基于KT6368A的双模蓝牙模块打印机的方案

目录 一、打印机蓝牙模块简介 目前主流的打印机,很多都还是不带蓝牙。大部分的受限于成本等等原因,都还是通过USB的方式和电脑进行通讯,从而完成打印的数据交互 因为早期蓝牙技术发展的比较缓慢,而打印机类型的产品,…

_12LeetCode代码随想录算法训练营第十二天-C++二叉树

_12LeetCode代码随想录算法训练营第十二天-C二叉树 二叉树基础知识 二叉树的种类 满二叉树 满二叉树:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。 完全二叉树 完全二叉树的定义如下…

线段树能解决多少问题?

背景 给一个两个数组,其中一个数组是 A [1,2,3,4],另外一个数组是 B [5,6,7,8]。让你求两个数组合并后的大数组的: 最大值最小值总和 这题是不是很简单?我们直接可以很轻松地在 O(mn) 的时间解决,其中 m 和 n 分别为…

maven的java工程获取mysql数据库数据【问题及解决过程记录】

创建数据库maven,指定字符集和排序规则 UTF8MB4常用的排序规则:utf8mb4_unicode_ci、utf8mb4_general_ci、utf8mb4_bin,选用哪种方式呢?先来分析一下: 1、准确性: (1)utf8mb4_unico…

ffmpeg-时间基tbn、tbc、tbr

时间基的作用 源码来自ffmpeg5.1。 时间基在ffmpeg中是通过数据结构有理数AVRational描述的。时间基为时间戳的单位,比如时间基tbn(AVStream.time_base)0.001秒,AVPacket的pts40,则表明该AVPacket要在tbn*pts0.04秒开始显示。 /** 代码路径…

JavaScript 网页特效

一、Offset 1.1 概述 offset > 偏移量 ,可以动态的获取的元素的位置、大小等属性。 获得元素距离带有定位父元素的位置获得元素自身的大小(宽度高度) 返回的数值都不带单位 offset常用属性: 属性作用element.offsetParent返回作为该元素带有定位…

全球汽车后行业发展现状:欧洲市场保持稳健 中国产业规模增速较快

根据观研报告网发布的《2022年中国汽车后市场分析报告-市场发展格局与投资潜力研究》显示,汽车后市场(AM市场)是指汽车在销售之后维修和保养服务及其所包含的汽车零部件、汽车用品和材料的交易市场,它涵盖了消费者买车后所需要的一…

LeetCode 321 周赛

2485. 找出中枢整数 给你一个正整数 n ,找出满足下述条件的 中枢整数 x : 1 和 x 之间的所有元素之和等于 x 和 n 之间所有元素之和。 返回中枢整数 x 。如果不存在中枢整数,则返回 -1 。题目保证对于给定的输入,至多存在一个中…

STM32单片机直流电机PID速度控制正反转控制(霍尔磁铁测速)LCD1602

实践制作DIY- GC0116-直流电机PID速度控制 一、功能说明: 基于STM32单片机设计-直流电机PID速度控制 功能介绍: STM32F103C系列最小系统LCD1602直流电机磁铁霍尔传感器MX15系列驱动模块4个按键(速度减、速度加、开/关、正转/反转&#xff0…

【复习笔记】【嵌入式】嵌入式系统及其原理复习重点——篇二

嵌入式系统及其原理复习重点笔记 2 ARM处理器和指令集 ARM处理器简介 ARM架构与ARM处理器对应关系 V1版架构 该版架构只在原型机ARM1出现过,处理能力有限,其基本性能: 寻址空间:64M字节(26位)基本的数据处理指令(无乘法)字节、半字和字的…

4个封神的电脑软件,颠覆你对白嫖的认知,干货奉上

闲话少说,直上干货。 1、TinyWow TinyWow虽说是国外网站工具,但不得不承认真的无敌好用,收纳工具超200个,完全免费,无任何弹屏广告,更为良心的是,不需要注册登录,随用随走&#xff0…

如何优化大场景实时渲染?HMS Core 3D Engine这么做

在先前举办的华为开发者大会2022(HDC)上,华为通过3D数字溪村展示了自有3D引擎“HMS Core 3D Engine”(以下简称3D Engine)的强大能力。作为一款高性能、高画质、高扩展性的3D引擎,3D Engine不仅能通过实时光…

C++文件流

1、【转】string和stringstream用法总结 - 小金乌会发光-Z&M - 博客园 2、C:std::stringstream【数据类型转换、多个字符串拼接、分割字符串】_u013250861的博客-CSDN博客_c stringstream转string 3、C使用stringstream进行数据类型转换_puppylpg的…

TCP延迟应答、捎带应答、粘包问题、异常处理

TCP延迟应答、捎带应答、粘包问题、异常处理一、延迟应答二、捎带应答三、面向字节流 -- 粘包问题四、TCP中的异常处理五、补充一、延迟应答 上篇博客我们讲到TCP滑动窗口、流量控制、拥塞控制。 如果接收数据的主机立刻返回ACK应答,这时候返回的窗口可能比较小。…

[ vulhub漏洞复现篇 ] Airflow dag中的命令注入漏洞复现 CVE-2020-11978

🍬 博主介绍 👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…

web前端-javascript-function函数的arguments对象(类数组对象,它也可以通过索引来操作数据,也可以获取长度)

arguments 对象 1. 引出 arguments 在调用 function 函数时,浏览器每次都会传递进两个隐含的参数 函数的上下文对象 this封装实参的对象 arguments 2. 说明 arguments 是一个类数组对象,它也可以通过索引来操作数据,也可以获取长度在调用函数时&#…

ACL会议介绍 - Call for Main Conference Papers

The 61st Annual Meeting of the Association for Computational Linguistics Toronto, Canada July 9-14, 2023 网址:The 61st Annual Meeting of the Association for Computational Linguistics - ACL 2023 目录 征集主要会议文件 Submission Topics 主题轨迹…

Stm32标准库函数3——BlueTooth 蓝牙通讯测试 Stm32中继

//在使用本程序前,先将模块与手机端匹配成功,波特率38400 //串口1(A9、A10)接电脑,串口2(A2、A3)接蓝牙模块 //所有的波特率都为38400,蓝牙的供电为3.3-5v //程序功能,转…