基于调制误差比的自适应调制matlab仿真,自适应调制包括4QAM,16QAM和64QAM

简介: 基于调制误差比的自适应调制matlab仿真,自适应调制包括4QAM,16QAM和64QAM

1.算法仿真效果
matlab2022a仿真结果如下:

18fc006617b49aa70d4df558a33b6f28_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png
eff58b1f7cc2285834a90854f222ad1e_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png
0c2c845308b1a356f5ce97109bebb981_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

2.算法涉及理论知识概要

    自适应调制编码技术的核心思想是:在不牺牲误比特率性能(比如BER)的前提下,根据无线通信环境和QoS要求,通过动态的改变发送端的发送功率、波特率、星座图的大小、编码方案、码率等,或者是综合改变前面所述的各种参数,在较好的无线信道条件下获得较大的吞吐量;而当无线信道质量下降时,相应地降低传输速率,最终达到提高系统资源的利用率,获得较高的系统吞吐量和容量的目的。研究显示,几乎在各种衰落信道下,速率自适应与恒定速率下的功率自适应相比,前者能够更好的提高系统吞吐量。因此,在许多无线分组数据传输系统的国际标准中都采用了自适应调制编码技术,例如作为WCDMA增强技术的高速下行分组接入系统(HSDPA)、无线局域网(WLAN)标准802.11a,以及宽带无线接入系统IEEE802.16等都建议采用自适应调制编码技术来提高系统的吞吐量以及频谱效率。

   mer指的是调制误差比,TR101 290标准是用来描述DVB系统的测量准则。在标准中,调制误差比(MER)指的是被接收信号的单个“品质因数”(figure of merit)。MER往往作为接收机对传送信号能够正确解码的早期指示。事实上,MER是用来比较接收符号   (用来代表调制过程中的一个数字值)的实际位置与其理想位置的差值。当信号逐渐变差时,被接收符号的实际位置离其理想位置愈来愈远,这时测得的MER数值也会渐渐减小。一直到最后,该符号不能被正确解码,误码率上升,这时就处于门限状态即崩溃点。

    其中,I和Q是理想的QAM接收机相位图中的数据点,δI和δQ是由损伤引起的接收的数据点和理想的QAM相位图的点的误差,N是在数据抽样中捕获的点数。上式中的N是数据抽样的大小,他一般比相位图中的点数多,为了能捕获到具有代表性的抽样。换句话说,它是测量由任何损伤合法设计与理想的相位图点的位置相比的道德不理想导致的相位图族的变化。在测量时,矢量分析仪首先对被测量数字调制信号进行接收和采样,调整信号经解调后于基准矢量信号进行比较。被测矢量信号与基准矢量信号之间的差矢量信号被称为误差矢量信号,有误差矢量信号中既包含幅度误差信息,也包含相位误差信息。在干扰小的时候MER变化缓慢,随着干扰的增大,当出现误码率时,MER变化很快。MER可以被认为是信噪比测量的一种形式,它将精确表明接收机对信号的解调能力,因为它不仅包括高斯噪声,而且包括接收星座图上所有其它不可校正的损伤。如果信号中出现的有效损伤仅仅是高斯噪声,那么MER等于S/N。即:

54e607d99f060f0d43a1faad40fb141c_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

3.MATLAB核心程序

