第15章 离散信道模型 MATLAB 仿真笔记
创始人
2025-05-28 18:47:53
0

本篇文章是《通信系统仿真原理与无线应用》这本书的学习笔记,仅作个人学习使用。

文章目录

      • 15.3.1 两状态模型
      • 15.3.4 平稳性
      • 15.3.5 马尔可夫模型仿真

对于有记忆信道,最常用的模型是离散时间的有限状态马尔可夫模型。马尔可夫模型得到广泛应用有几方面的原因。

这类模型易干分析处理,在统计方面的文献中已建立了完备的理论,并且它们已经被成功地应用千解决各种类型的重要通信问题。马尔可夫模型一直被用来建立英文文本之类的离散信源模型,(在一段典型的英文文章中,出现的一列英语字母可以用一个马尔可夫序列来建模)。

15.3.1 两状态模型

在这里插入图片描述

为了准备讨论马尔可夫通道模型,先来考虑一个衰落信道。在这个衰落信道中,有一部分时间内,接收信号的强度在可接受的性能阖值之上,而在深度衰落时会处千阖值之下。如果我们只对“在阖值之上”还是“在阖值之下” 的情况感兴趣,那么我们可以将信道建模为处千如图15-5所示的两个状态之一。在图15-5 中,有一个好状态 ggg, 其系统性能为可接受的状态(PE<10−3P_{E}<10^{-3}PE​<10−3 ),另一个是坏状态 bbb , 其接收信号很弱,以至千差错概率高得不可接受(即 PE>10−3P_{E}>10^{-3}PE​>10−3)。

因此,在如图15-5所示的简单两状态模型中,状态可用如下集合表示

S={g,b}(5)S=\{g , b\}\tag5S={g,b}(5)

随着时间的推进,信道可能会从好状态转移到坏状态的, 也可能从坏状态转移到好状态, 转移的速率和在某一个状态的驻留时间都将取决于衰落过程的时间相关性。

令 St+1S_{t+1}St+1​ 和 StS_tSt​ ,分别表示信道在时刻 t+1 和时刻 t 时的状态。( 注意 t + 1 表示比 t 大一个时间增量的时刻,而不是比 t 大 1s 的时刻,所以 t 可看作离散时间序数。)使用这个记号,我们定义四个转移概率为

agg(t)=Pr⁡{St+1=g∣St=g}agb(t)=Pr⁡{St+1=b∣St=g}abg(t)=Pr⁡{St+1=g∣St=b}abb(t)=Pr⁡{St+1=b∣St=b}\begin{array}{c} a_{g g}(t)=\operatorname{Pr}\left\{S_{t+1}=g \mid S_{t}=g\right\} \\ a_{g b}(t)=\operatorname{Pr}\left\{S_{t+1}=b \mid S_{t}=g\right\} \\ a_{b g}(t)=\operatorname{Pr}\left\{S_{t+1}=g \mid S_{t}=b\right\} \\ a_{b b}(t)=\operatorname{Pr}\left\{S_{t+1}=b \mid S_{t}=b\right\} \end{array}agg​(t)=Pr{St+1​=g∣St​=g}agb​(t)=Pr{St+1​=b∣St​=g}abg​(t)=Pr{St+1​=g∣St​=b}abb​(t)=Pr{St+1​=b∣St​=b}​

这些转移概率可以用如下状态转移矩阵表示

A(t)=[agg(t)agb(t)abg(t)abb(t)]A(t)=\left[\begin{array}{ll} a_{g g}(t) & a_{g b}(t) \\ a_{b g}(t) & a_{b b}(t) \end{array}\right]A(t)=[agg​(t)abg​(t)​agb​(t)abb​(t)​]

注意,由千我们考虑的是两状态模型,给定状态 St=gS_{t}=gSt​=g 必定有 St+1=gS_{t+1}=gSt+1​=g (信道保持在好状态)或 St+1=bS_{t+1}=bSt+1​=b(信道转移到坏状态),因此,状态转移矩阵每一行的和都必为1 。两状态模型的状态转移图如图15-6所示。

