您现在的位置:首页 >> 通信 >> 内容

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

时间:2023/2/19 21:37:07 点击:

  核心提示:A388,包括程序操作录像...

1.完整项目描述和程序获取

>面包多安全交易平台:https://mbd.pub/o/bread/ZJWXk59w

>如果链接失效,可以直接打开本站店铺搜索相关店铺:

点击店铺

>如果链接失效,程序调试报错或者项目合作可以加微信或者QQ联系。

2.部分仿真图预览




3.算法概述

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

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

4.部分源码

............................................................................

%% Run

% 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);

................................................................

A388

作者:我爱C编程 来源:我爱C编程
本站最新成功开发工程项目案例
相关评论
发表我的评论
  • 大名:
  • 内容:
本类固顶
  • 没有
  • FPGA/MATLAB商业/科研类项目合作(www.store718.com) © 2025 版权所有 All Rights Reserved.
  • Email:1480526168@qq.com 站长QQ: 1480526168