% Msg
MyMsgCount = 0; % 文本指针,为上一帧数据发送的最后一个字符
msg = zeros(196,1);
for count = 1:FrameCount
    % Tx
    msg_pre = msg;
    % Modulation Adaptive
    if MER<ModAdpThres(1)
        M = 4; % 调制阶数
        MessageLength = (FrameSize-BarkerLength)*2; % 信息比特数
        msgBin = [MyMsgBits;MyMsgBits]; % 循环发送文本
        msgBin = msgBin(MyMsgCount+1:MyMsgCount+MessageLength,1); 
        % 接着上一帧发
        msg = double(msgBin);
        scrambledData = step(pScrambler, msg); % 扰码
        modulatedData = step(p4QAMModulator, scrambledData); %信息调制
    elseif MER<ModAdpThres(2)
        M = 16;
        MessageLength = (FrameSize-BarkerLength)*4;
        msgBin = [MyMsgBits;MyMsgBits];
        msgBin = msgBin(MyMsgCount+1:MyMsgCount+MessageLength,1);
        msg = double(msgBin);
        scrambledData = step(pScrambler, msg);
        modulatedData = step(p16QAMModulator, scrambledData);
    else
        M = 64;
        MessageLength = (FrameSize-BarkerLength)*6;
        msgBin = [MyMsgBits;MyMsgBits];
        msgBin = msgBin(MyMsgCount+1:MyMsgCount+MessageLength,1);
        msg = double(msgBin);
        scrambledData = step(pScrambler, msg);
        modulatedData = step(p64QAMModulator, scrambledData);
    end
    MyMsgCount = mod(MyMsgCount+MessageLength,MyMsgStrLength*7);
    transmittedData = [ModulatedHeader; modulatedData]; % 组帧
    transmittedSignal=step(pTransmitterFilter,transmittedData);%成型滤波+上采样
    % Channel
    pAWGNChannel = comm.AWGNChannel( ...
        'NoiseMethod','Signal to noise ratio (SNR)', ...
        'SNR', SNRs(count)); % 信道
    corruptSignal = step(pAWGNChannel, transmittedSignal); % 经过信道
    % Rx
    AGCSignal=1/sqrt(UpsamplingFactor)*step(pAGC,corruptSignal);%自动能量控制
    RCRxSignal = step(pRxFilter, AGCSignal); % 匹配滤波+下采样
    [timingRecSignal,~] = step(pTimingRec, RCRxSignal); % 符号同步
    [symFrame,isFrameValid] = step(pFrameSync, timingRecSignal); % 帧同步
    if isFrameValid
        phaseEst = round(angle(mean(conj(ModulatedHeader) ...
            .* symFrame(1:BarkerLength)))*2/pi)/2*pi;
        phShiftedData = symFrame .* exp(-1i*phaseEst);
        HeaderSymbols = phShiftedData(1:13); % 头部符号
        if mod(count,FramePerMER) == 0
            MER = pMER(ModulatedHeader,HeaderSymbols); % 计算MER
        end
        MsgSymbols = phShiftedData(13+1:13+MessageLength/log2(M)); % 信息符号
        if M == 4
            demodOut = step(p4QAMDemodulator, MsgSymbols); % 解调
        elseif M == 16
            demodOut = step(p16QAMDemodulator, MsgSymbols); 
        else % M == 64
            demodOut = step(p64QAMDemodulator, MsgSymbols);
        end
        deScrData = step(pDescrambler,demodOut);
        if printOption
            disp(bits2ASCII(msg_pre)); % 显示发送信息
            disp(bits2ASCII(deScrData)); % 显示接收信息
        end
        if size(msg_pre) == size(deScrData)
            BER = step(pErrorRateCalc, msg_pre, deScrData); % 计算BER
        else 
            BER = [0.5 0 0];
        end
        Mods(count) = M;
        BERs(count) = BER(1);
        MERs(count) = MER;
    end
    if useScopes % 画这一帧数据的星座图,并调整参考星座点
        if M == 4
            pRxConstellation.ReferenceConstellation = ...
                [sqrt(1/2)*(1+1i)*[-1 1], ...
                reshape((repmat([-1 1],2,1)-1i* ...
                repmat([-1 1],2,1)')*sqrt(1/2),1,4)];
        elseif M == 16
            pRxConstellation.ReferenceConstellation = ...
                [sqrt(1/2)*(1+1i)*[-1 1], ...
                reshape((repmat([-3 -1 1 3],4,1)-1i* ...
                repmat([-3 -1 1 3],4,1)')*sqrt(1/10),1,16)];
        else % M == 64
            pRxConstellation.ReferenceConstellation = ...
                [sqrt(1/2)*(1+1i)*[-1 1], ...
                reshape((repmat ([-7 -5 -3 -1 1 3 5 7],8,1)-1i* ...
                repmat([-7 -5 -3 -1 1 3 5 7],8,1)')*sqrt(1/42),1,64)];
        end
        step(pRxConstellation,RCRxSignal);
相关文章
|
3天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于yolov4深度学习网络的公共场所人流密度检测系统matlab仿真,带GUI界面
本项目使用 MATLAB 2022a 进行 YOLOv4 算法仿真,实现公共场所人流密度检测。通过卷积神经网络提取图像特征,将图像划分为多个网格进行目标检测和识别,最终计算人流密度。核心程序包括图像和视频读取、处理和显示功能。仿真结果展示了算法的有效性和准确性。
49 31
|
3天前
|
算法
基于Adaboost模型的数据预测和分类matlab仿真
AdaBoost(Adaptive Boosting)是一种由Yoav Freund和Robert Schapire于1995年提出的集成学习方法,旨在通过迭代训练多个弱分类器并赋予分类效果好的弱分类器更高权重,最终构建一个强分类器。该方法通过逐步调整样本权重,使算法更关注前一轮中被误分类的样本,从而逐步优化模型。示例代码在MATLAB 2022A版本中运行,展示了随着弱分类器数量增加,分类错误率的变化及测试数据的分类结果。
|
2天前
|
供应链 算法 调度
排队算法的matlab仿真,带GUI界面
该程序使用MATLAB 2022A版本实现排队算法的仿真,并带有GUI界面。程序支持单队列单服务台、单队列多服务台和多队列多服务台三种排队方式。核心函数`func_mms2`通过模拟到达时间和服务时间,计算阻塞率和利用率。排队论研究系统中顾客和服务台的交互行为,广泛应用于通信网络、生产调度和服务行业等领域,旨在优化系统性能,减少等待时间,提高资源利用率。
|
12天前
|
机器学习/深度学习 算法 Python
基于BP神经网络的金融序列预测matlab仿真
本项目基于BP神经网络实现金融序列预测,使用MATLAB2022A版本进行开发与测试。通过构建多层前馈神经网络模型,利用历史金融数据训练模型,实现对未来金融时间序列如股票价格、汇率等的预测,并展示了预测误差及训练曲线。
|
10天前
|
存储 算法
基于HMM隐马尔可夫模型的金融数据预测算法matlab仿真
本项目基于HMM模型实现金融数据预测,包括模型训练与预测两部分。在MATLAB2022A上运行,通过计算状态转移和观测概率预测未来值,并绘制了预测值、真实值及预测误差的对比图。HMM模型适用于金融市场的时间序列分析,能够有效捕捉隐藏状态及其转换规律,为金融预测提供有力工具。
|
10天前
|
机器学习/深度学习 算法 信息无障碍
基于GoogleNet深度学习网络的手语识别算法matlab仿真
本项目展示了基于GoogleNet的深度学习手语识别算法,使用Matlab2022a实现。通过卷积神经网络(CNN)识别手语手势,如&quot;How are you&quot;、&quot;I am fine&quot;、&quot;I love you&quot;等。核心在于Inception模块,通过多尺度处理和1x1卷积减少计算量,提高效率。项目附带完整代码及操作视频。
|
13天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于深度学习网络的宝石类型识别算法matlab仿真
本项目利用GoogLeNet深度学习网络进行宝石类型识别,实验包括收集多类宝石图像数据集并按7:1:2比例划分。使用Matlab2022a实现算法,提供含中文注释的完整代码及操作视频。GoogLeNet通过其独特的Inception模块,结合数据增强、学习率调整和正则化等优化手段,有效提升了宝石识别的准确性和效率。
|
4月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
224 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
4月前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
140 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
|
4月前
|
数据采集 存储 移动开发
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
本文介绍了2023年五一杯数学建模竞赛B题的解题方法,详细阐述了如何通过数学建模和MATLAB编程来分析快递需求、预测运输数量、优化运输成本,并估计固定和非固定需求,提供了完整的建模方案和代码实现。
107 0
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码

热门文章

最新文章

下一篇
DataWorks