在这里插入图片描述
在下面的部分,我们将假定信道模型是静态的,因此状态转移矩阵 A(t)A(t)A(t) 是固定的,即 A(t)=AA(t) =AA(t)=A。然而, 如果仿真运行中初始状态概率分布 Π0\Pi_{0}Π0​ 不同于稳态分布,那就需要一段时间来使概率分布演化到稳态值 Πss\Pi_{ss}Πss​。我们关心的是模型处于给定状态下的概率,定义 Πt\Pi_{t}Πt​,为 ttt 时刻的状态概率分布,具体而言,有
Πt=[πt,gπt,b]\Pi_{t}=\left[\begin{array}{ll} \pi_{t, g} & \pi_{t, b} \end{array}\right]Πt​=[πt,g​​πt,b​​]

式中,πt,g\pi_{t, g}πt,g​ 和 πt,b\pi_{t, b}πt,b​ 分别表示在 ttt 时刻信道处于好状态或坏状态的概率。通过定义状态转移矩阵,在时刻 t+1t+ 1t+1 的状态分布为
Πt+1=ΠtA(9)\Pi_{t+1}=\Pi_{t} A\tag9Πt+1​=Πt​A(9)

类似地,在时刻 t+2t + 2t+2 时的状态分布是

Πt+2=Πt+1A=(ΠtA)A=ΠtA2\Pi_{t+2}=\Pi_{t+1} A=\left(\Pi_{t} A\right) A=\Pi_{t} A^{2}Πt+2​=Πt+1​A=(Πt​A)A=Πt​A2

因此, 一般地有

Πt+k=ΠtAk(11)\Pi_{t+k}=\Pi_{t} A^{k}\tag{11}Πt+k​=Πt​Ak(11)

式中, AkA^kAk 代表 kkk 步转移矩阵。

大多数情况下(但不是所有情况下),随时间的推进,马尔可夫过程都会演化到一个稳态概率分布。假定对干足够大的时间 ttt 和任意的 kkk, 马尔可夫过程收敛到一个稳态分布 Πt+k=Πt\Pi_{t+k}=\Pi_{t}Πt+k​=Πt​,则对任意 kkk, 有下式

Πss=ΠssAk=[πgπb](12)\Pi_{s s}=\Pi_{s s} A^{k}=\left[\begin{array}{ll} \pi_{g} & \pi_{b} \end{array}\right]\tag{12}Πss​=Πss​Ak=[πg​​πb​​](12)

例15-1 作为一个简单的例子,令
A=[0.980.020.050.95]A=\left[\begin{array}{ll} 0.98 & 0.02 \\ 0.05 & 0.95 \end{array}\right] A=[0.980.05​0.020.95​]
初始状态分布为
Π0=[0.500.50]\Pi_{0}=\left[\begin{array}{ll} 0.50 & 0.50 \end{array}\right] Π0​=[0.50​0.50​]
下面的MATLAB程序说明了从 Π0\Pi_0Π0​ 到 Πss\Pi_{ss}Πss​ 的收敛过程:

% File: c15_MMtransient.m
% Software given here is to accompany the textbook: W.H. Tranter, 
% K.S. Shanmugan, T.S. Rappaport, and K.S. Kosbar, Principles of 
% Communication Systems Simulation with Wireless Applications, 
% Prentice Hall PTR, 2004.
%
N = 100;
pie = zeros(N,2);
A = [0.98 0.02; 0.05 0.95];
pie(1,:) = [0.50 0.50];
for k=2:Npie(k,:) = pie(k-1,:)*A;
end
kk = 1:N;
plot(kk,pie(:,1),'k-',kk,pie(:,2),'k:')
xlabel('Iteration')
ylabel('Probability')
text1 = ['The steady-state probabilities are ',...num2str(pie(N,1)),' and ' ,num2str(pie(N,2)),'.'];
legend('State 1','State 2')
disp(text1)
disp(' ')
disp('The value of A^N is'); A^N
% End of script file.

