1.算法仿真效果
matlab2022a仿真结果如下:
在数字通信系统中, 数字通信系统及其相关部分必须满足误码率的最低规 范要求。误码率是一个非常重要的指标,它衡量着系统性能的好坏,因此在数 字通信领域中经常会遇到误码率的测试问题。误码率[是二进制比特流经过系 统传输后发生差错的概率,其测量方法[ 68]从系统的输入端输入某种预定形式的 比特流,检测其输出,并与输入码流比较即可检测出发生差错的位e,位数e和 已传输的总位数n之比为误码率.
1.仿照实际实验建立仿真模型,仿真模块主要包括信号发 生器模块,信道编码模块,理想二进制突发信道,译码模块,误码分析模块。
2.设置模块参数:仿真中主要用到的主要参数变量有:采样率,每帧采样 数,编码格式,采样点数,译码格式,接收延迟。
3.在上述参数下,.采用不同的编码方式:线形编码,循环编码,卷积编码 算法仿真在一定的信道差错概率下,编码算法对信道性能,即误码率的改善情 况。
4.在信道误码率逐渐增大的情况下,仿真编码算法对信道性能的改善情 况。
2.算法涉及理论知识概要
大气激光通信是采用频率极高的光波[ 3]作为信息的传输载体的一种通信方 式,由于光载波的频率高、能量集中、方向性强、可用频谱宽等特点,与其他 通信方式相比,大气光通信具有以下优点:
(1)通信容量大,可以用于宽带接入解决最后一英里的瓶颈问题。目前 卫星微波通信使用的频段在300MHz到300GHz之间,而卫星光通信的频段为 300THz,两者相差103到10 6倍。 (2)保密性好,可用于需要严格保密的场合,尤其用于军事领域;因为 它的发散角小,波束很窄,又非常定向,截接很难做到。因此,大气光通信比 通常的无线系统安全得多。
(3)抗电磁干扰,由于光波频率比电磁波频率高几个数量级,电磁波很 难对光波传输形成干扰。
(4)协议的透明性,以光为传输机制,任何传输协议均可容易的迭加上 去,电路和数据业务都可透明传输。
在卫星光通信系统中,信息经过大气进行传输,受到大气湍流,散射等作 用的影响,使光信号受到严重干扰,造成在接收端的较大误码率和短时间的通 信中断,严重影响无线光通信系统的稳定性和可靠性。因此,要保证在随机信 道条件下系统的正常工作,提出有效的手段克服大气的干扰,对激光大气通信 来说十分必要和紧迫。信道编码技术可以降低误码率,提高通信质量,因而信 信道编码技术是卫星光通信系统的关键技术之一。
卷积码是1955年由爱里斯(Elias)提出的。它与分组码不同,分组码编码 时,本组的n-k个检验元仅与k个信息元有关,而与其它各组码元无关。分组 码译码时,也仅从本码组中的码元内提取有关译码信息,而与其它各组无关。 卷积码则不同,它在编码时,本组的n-k个检验元不仅与本组的k个信息元有 关,而且还与以前各时刻输入至编码器的信息元有关;译码时也须利用以前和 以后各时刻收到的码组中提取有关信息。此外,卷积码中每组的信息位和码 长,通常要比分组码的要小。正由于在卷积码的编码过程中,充分利用了各组 之间的相关性,且n和k都比较小,因此,在与分组码同样的码率R和设备复 杂性条件下,无论是理论上还是实际上均已证明卷积码的性能至少不比分组码 差,且实现最佳和准最佳也较分组码容易,但是,在工程应用中,由于卷积码 各组之间相关,一致性能分析比较困难,从分析上得到的成果也不像分组码那 么多,而往往要借助计算机的搜索来寻找好码。
Reed-Solomon码首先是由Reed和Solomon两人于1960年提出来的,简 称为RS码。这是一类具有很强纠错能力的二进制循环码,既能纠正随机错误 也能纠正突发错误,也是一类典型的代数几何码。RS码一直以来都是国际通 信领域研究的热点之一。
3.MATLAB核心程序
n = 7;
Step = 20;%仿真时间间隔
Simu_Len = 1000*k; %仿真的时间长度
Simu_time = 2000;
Pf = 1e-3 : (10e-3-1e-3)/Step : 10e-3-(10e-3-1e-3)/Step; %信道差错概率
Simu_speed = 3*10^10/Step : 3*10^10/Step : 3*10^10;
msg = (double(rand(1,Simu_Len)>0.5))';
Rs_Encoder = fec.rsenc(n,k);
Rs_Decoder = fec.rsdec(Rs_Encoder);
%% 主体代码
for i = 1:length(Pf)
Err = zeros(1,Simu_time);
for j = 1:Simu_time
i
j
%编码
Msg_Enc = encode(Rs_Encoder,msg);
Msg_Enc2 = Msg_Enc;
%将数据通过信道
idx = round(length(Msg_Enc)*Pf(i));
idx2 = round(length(Msg_Enc)*rand(1,idx));
idx2(find(idx2 == 0)) = 1;
Msg_Enc2(idx2) = floor(rand(1,1)*Msg_Enc(idx2));%设置出错值
%译码
[Msg_Dec,cnumerr,ccode] = decode(Rs_Decoder,Msg_Enc2);
%计算误码率
Err(j) = biterr(Msg_Dec,msg);
end
Err2(i) = sum(Err)/(Simu_time*Simu_Len);
end
%% 曲线仿真
figure;
semilogy(Pf,Err2,'b-*');
xlabel('channel error rate');
ylabel('BER');
%% 3D图
figure;
[X,Y] = meshgrid(Simu_speed,Pf);
Error = [Err2' Err2' Err2' Err2' Err2' Err2' Err2' Err2' Err2' Err2' Err2' Err2' Err2' Err2' Err2' Err2' Err2' Err2' Err2' Err2' ];
mesh(X,Y,Error);
xlabel('信道差错概率');
ylabel('仿真速度');
zlabel('误码率');