本篇文章是《通信系统仿真原理与无线应用》这本书的学习笔记,仅作个人学习使用。
对于有记忆信道,最常用的模型是离散时间的有限状态马尔可夫模型。马尔可夫模型得到广泛应用有几方面的原因。
这类模型易干分析处理,在统计方面的文献中已建立了完备的理论,并且它们已经被成功地应用千解决各种类型的重要通信问题。马尔可夫模型一直被用来建立英文文本之类的离散信源模型,(在一段典型的英文文章中,出现的一列英语字母可以用一个马尔可夫序列来建模)。
为了准备讨论马尔可夫通道模型,先来考虑一个衰落信道。在这个衰落信道中,有一部分时间内,接收信号的强度在可接受的性能阖值之上,而在深度衰落时会处千阖值之下。如果我们只对“在阖值之上”还是“在阖值之下” 的情况感兴趣,那么我们可以将信道建模为处千如图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=ΠtA(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+1A=(ΠtA)A=ΠtA2
因此, 一般地有
Πt+k=ΠtAk(11)\Pi_{t+k}=\Pi_{t} A^{k}\tag{11}Πt+k=ΠtAk(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=ΠssAk=[π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.050.020.95]
初始状态分布为
Π0=[0.500.50]\Pi_{0}=\left[\begin{array}{ll} 0.50 & 0.50 \end{array}\right] Π0=[0.500.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:')
来绘制逐渐收敛的信道状态。
因为在建模倌道模拟部分时一般会假定平稳性,因此在离散信道的马尔可夫模型中常常也假定平稳性。平稳性意味着信道模型的参数,即概率Π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∑NPr[St=k]Pr[St+1=i∣St=k]=k=1∑Nπkaki,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=a11a21⋮aN1a12a22⋮aN2⋯⋯⋱⋯a1ia2i⋮aNi⋯⋯⋱⋯a1Na2N⋮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
一旦推导出了离散马尔可夫模型,对模型进行仿真就相对容易。
给定模型处在状态 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=[ak1ak2⋯akiak,i+1⋯akN]
AkA_kAk 的累积概率记作 βk\beta_kβk, 由下式给出
βk=∑j=1kakj\beta_{k}=\sum_{j=1}^{k} a_{k j}βk=j=1∑kakj
注意, 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.00100.95000.05000.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.020.100.600.080.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 实现了对差错概率以及每种状态概率的计算,如图。
上一篇: 幼儿园数学测试题