执行程序得到如下结果

>> c15_MMtransient
The steady-state probabilities are 0.71412 and 0.28588.

The value of A^N is

ans =

0.7145    0.2855
0.7138    0.2862

上述代码较为简单,基本没有什么好解释的,唯一需要注意这里使用了矩阵pie存储马尔可夫模型的状态[πt,gπt,b]\left[\begin{array}{ll} \pi_{t, g} & \pi_{t, b} \end{array}\right][πt,g​​πt,b​​]。最后使用了语句plot(kk,pie(:,1),'k-',kk,pie(:,2),'k:')来绘制逐渐收敛的信道状态。

在这里插入图片描述

15.3.4 平稳性

因为在建模倌道模拟部分时一般会假定平稳性,因此在离散信道的马尔可夫模型中常常也假定平稳性。平稳性意味着信道模型的参数,即概率Πt,i\Pi_{t,i}Πt,i​、aij(t)a_{ij}(t)aij​(t)和bi(ek)b_i(e_k)bi​(ek​) 跟时间无关。在这种情况下,我们有

Pr⁡[St+1=i]=Πi=∑k=1NPr⁡[St=k]Pr⁡[St+1=i∣St=k]=∑k=1Nπkaki,i=1,⋯,N\operatorname{Pr}\left[S_{t+1}=i\right]=\Pi_{i}=\sum_{k=1}^{N} \operatorname{Pr}\left[S_{t}=k\right] \operatorname{Pr}\left[S_{t+1}=i \mid S_{t}=k\right]=\sum_{k=1}^{N} \pi_{k} a_{k i}, \quad i=1, \cdots, NPr[St+1​=i]=Πi​=k=1∑N​Pr[St​=k]Pr[St+1​=i∣St​=k]=k=1∑N​πk​aki​,i=1,⋯,N
式中 akia_{ki}aki​ 是状态转移矩阵第 iii 列的元素

A=[a11a12⋯a1i⋯a1Na21a22⋯a2i⋯a2N⋮⋮⋱⋮⋱⋮aN1aN2⋯aNi⋯aNN]A=\left[\begin{array}{cccccc} a_{11} & a_{12} & \cdots & a_{1 i} & \cdots & a_{1 N} \\ a_{21} & a_{22} & \cdots & a_{2 i} & \cdots & a_{2 N} \\ \vdots & \vdots & \ddots & \vdots & \ddots & \vdots \\ a_{N 1} & a_{N 2} & \cdots & a_{N i} & \cdots & a_{N N} \end{array}\right]A=​a11​a21​⋮aN1​​a12​a22​⋮aN2​​⋯⋯⋱⋯​a1i​a2i​⋮aNi​​⋯⋯⋱⋯​a1N​a2N​⋮aNN​​

而 Πk\Pi_{k}Πk​ 是状态概率分布向量的元素
Π=[π1π2⋯πN]\Pi=\left[\begin{array}{llll} \pi_{1} & \pi_{2} & \cdots & \pi_{N} \end{array}\right]Π=[π1​​π2​​⋯​πN​​]

跟两状态模型的情况一样, n 步转移矩阵由 AnA^nAn 给出。正如例15-1 对两状态模型所作的阐述,式 (15-34) 及其约束

∑i=1Nπi=1\sum_{i=1}^{N} \pi_{i}=1i=1∑N​πi​=1

意味状态概率 πi\pi_{i}πi​ 可由转移概率 aija_{ij}aij​ 唯一确定。因此马尔可夫模型完全由状态转移概率矩阵 AAA 和 BBB 确定,其中矩阵 BBB 是前面所讨论的输人-输出符号转移(即差错)概率:

B=[b11⋯b1N⋮⋱⋮bM1⋯bMN]\boldsymbol{B}=\left[\begin{array}{ccc} b_{11} & \cdots & b_{1 N} \\ \vdots & \ddots & \vdots \\ b_{M 1} & \cdots & b_{M N} \end{array}\right]B=​b11​⋮bM1​​⋯⋱⋯​b1N​⋮bMN​​

