基于调制误差比的自适应调制matlab仿真,自适应调制包括4QAM,16QAM和64QAM
Posted 51matlab
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于调制误差比的自适应调制matlab仿真,自适应调制包括4QAM,16QAM和64QAM相关的知识,希望对你有一定的参考价值。
1.算法仿真效果
matlab2022a仿真结果如下:
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。即:
3.MATLAB核心程序
%% 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);
基于迫零准则的自适应线性均衡器的MATLAB仿真
0.完整源码获得方式
订阅MATLAB/FPGA教程,免费获得教程案例以及任意2份完整源码
1.软件版本
MATLAB2013b
2.本算法理论知识
在数字通信系统中,码间串扰和加性噪声是造成信号传输失真的主要因素,为克服码间串扰,在接收滤波器和抽样判决器之间附加一个可调滤波器,用以校正(或补偿)这些失真。对系统中线性失真进行校正的过程称为均衡,实现均衡的滤波器称为均衡滤波器。
由于实际的限带信道的传递函数往往是非理想的,且经常是事变的、未知的,因而系统特性不符合奈窐斯特准则,导致在接受端抽样时刻存在码间干扰,使得系统误码性能下降。为此,要考虑在信道传递函数是非理想情况,且信号在信道传输中受到加性白高斯噪声干扰条件下的接收机的设计问题。本文提出了基于迫零算法的信道均衡器,对迫零线性均衡器进行了理论分析,并在Matlab中进行仿真得到了良好的仿真结果。
理论和实践证明,在数字通信系统中插入一种可调滤波器可以校正和补偿系统特性,减少码间干扰的影响。这种起补偿作用的滤波器称为均衡器。
均衡器通常是用滤波器来实现的,使用滤波器来补偿失真的脉冲,判决器得到的解调输出样本,是经过均衡器修正过的或者清除了码间干扰之后的样本。自适应均衡器直接从传输的实际数字信号中根据某种算法不断调整增益,因而能适应信道的随机变化,使均衡器总是保持最佳的工作状态,从而有更好的失真补偿性能。
均衡器从调整参数至形成收敛,整个过程是均衡器算法、结构和通信变化率的函数。为了能有效的消除码间干扰,均衡器需要周期性的做重复训练。在数字通信系统中用户数据是被分为若千段并被放在相应的时间段中传送的,每当收到新的时间段,均衡器将用同祥的训练序列进行修正。均衡器一般被放在接收机的基带或中频部分实现,基带包络的复数表达式可以描述带通信号波形,所以信道响应、解调信号和自适应算法通常都可以在基带部分被仿真和实现。
均衡技术可以分为两大类:线性和非线性均衡。这些种类是由自适应均衡器的输出接下来是如何控制均衡器来划分的。判决器决定了接收数字信号比特的值并应用门限电平来决定的值。如果在反馈路径中调整均衡器,均衡器就是线性的。另一方面,如果d (t)反馈回来调整均衡器,则为非线性均衡。线性均衡器包括线性横向均衡器、线性格型均衡器等等,非线性均衡器包括判决反馈均衡器、最大似然序列均衡器等等。
这里我们将重点介绍横向均衡器。
横向(时间延迟或递归) 均衡器是自适应均衡发展方案中的最简单形式。在实际应用中为使参数调整得以顺利进行, 把输出信号进行判决所得的估计信号作为理想信号,这样,整个数字均衡器成了一个非线性系统,其收敛性分析相当麻烦,但在信道畸变不是特别严重的情况下,其收敛域能够得到保证,可以用线性系统的分析方法对其进行分析。其基本结构如下所示:
式中上角“T”表示矩阵的转置。
线性横向均衡器最大的优点就在于其结构非常简单,容易实现,因此在各种数字通信系统中得到了广泛的应用。但是其结构决定了两个难以克服的缺点:
其一就是噪声的增强会使线性横向均衡器无法均衡具有深度零点的信道-为了补偿信道的深度零点,线性横向均衡器必须有高增益的频率响应,然而同时无法避免的也会放大噪声。
另一个问题是线性横向均衡器与接收信号的幅度信息关系密切,而幅度会随着多径衰落信道中相邻码元的改变而改变,因此滤波器抽头系数的调整不是独立的。由于以上两点线性横向均衡器在畸变严重的信道和低信噪比(SNR)环境中性能较差,而且均衡器的抽头调整相互影响,从而需要更多的抽头数目。
迫零算法是由Lucky于1965年提出的,他在分析中略去了信道的加性噪声,所以在实际存在噪声的情况下由该算法得到的解不一定是最佳的,但它易于实现。
所以在信道的频率响应特性比较平坦,所引起的码间干扰不太严重的情况下,由该算法可达到信道均衡的效果。在横向滤波器的延迟单元N为无穷多个的理想线性均衡条件下:
为消除收端抽样时刻的码间干扰,希望:
在实际应用中,常用的是截短的横向滤波器,因而不可能完全消除收端抽样时刻的码间干扰,只能适当的调整各抽头系数,尽量减小码间干扰。此时,可使:
3.部分核心代码
clc;
clear;
close all;
N = 5000; %仿真时间
step = 0.01;
T = 1;
SNR = 8;
%step 1
%模拟带有ISI的信号
[signal_with_ISI,r0]=ana_of_receive_signal_with_ISI(N,step,T);
% step2
% 通过信道,加入噪声
signal_with_ISI_noise = add_noise(signal_with_ISI,SNR);
% step 3
% 横向滤波器
filters(T);
% step 4
% 迫零算法
ZF_out = ZF();
% step 5
% 基于迫零算法的横向滤波器的系数调整
ZF_filter = filters_ZF();
%step6
%bit数据还原
for i = 1:length(ZF_filter)
if ZF_filter(i) < 0
signal(1+floor(i/100)) = -1;
else
signal(1+floor(i/100)) = 1;
end
end
signal = signal';
rs=signal(1:length(signal)-1);
figure
stem(rs,'r-*');axis([0,length(rs),-2,2]);title('二进制比特流数据');
error=find(rs ~=r0);
error_rate=length(error)/N;
4.操作步骤与仿真结论
5.参考文献
[1]张力军,张宗橙,郑宝玉数字通信[M]John G,Proakis.译.4版.北京:电子工业出版社.2003.
[2]樊昌信,徐炳祥,吴成柯.通信原理[M].6版..北京:国防工业出版社.2005.
[3]Simom Haykin著.自适应滤波器原理第四版.北京:电子工业出版社.2002
[4]王兴亮.数字通信原理与技术(第二版).西安:西安电子科技大学出版社.2003
[5]陈怀琛等著.《MATLAB及在电子信息课程中的应用》(第三版),电子工业出版社,2006
[6]邹琨等著.《MATLAB6.X信号处理》(第一版),清华大学出版社,2002
[7]周炯磐等著.《通信原理》(第三版),北京邮电大学出版社,2008
[8]赵静等著.《基于MATLAB的通信系统仿真》(第一版),北京航空航天大学出版社,2007
[9]田丽华.信息论、编码与密码学.西安电子科技大学出版社.2008
[10]H.Sail,G.Karam.I.Jjeanclaude.Frequency-domain Equalization of Mobile Radio and Terrestrial Broadca Channels.In GLOBEC0M94.1994.
[11]A.Czylwik.Comparison between Adaptive OFDM an Single Carrier Modulation with Frequ ency Domain EqualizaTion.1997
[12]J.Tubbax,B.Come,LV.Perre,L.Deneire,S.Donnav Engles.OFDM Versus Single Carrier with Cyclic Prefix:System-base Comparison for Binary modulation.2001
[13]沈福民编著 《自适应信号处理》,西安:西安电子科技大学出版社,2001.3;
[14]丁玉美,高西全编著 《数字信号处理》,西安:西安电子科技大学,2000.12;
[15]张平等编 《MATLAB基础与应用简明教程》,北京:北京航空航天大学出版社,2001.1
[15]李建新编 《现代通信系统分析与仿真—MATLAB通信工具箱》,西安电子科技大学出版社2000.11
A01-28
以上是关于基于调制误差比的自适应调制matlab仿真,自适应调制包括4QAM,16QAM和64QAM的主要内容,如果未能解决你的问题,请参考以下文章
AGC+FPGA基于FPGA的数字AGC自适应增益设计,应用在BPSK调制解调系统中
基于13位巴克码和线性调频混合调制信号MTI,MTD以及CFAR的matlab仿真