15.3.5 马尔可夫模型仿真

一旦推导出了离散马尔可夫模型,对模型进行仿真就相对容易。

给定模型处在状态 kkk, 转移概率由状态转移矩阵 AAA 的第 kkk 行定义,矩阵 AAA 的第 kkk 行可用向量 AkA_kAk​ 给
出,其中

Ak=[ak1ak2⋯akiak,i+1⋯akN]A_{k}=\left[\begin{array}{lllllll} a_{k 1} & a_{k 2} & \cdots & a_{k i} & a_{k, i+1} & \cdots & a_{k N} \end{array}\right]Ak​=[ak1​​ak2​​⋯​aki​​ak,i+1​​⋯​akN​​]

AkA_kAk​ 的累积概率记作 βk\beta_kβk​, 由下式给出

βk=∑j=1kakj\beta_{k}=\sum_{j=1}^{k} a_{k j}βk​=j=1∑k​akj​

注意, MATLAB 的库函数cumsum将向量 AkA_kAk​ 映射到具有元素 βk\beta_kβk​ 的向量。定义从状态 kkk 转移到状
态 iii 的概率为 akia_{k i}aki​ ,其值由下式给出:

aki=βi−βi−1a_{k i}=\beta_{i}-\beta_{i-1}aki​=βi​−βi−1​

这个概率如图15-8(a) 中的阴影面积所示。

在这里插入图片描述
在确定了新的状态之后,下一步是决定在新状态是否有差错发生。为了完成这项工作,我们将第二个随机变量 U2U_2U2​ 与阈值 γ\gammaγ 比较,如图15-8(b) 所示。正确判决的概率是 Pr{U2<γ}Pr\{ U_2<\gamma\}Pr{U2​<γ} ,而错误判决的概率是 Pr{U2>γ}Pr\{ U_2>\gamma\}Pr{U2​>γ},如图15-8(b) 的阴影区域所示。由于当前状态是 iii, γ\gammaγ 的值由状态观察矩阵 BBB 第 1 行第 iii 列的元素 b1,ib_{1,i}b1,i​ 给出。

实现仿真过程的MATLAB代码如下:

%A是状态转移矩阵
u1=rand(1);
cum_sum=[0 cumsum(A(state,:))];
for i=i:total_statesif u1>cum_sum(i)&u1B(1,state)out(t)=1;
end

例15-3 在这个例子中, 产生长为 N=20000N=20 000N=20000 的二进制序列来表示信道上的误码,用一个三状态马尔可夫模型来产生这个差错序列。如果序列中给定元素是二进制 ”1" ,则在给定元素对应的位置记录一个信道误码,二进制 “0” 则表示对应的位置没有发生差错。

我们假定三个状态中的任意一个都可能发生差错。我们具体地作以下假定:

Pr⁡{E∣S1}=0.0010Pr⁡{E∣S2}=0.0500Pr⁡{E∣S3}=0.0100\begin{array}{l} \operatorname{Pr}\left\{E \mid S_{1}\right\}=0.0010 \\ \operatorname{Pr}\left\{E \mid S_{2}\right\}=0.0500\\ \operatorname{Pr}\left\{E \mid S_{3}\right\}=0.0100 \end{array}Pr{E∣S1​}=0.0010Pr{E∣S2​}=0.0500Pr{E∣S3​}=0.0100​

它对应了差错概率矩阵,其中 BBB 的第 1 列即为状态 1

B=[0.99900.95000.99000.00100.05000.0100]B=\left[\begin{array}{lll} 0.9990 & 0.9500 & 0.9900 \\ 0.0010 & 0.0500 & 0.0100 \end{array}\right]B=[0.99900.0010​0.95000.0500​0.99000.0100​]

假设马尔可夫模型的状态转移矩阵为
A=[0.800.100.100.200.600.200.020.080.90]A=\left[\begin{array}{lll} 0.80 & 0.10 & 0.10 \\ 0.20 & 0.60 & 0.20 \\ 0.02 & 0.08 & 0.90 \end{array}\right]A=​0.800.200.02​0.100.600.08​0.100.200.90​

我们假设模型最初处千状态 1 。

% File: c15_errvector.m
% Software given here is to accompany the textbook: W.H. Tranter, 
% K.S. Shanmugan, T.S. Rappaport, and K.S. Kosbar, Principles of 
% Communication Systems Simulation with Wireless Applications, 
% Prentice Hall PTR, 2004.
%
disp(' ')
disp('Default values are:')
N = 20000											% default N			
A = [0.8 0.1 0.1; 0.2 0.6 0.2; 0.02 0.08 0.90]		% default A
B = [0.999 0.95 0.99; 0.001 0.05 0.01]				% default B
disp(' ')
disp('Accept default values?')
dtype = input('Enter y for yes or n for no  > ','s');
if dtype == 'n'N = input('   Enter N, the number of points to be generated > ');A = input('   Enter A, the state transition matrix > ');B = input('   Enter B, the error distribution matrx > ');
end
state = 1;							            % initial state
total_states = size(A,1);
out = zeros(1,N);					            % initialize error vector
state_seq = zeros(1,N);			                % initialize state sequence
h = waitbar(0,'Calculating Error Vector');
%u2 = rand(1);	 					            % get random number
if u2>B(1,state)					            % test for errorout(1) = 1;						            % record error
end
state_seq(1) = state;			                % record state
for t=2:Nu1 = rand(1);					            % get random numbercum_sum = [0 cumsum(A(state,:))];for i=1:total_states			                % loop to determine new stateif u1>=cum_sum(i) & u1B(1,state)out(t) = 1;					            % record errorendwaitbar(t/N)
end
close(h)
% End of script file.

h = waitbar(0,'Calculating Error Vector');

生成一个进度条窗口,0 表示刚开始时候,进度条上显示英文 Calculating Error Vector

这行代码创建了一个进度条(progress bar),用于显示代码运行的进度。它的第一个参数是当前进度,这里是0,第二个参数是进度条显示的文本。在这里,文本是“Calculating Error Vector”。在代码中的循环中,通过调用 waitbar 函数并将当前进度作为参数传递给它来更新进度条的进度。当循环结束时,通过调用 close 函数关闭进度条。这样可以方便地显示代码的运行进度,并且用户可以随时中止程序的运行。

waitbar 函数中,第一个参数是一个标量,表示当前的进度百分比,取值范围是 0 到 1。在这里,初始值是 0,因为代码还没有开始运行。随着代码的执行,循环中的语句逐步执行,waitbar 函数也会被调用多次,每次更新进度条的进度。waitbar(t/N)在每次调用 waitbar 函数时,第一个参数都会更新为当前的进度百分比。最终,当代码执行完成后,进度条的进度会更新为 100%,close(h)。因此,0 的用法是为了初始化进度条,表示代码还没有开始执行,进度为 0。

附录 A 给出了用来产生差错序列的 MATLAB 程序c15_errvector.m 。程序产生两个输出,一个是差错向量 out,它给出了 N 个传输序列中的差错位置,另一个是状态序列向量 state_seq, 它给出了状态转移的细节。模型处千给定状态下的概率可以由状态序列向量计算出来,仿真差错概率可以从差错向量计算出来。


% File: c15_hmmtest.m
% Software given here is to accompany the textbook: W.H. Tranter, 
% K.S. Shanmugan, T.S. Rappaport, and K.S. Kosbar, Principles of 
% Communication Systems Simulation with Wireless Applications, 
% Prentice Hall PTR, 2004.
%
pe = sum(out)/N;%pe表示误码率
state_sum = zeros(1,total_states);
for k=1:Nif state_seq(k)==1state_sum(1)=state_sum(1)+1;end   if state_seq(k)==2state_sum(2)=state_sum(2)+1;endif state_seq(k)==3state_sum(3)=state_sum(3)+1;end
end   
a = ['The probability of State 1 is ',num2str(state_sum(1)/N),'.'];
b = ['The probability of State 2 is ',num2str(state_sum(2)/N),'.'];
c = ['The probability of State 3 is ',num2str(state_sum(3)/N),'.'];
d = ['The error probability is ',num2str(pe),'.'];
disp('Simulation results:')
disp(a)			% display probability of state 1
disp(b)			% display probability of state 2
disp(c)			% display probability of state 3
disp(d)			% display error probability
% End script file.   

总结一下,c15_errvector.m 实现了对差错向量和状态序列向量的仿真,c15_hmmtest t.m 实现了对差错概率以及每种状态概率的计算,如图。

相关内容

热门资讯

主题活动策划 主题活动策划15篇主题活动策划1  泼水节是傣族人民最盛大的节日,傣语称“桑康比迈”,意为六月(傣历...
运动会活动策划方案 运动会活动策划方案(精选6篇)  为确保活动顺利开展,时常需要预先开展活动方案准备工作,活动方案是阐...
真相永远只有一个“推理之绊”... 真相永远只有一个“推理之绊”系列活动策划  一、活动背景:  “真相永远只有一个”,“ 除所有不可能...
学校总务主任述职报告   述职报告是各级机关、企事业单位和社会团体的工作人员向本单位的组织部门、上级领导机关或本单位员工陈...
万圣节朋友圈必备简短文案 万圣节朋友圈必备简短文案  在日常学习、工作或生活中,越来越多人会在闲暇时发表文案,文案用以展现自己...
母亲节发朋友圈的文案 关于母亲节发朋友圈的文案(精选390句)  随着社交平台的兴起,越来越多人青睐于在社交平台上发表文案...
萝岗区及黄埔区公交线网规划方... 萝岗区及黄埔区公交线网规划方案起止点经行路段萝岗演艺中心-联和开创大道、香雪路、水西路、开创大道、广...
天津工程职业技术学院就业质量... 天津工程职业技术学院就业质量年度报告  一、学院概况  天津工程职业技术学院是一所以工科为主的全日制...
酒店圣诞晚会活动策划方案 酒店圣诞晚会活动策划方案  为了确保事情或工作能无误进行,预先制定方案是必不可少的,方案的内容多是上...
商务谈判策划书 商务谈判策划书  一、什么是策划书  策划书即对某个未来的活动或者事件进行策划,并展现给读者的文本;...
新生迎新策划方案 2021新生迎新策划方案范文  为了确保我们的努力取得实效,时常需要预先开展方案准备工作,方案是从目...
有创意的生日策划方案 有创意的生日策划方案大全(通用8篇)  生日活动的举办,可以促进公司职员工的内部凝聚力和亲和力,加强...
大学生村官工作总结报告 2018年大学生村官工作总结报告范文  从20xx年11月16日来龙阳镇店子村工作,不觉间已过一月之...
实训报告 实训报告范文合集(通用12篇)  实训报告是指包含实训目的、实训环境、实训原理、实训过程、实训结果、...
自我成长的分析报告 自我成长的分析报告(精选11篇)  在现在社会,报告使用的频率越来越高,不同的报告内容同样也是不同的...
企业账户服务自查报告 企业账户服务自查报告范文  时间稍纵即逝,辛苦的工作已经告一段落了,回顾这一段时间存在的工作问题,是...
对员工工作评价 对员工工作评价范文对员工工作评价范文1对员工工作评价范文1.普通员工(不是太聪明)2.格外出色(目前...
青少年心理健康现状调查报告 青少年心理健康现状调查报告(通用16篇)  当想知道某一情况、某一事件的来龙去脉时,我们有必要弄明白...
市场分析报告怎么写 市场分析报告怎么写3篇  在现实生活中,报告使用的次数愈发增长,报告具有成文事后性的特点。写起报告来...
超市临时工社会实践报告 超市临时工社会实践报告  在寒暑假的时候有很多的学生都会在超市开展社会实践,那么超市社会实践报告怎么...