均匀背景下常用恒虚警检测推导及比较(二):附录+代码验证

各均衡器的主体理论推导过程见《均匀背景下常用恒虚警检测推导及比较(一):理论推导部分

附录

(1)CA-CFAR中间推导过程

已知 f x i ( x i ) = λ 0 e − λ 0 x i , z = 1 N ∑ i = 1 N x i f_{x_i}(x_i)=\lambda_0 e^{-\lambda_0 x_i},z=\frac{1}{N}\sum_{i=1}^N{x_i} fxi(xi)=λ0eλ0xi,z=N1i=1Nxi,求 z z z的概率密度函数 f z ( z ) f_z{(z)} fz(z)

f x i ( x i ) f_{x_i}(x_i) fxi(xi)对应的特征函数计算如下:
ϕ x i ( t ) = ∫ 0 ∞ e i t x i f x i ( x i ) d x i = λ 0 ∫ 0 ∞ e ( i t − λ 0 ) x i d x i = ( 1 − i t λ 0 ) − 1 = λ 0 λ 0 − i t (1) \phi_{x_i}(t)=\int_0^{\infty}{e^{i t x_i}f_{x_i}(x_i)dx_i}=\lambda_0\int_0^{\infty}{e^{(it-\lambda_0)x_i}dx_i}=(1-\frac{it}{\lambda_0})^{-1}=\frac{\lambda_0}{\lambda_0-it}\tag{1} ϕxi(t)=0eitxifxi(xi)dxi=λ00e(itλ0)xidxi=(1λ0it)1=λ0itλ0(1)
z ′ = ∑ i = 1 N x i z'=\sum_{i=1}^N{x_i} z=i=1Nxi,则 f z ′ ( z ′ ) f_{z'}(z') fz(z)对应的特征函数为 ϕ z ′ ( t ) = ϕ x i N ( t ) = ( λ 0 λ 0 − i t ) N \phi_{z'}(t)=\phi_{x_i}^N(t)=(\frac{\lambda_0}{\lambda_0-it})^N ϕz(t)=ϕxiN(t)=(λ0itλ0)N。所以
f z ′ ( z ′ ) = 1 2 π ∫ − ∞ ∞ ϕ z ′ ( t ) e − i t z ′ d t = 1 2 π ∫ − ∞ ∞ ( λ 0 λ 0 − i t ) N e − i t z ′ d t (2) f_{z'}(z')=\frac{1}{2\pi}\int_{-\infty}^{\infty}{\phi_{z'}(t)e^{-itz'}dt}=\frac{1}{2\pi}\int_{-\infty}^{\infty}{(\frac{\lambda_0}{\lambda_0-it})^N e^{-itz'}dt}\tag{2} fz(z)=2π1ϕz(t)eitzdt=2π1(λ0itλ0)Neitzdt(2)
上面的积分式并不好求,可以通过查找积分表获得结果。另外地,可以利用一些现有结论得到想要的结果。若随机变量 X X X服从Gamma分布,记为 X ∽ G ( n , λ ) X \backsim {\rm G}(n,\lambda) XG(n,λ),则该随机变量的概率密度函数可以表示为
X ∽ G ( n , λ ) : f ( x ) = λ n Γ ( n ) x n − 1 e − λ x (3) X \backsim {\rm G}(n,\lambda):f(x)=\frac{\lambda^n}{\Gamma(n)}x^{n-1}e^{-\lambda x}\tag{3} XG(n,λ):f(x)=Γ(n)λnxn1eλx(3)
显然指数分布是当 n = 1 n=1 n=1时特殊Gamma分布,即若 X ∽ E ( λ ) → X ∽ G ( 1 , λ ) X \backsim E(\lambda) \rightarrow X \backsim {\rm G}(1,\lambda) XE(λ)XG(1,λ)。当 n n n为整数时 Γ ( n ) = ( n − 1 ) ! \Gamma(n)=(n-1)! Γ(n)=(n1)!。指数分布和Gamma分布具有如下关系:若 X 1 , X 2 , . . . , X n ∽ E ( λ ) X_1,X_2,...,X_n \backsim E(\lambda) X1,X2,...,XnE(λ),则 z = ∑ i = 1 n x i ∽ G ( n , λ ) z=\sum_{i=1}^n{x_i} \backsim {\rm G}(n,\lambda) z=i=1nxiG(n,λ)

利用上述结论,显然有(2)中 z ′ ∽ G ( N , λ 0 ) z' \backsim {\rm G}(N,\lambda_0) zG(N,λ0),所以
z ′ ∽ G ( N , λ 0 ) : f z ′ ( z ′ ) = λ 0 N Γ ( N ) ( z ′ ) N − 1 e − λ 0 z ′ (4) z' \backsim {\rm G}(N,\lambda_0):f_{z'}(z')=\frac{\lambda_0^N}{\Gamma(N)}(z')^{N-1}e^{-\lambda_0 z'}\tag{4} zG(N,λ0):fz(z)=Γ(N)λ0N(z)N1eλ0z(4)
由于 z = 1 N z ′ z=\frac{1}{N}z' z=N1z,所以 z ∽ G ( N , N λ 0 ) z \backsim {\rm G}(N,N\lambda_0) zG(N,Nλ0),所以 z z z的概率密度函数可以表示为
z ∽ G ( N , N λ 0 ) : f z ( z ) = ( N λ 0 ) N Γ ( N ) z N − 1 e − N λ 0 z (5) z \backsim {\rm G}(N,N\lambda_0):f_z(z)=\frac{(N\lambda_0)^N}{\Gamma(N)}z^{N-1}e^{-N\lambda_0 z}\tag{5} zG(N,Nλ0):fz(z)=Γ(N)(Nλ0)NzN1eNλ0z(5)
(2)Gamma分布的矩母函数

X ∽ G ( n , λ ) , ( n , λ > 0 ) X \backsim {\rm G}(n,\lambda),(n,\lambda > 0) XG(n,λ),(n,λ>0),则 f ( x ) = λ n Γ ( n ) x n − 1 e − λ x f(x)=\frac{\lambda^n}{\Gamma(n)}x^{n-1}e^{-\lambda x} f(x)=Γ(n)λnxn1eλx,其中 Γ ( n ) = ∫ 0 ∞ t n − 1 e − t d t , n > 0 \Gamma(n)=\int_0^\infty{t^{n-1}e^{-t}dt},n>0 Γ(n)=0tn1etdt,n>0,则其矩母函数可以表示为
M ( t ) = E [ e − t x ] = ∫ 0 ∞ e − t x f ( x ) d x = ∫ 0 ∞ λ n Γ ( n ) x n − 1 e − λ x e − t x d x = λ n Γ ( n ) ∫ 0 ∞ x n − 1 e ( t + λ ) x d x ( t + λ ) x = − v → 1 Γ ( n ) ( λ λ + t ) n ∫ 0 ∞ v n − 1 e − v d v = ( λ λ + t ) n = ( 1 + t λ ) − n (6) \begin{equation} \begin{aligned} M(t)={\rm E}[e^{-tx}]=\int_0^\infty{e^{-tx}f(x)dx}=\int_0^\infty{\frac{\lambda^n}{\Gamma(n)}x^{n-1}e^{-\lambda x}e^{-tx}dx}=\frac{\lambda^n}{\Gamma(n)}\int_0^\infty{x^{n-1}e^{(t+\lambda)x}dx} \\ \underrightarrow{(t+\lambda)x=-v} \quad \frac{1}{\Gamma(n)}(\frac{\lambda}{\lambda+t})^n \int_0^\infty{v^{n-1}e^{-v}dv}=(\frac{\lambda}{\lambda+t})^n=(1+\frac{t}{\lambda})^{-n} \end{aligned} \end{equation}\tag{6} M(t)=E[etx]=0etxf(x)dx=0Γ(n)λnxn1eλxetxdx=Γ(n)λn0xn1e(t+λ)xdx (t+λ)x=vΓ(n)1(λ+tλ)n0vn1evdv=(λ+tλ)n=(1+λt)n(6)
(3)不完全Gamma函数的相关常用关系

原始Gamma、上不完全Gamma函数及下不完全Gamma函数的定义分别如下所示
Γ ( n ) = ∫ 0 ∞ t n − 1 e − t d t Γ ( n , x ) = ∫ x ∞ t n − 1 e − t d t γ ( n , x ) = ∫ 0 x t n − 1 e − t d t (1) \Gamma(n)=\int_0^\infty{t^{n-1}e^{-t}dt}\\ \Gamma(n,x)=\int_x^\infty{t^{n-1}e^{-t}dt}\\ \gamma(n,x)=\int_0^x{t^{n-1}e^{-t}dt}\tag{1} Γ(n)=0tn1etdtΓ(n,x)=xtn1etdtγ(n,x)=0xtn1etdt(1)
他们三者满足下述关系
γ ( n , λ ) + Γ ( n , λ ) = Γ ( n ) (2) \gamma(n,\lambda)+\Gamma(n,\lambda)=\Gamma(n)\tag{2} γ(n,λ)+Γ(n,λ)=Γ(n)(2)
n n n为整数时, Γ ( n , λ ) \Gamma(n,\lambda) Γ(n,λ)可以表示为 Γ ( n , λ ) = ( n − 1 ) ! e − λ ∑ k = 0 n − 1 λ k k ! \Gamma(n,\lambda)=(n-1)!e^{-\lambda}\sum_{k=0}^{n-1}{\frac{\lambda^k}{k!}} Γ(n,λ)=(n1)!eλk=0n1k!λk Γ ( n ) = ( n − 1 ) ! \Gamma(n)=(n-1)! Γ(n)=(n1)!,所以 γ ( n , λ ) = ( n − 1 ) ! ( 1 − e − λ ∑ k = 0 n − 1 λ k k ! ) \gamma(n,\lambda)=(n-1)!(1-e^{-\lambda}\sum_{k=0}^{n-1}{\frac{\lambda^k}{k!}}) γ(n,λ)=(n1)!(1eλk=0n1k!λk)

同时下不完全Gamma函数可用级数展开进行表示
γ ( n , λ ) = ∑ k = 0 ∞ λ n e − λ λ k s ( s + 1 ) . . . ( s + k ) = λ n Γ ( n ) e − λ ∑ k = 0 ∞ λ k Γ ( n + k + 1 ) (3) \gamma(n,\lambda)=\sum_{k=0}^\infty{\frac{\lambda^n e^{-\lambda} \lambda^k}{s(s+1)...(s+k)}}=\lambda^n \Gamma(n) e^{-\lambda} \sum_{k=0}^\infty{\frac{\lambda^k}{\Gamma(n+k+1)}}\tag{3} γ(n,λ)=k=0s(s+1)...(s+k)λneλλk=λnΓ(n)eλk=0Γ(n+k+1)λk(3)

(4)Gamma分布的分布函数

X ∽ G ( n , λ ) , ( n , λ > 0 ) X \backsim {\rm G}(n,\lambda),(n,\lambda > 0) XG(n,λ),(n,λ>0),则 f ( x ) = λ n Γ ( n ) x n − 1 e − λ x f(x)=\frac{\lambda^n}{\Gamma(n)}x^{n-1}e^{-\lambda x} f(x)=Γ(n)λnxn1eλx,其中 Γ ( n ) = ∫ 0 ∞ t n − 1 e − t d t , n > 0 \Gamma(n)=\int_0^\infty{t^{n-1}e^{-t}dt},n>0 Γ(n)=0tn1etdt,n>0,则其分布函数可以表示为
F ( x ) = 1 Γ ( n ) γ ( n , λ x ) = 1 − e − λ x ∑ k = 0 n − 1 ( λ x ) k k ! = e − λ x ∑ k = n ∞ ( λ x ) k k ! (1) F(x)=\frac{1}{\Gamma(n)}\gamma(n,\lambda x)=1-e^{-\lambda x}\sum_{k=0}^{n-1}{\frac{(\lambda x)^k}{k!}}=e^{-\lambda x}\sum_{k=n}^\infty{\frac{(\lambda x)^k}{k!}} \tag{1} F(x)=Γ(n)1γ(n,λx)=1eλxk=0n1k!(λx)k=eλxk=nk!(λx)k(1)
在上面的表达式中 γ ( n , λ x ) \gamma(n,\lambda x) γ(n,λx)表示下不完全Gamma函数,它的表达式可以参考附录(3)。

(5)GO-CFAR中矩母函数 M z ( t ) M_z(t) Mz(t)的求解

在进行推导之前,首先给出如下表达式,后面的推导过程要利用到该结论
∫ 0 b y m e − q y d y = m ! q − ( m + 1 ) [ 1 − ∑ k = 0 m ( y q ) k e − q y / k ! ] b → ∞ → ∫ 0 b y m e − q y d y = m ! q − ( m + 1 ) (1) \int_0^b{y^m e^{-q y}dy}=m! q^{-(m+1)}[1-\sum_{k=0}^m{(y q)^k e^{-q y}/k!}] \quad \underrightarrow{b \rightarrow \infty}\quad \int_0^b{y^m e^{-q y}dy}=m! q^{-(m+1)}\tag{1} 0bymeqydy=m!q(m+1)[1k=0m(yq)keqy/k!] b0bymeqydy=m!q(m+1)(1)
如第四节公式(9)所示, z z z的概率密度函数可以表示为
f z ( z ) = 2 ( N λ 0 / 2 ) N / 2 Γ ( N / 2 ) z N / 2 − 1 e − N λ 0 z / 2 [ 1 − e − N λ 0 z / 2 ∑ k = 0 N / 2 − 1 ( N λ 0 z / 2 ) k k ! ] (2) f_z(z)=2\frac{(N\lambda_0/2)^{N/2}}{\Gamma(N/2)}z^{N/2-1}e^{-N\lambda_0 z/2}[1-e^{-N\lambda_0 z/2}\sum_{k=0}^{N/2-1}{\frac{(N\lambda_0 z/2)^k}{k!}}]\tag{2} fz(z)=2Γ(N/2)(Nλ0/2)N/2zN/21eNλ0z/2[1eNλ0z/2k=0N/21k!(Nλ0z/2)k](2)
为了表述简洁,令 n = N / 2 n=N/2 n=N/2,则(1)可以表示为
f z ( z ) = 2 ( n λ 0 ) n Γ ( n ) z n − 1 e − n λ 0 z [ 1 − e − n λ 0 z ∑ k = 0 n − 1 ( n λ 0 z ) k k ! ] (3) f_z(z)=2\frac{(n\lambda_0)^n}{\Gamma(n)}z^{n-1}e^{-n\lambda_0 z}[1-e^{-n\lambda_0 z}\sum_{k=0}^{n-1}{\frac{(n\lambda_0 z)^k}{k!}}]\tag{3} fz(z)=2Γ(n)(nλ0)nzn1enλ0z[1enλ0zk=0n1k!(nλ0z)k](3)

M z ( t ) = ∫ 0 ∞ f z ( z ) e − t z d z = 2 ( n λ 0 ) n Γ ( n ) ∫ 0 ∞ z n − 1 e − n λ 0 z e − t z d z − 2 ( n λ 0 ) n Γ ( n ) ∫ 0 ∞ z n − 1 e − 2 n λ 0 z e − t z ∑ k = 0 n − 1 ( n λ 0 z ) k k ! d z (4) \begin{equation} \begin{aligned} {\rm M}_z(t)&=\int_0^\infty{f_z(z)e^{-tz}dz}\\ &=2\frac{(n\lambda_0)^n}{\Gamma(n)} \int_0^\infty{z^{n-1}e^{-n\lambda_0 z} e^{-tz}dz}-2\frac{(n\lambda_0)^n}{\Gamma(n)}\int_0^\infty{z^{n-1}e^{-2n\lambda_0 z} e^{-tz}\sum_{k=0}^{n-1}{\frac{(n\lambda_0 z)^k}{k!}}dz} \end{aligned} \end{equation}\tag{4} Mz(t)=0fz(z)etzdz=2Γ(n)(nλ0)n0zn1enλ0zetzdz2Γ(n)(nλ0)n0zn1e2nλ0zetzk=0n1k!(nλ0z)kdz(4)
其中
A = 2 ( n λ 0 ) n Γ ( n ) ∫ 0 ∞ z n − 1 e − n λ 0 z e − t z d z = 2 ( n λ 0 ) n Γ ( n ) ∫ 0 ∞ z n − 1 e − ( n λ 0 + t ) z d z m = n − 1 , q = n λ 0 + t → A = 2 ( n λ 0 ) n Γ ( n ) ∫ 0 ∞ z m e − q z d z = 2 ( n λ 0 ) n Γ ( n ) m ! q − ( m + 1 ) = 2 ( n λ 0 ) n Γ ( n ) ( n − 1 ) ! ( n λ 0 + t ) − n = 2 ( n λ 0 ) n ( n λ 0 + t ) − n (5) \begin{equation} \begin{aligned} A&=2\frac{(n\lambda_0)^n}{\Gamma(n)} \int_0^\infty{z^{n-1}e^{-n\lambda_0 z} e^{-tz}dz}=2\frac{(n\lambda_0)^n}{\Gamma(n)} \int_0^\infty{z^{n-1}e^{-(n\lambda_0+t) z}dz}\\ &\underrightarrow{m=n-1,q=n\lambda_0+t}\\ A&=2\frac{(n\lambda_0)^n}{\Gamma(n)} \int_0^\infty{z^m e^{-qz}dz}=2\frac{(n\lambda_0)^n}{\Gamma(n)}m!q^{-(m+1)}\\ &=2\frac{(n\lambda_0)^n}{\Gamma(n)}(n-1)!(n\lambda_0+t)^{-n}=2(n\lambda_0)^n (n\lambda_0+t)^{-n} \end{aligned} \end{equation}\tag{5} AA=2Γ(n)(nλ0)n0zn1enλ0zetzdz=2Γ(n)(nλ0)n0zn1e(nλ0+t)zdz m=n1,q=nλ0+t=2Γ(n)(nλ0)n0zmeqzdz=2Γ(n)(nλ0)nm!q(m+1)=2Γ(n)(nλ0)n(n1)!(nλ0+t)n=2(nλ0)n(nλ0+t)n(5)

B = 2 ( n λ 0 ) n Γ ( n ) ∫ 0 ∞ z n − 1 e − 2 n λ 0 z e − t z ∑ k = 0 n − 1 ( n λ 0 z ) k k ! d z = 2 ( n λ 0 ) n Γ ( n ) ∑ k = 0 n − 1 [ ( n λ 0 ) k k ! ∫ 0 ∞ z n − 1 + k e − ( 2 n λ 0 + t ) z d z ] m = n − 1 + k , q = 2 n λ 0 + t → B = 2 ( n λ 0 ) n Γ ( n ) ∑ k = 0 n − 1 [ ( n λ 0 ) k k ! ∫ 0 ∞ z m e − q z d z ] = 2 ( n λ 0 ) n Γ ( n ) ∑ k = 0 n − 1 [ ( n λ 0 ) k k ! ( n − 1 + k ) ! ( 2 n λ 0 + t ) − ( n + k ) ] = 2 ( n λ 0 ) n ∑ k = 0 n − 1 ( n − 1 + k k ) ( n λ 0 ) k ( 2 n λ 0 + t ) − ( n + k ) (6) \begin{equation} \begin{aligned} B&=2\frac{(n\lambda_0)^n}{\Gamma(n)}\int_0^\infty{z^{n-1}e^{-2n\lambda_0 z} e^{-tz}\sum_{k=0}^{n-1}{\frac{(n\lambda_0 z)^k}{k!}}dz}=2\frac{(n\lambda_0)^n}{\Gamma(n)} \sum_{k=0}^{n-1}{[\frac{(n\lambda_0)^k}{k!}\int_0^\infty{z^{n-1+k}e^{-(2n\lambda_0+t)z}dz}]}\\ &\underrightarrow{m=n-1+k,q=2n\lambda_0+t}\\ B&=2\frac{(n\lambda_0)^n}{\Gamma(n)} \sum_{k=0}^{n-1}{[\frac{(n\lambda_0)^k}{k!}\int_0^\infty{z^m e^{-qz}dz}]}=2\frac{(n\lambda_0)^n}{\Gamma(n)} \sum_{k=0}^{n-1}{[\frac{(n\lambda_0)^k}{k!}(n-1+k)!(2n\lambda_0+t)^{-(n+k)}]}\\ &=2(n\lambda_0)^n\sum_{k=0}^{n-1}{\begin{pmatrix} n-1+k \\ k \end{pmatrix} (n\lambda_0)^k (2n\lambda_0+t)^{-(n+k)}} \end{aligned} \end{equation}\tag{6} BB=2Γ(n)(nλ0)n0zn1e2nλ0zetzk=0n1k!(nλ0z)kdz=2Γ(n)(nλ0)nk=0n1[k!(nλ0)k0zn1+ke(2nλ0+t)zdz] m=n1+k,q=2nλ0+t=2Γ(n)(nλ0)nk=0n1[k!(nλ0)k0zmeqzdz]=2Γ(n)(nλ0)nk=0n1[k!(nλ0)k(n1+k)!(2nλ0+t)(n+k)]=2(nλ0)nk=0n1(n1+kk)(nλ0)k(2nλ0+t)(n+k)(6)

将(5)(6)代入(4)可得
M z ( t ) = A − B = 2 ( n λ 0 ) n ( n λ 0 + t ) − n − 2 ( n λ 0 ) n ∑ k = 0 n − 1 ( n − 1 + k k ) ( n λ 0 ) k ( 2 n λ 0 + t ) − ( n + k ) (7) {\rm M}_z(t)=A-B=2(n\lambda_0)^n (n\lambda_0+t)^{-n}-2(n\lambda_0)^n\sum_{k=0}^{n-1}{\begin{pmatrix} n-1+k \\ k \end{pmatrix} (n\lambda_0)^k (2n\lambda_0+t)^{-(n+k)}}\tag{7} Mz(t)=AB=2(nλ0)n(nλ0+t)n2(nλ0)nk=0n1(n1+kk)(nλ0)k(2nλ0+t)(n+k)(7)

(6)次序统计量的概率密度函数推导

随机变量的分布函数、概率、概率密度函数之间存在一定的关系,设随机变量 X X X的pdf和cdf分别为 F ( x ) , f ( x ) F(x),f(x) F(x),f(x),则有
F ( x ) = P ( X ≤ x ) = ∫ 0 x f ( x ) d x (1) F(x)=P(X \leq x)=\int_0^x{f(x)dx}\tag{1} F(x)=P(Xx)=0xf(x)dx(1)
这个表达式是直接根据 F ( x ) F(x) F(x) f ( x ) f(x) f(x)的定义得到的。所以
P ( x ≤ X ≤ x + Δ x ) = F ( x + Δ x ) − F ( x ) → lim ⁡ Δ x → 0 P ( x ≤ X ≤ x + Δ x ) Δ x = P ( X = x ) = lim ⁡ Δ x → 0 F ( x + Δ x ) − F ( x ) Δ x = f ( x ) d x (2) \begin{equation} \begin{aligned} P(x \leq X \leq x+\Delta x)=F(x+\Delta x)-F(x) \rightarrow \\ \lim_{\Delta x \to 0}{\frac{P(x \leq X \leq x+\Delta x)}{\Delta x}}=P(X=x)=\lim_{\Delta x \to 0}{\frac{F(x+\Delta x)-F(x)}{\Delta x}}=f(x)dx \end{aligned} \end{equation}\tag{2} P(xXx+Δx)=F(x+Δx)F(x)Δx0limΔxP(xXx+Δx)=P(X=x)=Δx0limΔxF(x+Δx)F(x)=f(x)dx(2)
上面的推导过程得到了在满足连续分布的随机变量等于特定值的概率,它将被应用到后续的推导过程中。

对于一个有序的序列 x ( 1 ) ≤ x ( 2 ) ≤ . . . ≤ x ( N ) x_{(1)} \leq x_{(2)} \leq ... \leq x_{(N)} x(1)x(2)...x(N),现在要求其第 k k k个元素的概率密度函数 f ( y ) f(y) f(y)。显然对于事件 x ( k ) = y x_{(k)}=y x(k)=y来说,其等价的命题是:序列中存在 k − 1 k-1 k1个元素的值小于 y y y,存在一个元素的值等于 y y y,存在 N − k N-k Nk个元素值大于 y y y。上述等价命题其实包含了3小部分的内容,以下一一进行处理:

序列中存在 k − 1 k-1 k1个元素的值小于 y y y,这一事件对应的概率可以表示为 ( N k − 1 ) [ P ( X ≤ y ) ] k − 1 = ( N k − 1 ) [ F ( y ) ] k − 1 \begin{pmatrix} N \\ k-1 \end{pmatrix}[P(X \leq y)]^{k-1}=\begin{pmatrix} N \\ k-1 \end{pmatrix} [F(y)]^{k-1} (Nk1)[P(Xy)]k1=(Nk1)[F(y)]k1;(从原始 N N N个样本中随机选择 k − 1 k-1 k1个,使它们的值全部小于 y y y)

序列中存在一个元素的值等于 y y y,这一事件对应的概率可以表示为 ( N − k + 1 1 ) P ( X = y ) = ( N − k + 1 1 ) f ( y ) d y \begin{pmatrix} N-k+1 \\ 1 \end{pmatrix} P(X=y)=\begin{pmatrix} N-k+1 \\ 1 \end{pmatrix} f(y)dy (Nk+11)P(X=y)=(Nk+11)f(y)dy;(从剩余的 N − k + 1 N-k+1 Nk+1个样本中随机选择1个样本,让它的值等于 y y y)

序列中存在 N − k N-k Nk个元素的值大于 y y y,这一事件对应的概率可以表示为 C N − k N − k [ P ( X > y ) ] N − k = ( N − k N − k ) [ 1 − P ( X ≤ y ) ] N − k = ( N − k N − k ) [ 1 − F ( y ) ] N − k C_{N-k}^{N-k} [P(X > y)]^{N-k}=\begin{pmatrix} N-k \\ N-k \end{pmatrix} [1-P(X \leq y)]^{N-k}=\begin{pmatrix} N-k \\ N-k \end{pmatrix} [1-F(y)]^{N-k} CNkNk[P(X>y)]Nk=(NkNk)[1P(Xy)]Nk=(NkNk)[1F(y)]Nk

综合上面三个事件可得
P ( x ( k ) = y ) = f x ( k ) ( y ) d y = ( N k − 1 ) [ F ( y ) ] k − 1 ( N − k + 1 1 ) f ( y ) d y ( N − k N − k ) [ 1 − F ( y ) ] N − k → f x ( k ) ( y ) = N ! ( k − 1 ) ! ( N − k ) ! [ F ( y ) ] k − 1 [ 1 − F ( y ) ] N − k f ( y ) (3) \begin{equation} \begin{aligned} P(x_{(k)}=y)&=f_{x_{(k)}}(y)dy=\begin{pmatrix} N \\ k-1 \end{pmatrix} [F(y)]^{k-1} \begin{pmatrix} N-k+1 \\ 1 \end{pmatrix} f(y)dy \begin{pmatrix} N-k \\ N-k \end{pmatrix} [1-F(y)]^{N-k} \quad \rightarrow\\ f_{x_{(k)}}(y)&=\frac{N!}{(k-1)!(N-k)!}[F(y)]^{k-1} [1-F(y)]^{N-k} f(y) \end{aligned} \end{equation}\tag{3} P(x(k)=y)fx(k)(y)=fx(k)(y)dy=(Nk1)[F(y)]k1(Nk+11)f(y)dy(NkNk)[1F(y)]Nk=(k1)!(Nk)!N![F(y)]k1[1F(y)]Nkf(y)(3)
(7)OS-CFAR中统计量对应的矩母函数推导

统计量 z z z的概率密度函数为
f z ( z ) = λ 0 N ! ( k − 1 ) ! ( N − k ) ! e − λ 0 ( N − k + 1 ) z [ 1 − e − λ 0 z ] k − 1 (1) f_z(z)=\lambda_0 \frac{N!}{(k-1)!(N-k)!} e^{-\lambda_0 (N-k+1)z}[1-e^{-\lambda_0 z}]^{k-1}\tag{1} fz(z)=λ0(k1)!(Nk)!N!eλ0(Nk+1)z[1eλ0z]k1(1)
其矩母函数可以表示为
M z ( t ) = ∫ 0 ∞ f z ( z ) e − t z d z = λ 0 N ! ( k − 1 ) ! ( N − k ) ! ∫ 0 ∞ e − λ 0 ( N − k + 1 ) z [ 1 − e − λ 0 z ] k − 1 e − t z d z (2) {\rm M}_z(t)=\int_0^\infty{f_z(z) e^{-tz}dz}=\lambda_0 \frac{N!}{(k-1)!(N-k)!} \int_0^\infty{e^{-\lambda_0 (N-k+1)z}[1-e^{-\lambda_0 z}]^{k-1} e^{-tz}dz}\tag{2} Mz(t)=0fz(z)etzdz=λ0(k1)!(Nk)!N!0eλ0(Nk+1)z[1eλ0z]k1etzdz(2)
利用二项展开式 ( a + b ) n = ∑ r = 0 n ( n r ) a n − r b r (a+b)^n=\sum_{r=0}^n{\begin{pmatrix} n \\ r \end{pmatrix} a^{n-r}b^r} (a+b)n=r=0n(nr)anrbr,有 [ 1 − e − λ 0 z ] k − 1 = ∑ r = 0 k − 1 ( − 1 ) r ( k − 1 r ) e − λ 0 r z [1-e^{-\lambda_0 z}]^{k-1}=\sum_{r=0}^{k-1}{(-1)^r \begin{pmatrix} k-1 \\ r \end{pmatrix} e^{-\lambda_0 r z}} [1eλ0z]k1=r=0k1(1)r(k1r)eλ0rz,将其代入(2)中并进行整理可得
M z ( t ) = λ 0 N ! ( k − 1 ) ! ( N − k ) ! ∑ r = 0 k − 1 [ ( − 1 ) r ( k − 1 r ) ∫ 0 ∞ e − [ λ 0 ( N − k + 1 + r ) + t ] z d z ] = λ 0 N ! ( k − 1 ) ! ( N − k ) ! ∑ r = 0 k − 1 ( − 1 ) r ( k − 1 r ) λ 0 ( N − k + 1 + r ) + t = λ 0 ( N − k + 1 ) ∑ r = 0 k − 1 ( − 1 ) r ( k − 1 r ) ( N k − 1 ) λ 0 ( N − k + 1 + r ) + t (3) \begin{equation} \begin{aligned} {\rm M}_z(t)&=\lambda_0 \frac{N!}{(k-1)!(N-k)!} \sum_{r=0}^{k-1}[(-1)^r \begin{pmatrix} k-1 \\ r \end{pmatrix} \int_0^\infty{e^{-[\lambda_0(N-k+1+r)+t]z}dz}]\\ &=\lambda_0 \frac{N!}{(k-1)!(N-k)!} \sum_{r=0}^{k-1}{\frac{(-1)^r \begin{pmatrix} k-1 \\ r \end{pmatrix}}{\lambda_0(N-k+1+r)+t}}=\lambda_0 (N-k+1) \sum_{r=0}^{k-1}{\frac{(-1)^r \begin{pmatrix} k-1 \\ r \end{pmatrix} \begin{pmatrix} N \\ k-1 \end{pmatrix}}{\lambda_0(N-k+1+r)+t}} \end{aligned} \end{equation}\tag{3} Mz(t)=λ0(k1)!(Nk)!N!r=0k1[(1)r(k1r)0e[λ0(Nk+1+r)+t]zdz]=λ0(k1)!(Nk)!N!r=0k1λ0(Nk+1+r)+t(1)r(k1r)=λ0(Nk+1)r=0k1λ0(Nk+1+r)+t(1)r(k1r)(Nk1)(3)
上面的表达式感觉还没有化简到最简形式,但是目前还不知道怎么往下继续化简。

通过查阅参考文献[10],发现如下积分公式
∫ 0 ∞ ( 1 − e − x / β ) v − 1 e − μ x d x = β B ( β μ , v ) (4) \int_0^\infty{(1-e^{-x/\beta})^{v-1} e^{-\mu x}dx}=\beta {\rm B}(\beta \mu,v)\tag{4} 0(1ex/β)v1eμxdx=βB(βμ,v)(4)
其中 B ( x , y ) {\rm B}(x,y) B(x,y)表示beta函数,且 B ( x , y ) = ∫ 0 1 t x − 1 ( 1 − t ) y − 1 d t {\rm B}(x,y)=\int_0^1{t^{x-1}(1-t)^{y-1}dt} B(x,y)=01tx1(1t)y1dt,当 x , y x,y x,y均为正整数时, B ( x , y ) = ( x − 1 ) ! ( y − 1 ) ! ( x + y − 1 ) ! = Γ ( x ) Γ ( y ) Γ ( x + y ) {\rm B}(x,y)=\frac{(x-1)!(y-1)!}{(x+y-1)!}=\frac{\Gamma(x)\Gamma(y)}{\Gamma(x+y)} B(x,y)=(x+y1)!(x1)!(y1)!=Γ(x+y)Γ(x)Γ(y),利用(4)所示积分,对(2)进行重新整理
M z ( t ) = λ 0 N ! ( k − 1 ) ! ( N − k ) ! ∫ 0 ∞ ( 1 − e − λ 0 z ) k − 1 e − [ λ 0 ( N − k + 1 ) + t ] z d z μ = λ 0 ( N − k + 1 ) + t , v = k , β = 1 / λ 0 → M z ( t ) = λ 0 N ! ( k − 1 ) ! ( N − k ) ! β B ( β μ , v ) = N ! ( k − 1 ) ! ( N − k ) ! B ( N − k + 1 + t / λ 0 , k ) = k ( N k ) B ( N − k + 1 + t / λ 0 , k ) (5) \begin{equation} \begin{aligned} {\rm M}_z(t)&=\lambda_0 \frac{N!}{(k-1)!(N-k)!} \int_0^\infty{(1-e^{-\lambda_0 z})^{k-1} e^{-[\lambda_0(N-k+1)+t]z}dz}\\ &\underrightarrow{\mu=\lambda_0(N-k+1)+t,v=k,\beta=1/\lambda_0}\\ {\rm M}_z(t)&=\lambda_0 \frac{N!}{(k-1)!(N-k)!}\beta{\rm B}(\beta \mu,v)=\frac{N!}{(k-1)!(N-k)!}{\rm B}(N-k+1+t/\lambda_0,k)\\ &=k \begin{pmatrix} N \\ k \end{pmatrix} {\rm B}(N-k+1+t/\lambda_0,k) \end{aligned} \end{equation}\tag{5} Mz(t)Mz(t)=λ0(k1)!(Nk)!N!0(1eλ0z)k1e[λ0(Nk+1)+t]zdz μ=λ0(Nk+1)+t,v=k,β=1/λ0=λ0(k1)!(Nk)!N!βB(βμ,v)=(k1)!(Nk)!N!B(Nk+1+t/λ0,k)=k(Nk)B(Nk+1+t/λ0,k)(5)

(8)利用matlab生成指定均值和方差的正态分布随机变量

在上面的推导过程中,我们均假设背景噪声服从高斯分布,因此平方率检波之后噪声背景服从指数分布,关于高斯分布、指数分布、瑞利分布之间的关系,可以参考之前写的博客随机变量概率密度函数和概率分布函数相关总结。在CFAR检测器的仿真研究过程中,产生特定功率的背景噪声信号,以及特定信噪比的目标信号是很重要的(需要特别注意的是,这边所说的信噪比,是指原始信号中的目标信噪比,而不是平方率检波后的目标的信噪比,所以仿真信号的产生最好直接从高斯分布的原始信号开始,再由这个原始信号的模值平方生成平方率检波后的信号)。以下就如何按要求产生特定背景噪声及目标信号进行说明。在说明之前,先看一些结论:
X ∽ N ( μ , σ 2 ) → Y = a X + b ∽ N ( a μ + b , a 2 σ 2 ) X ∽ N ( 0 , σ 2 ) , Y ∽ N ( 0 , σ 2 ) → Z = X 2 + Y 2 ∽ E x p ( λ ) = 1 λ e − z / λ = 1 2 σ 2 e − z / 2 σ 2 X ∽ E x p ( λ ) → E ( x ) = λ , D ( x ) = λ 2 (1) \begin{equation} \begin{aligned} &X \backsim N(\mu,\sigma^2) \rightarrow Y=aX+b \backsim N(a\mu+b,a^2 \sigma^2)\\ &X \backsim N(0,\sigma^2),Y \backsim N(0,\sigma^2) \rightarrow Z=X^2+Y^2 \backsim {\rm Exp}(\lambda)=\frac{1}{\lambda}e^{-z/\lambda}=\frac{1}{2\sigma^2}e^{-z/2\sigma^2}\\ &X \backsim {\rm Exp}(\lambda) \rightarrow {\rm E}(x)=\lambda,D(x)=\lambda^2 \end{aligned} \end{equation}\tag{1} XN(μ,σ2)Y=aX+bN(aμ+b,a2σ2)XN(0,σ2),YN(0,σ2)Z=X2+Y2Exp(λ)=λ1ez/λ=2σ21ez/2σ2XExp(λ)E(x)=λ,D(x)=λ2(1)
设要求的背景噪声功率和目标信噪比分别为 n P nP nP dB和 S N R SNR SNR dB,则仿真代码如下:

nP=10;    %背景噪声功率(dB)
SNR=10;   %目标信噪比(dB)
N=10000;  %信号长度

sigma=sqrt(10^(nP/10))/sqrt(2);  %单通道噪声标准差
noise=sigma*(randn(N,1)+1j*randn(N,1));  %生成特定功率的噪声信号
trgt=10^((SNR+nP)/20;   %目标幅值

(9)各CFAR算法门限乘积因子、虚警概率、检测概率的计算代码

% CA-CFAR虚警概率计算函数(直接用公式计算)
function [PFA] = func_CaPfa(alpha,N)
    PFA=(1+alpha/N)^(-N);
end

% OS-CFAR虚警概率计算函数(直接用公式计算)
function [PFA] = func_OsPfa(alpha,N,k)
   PFA=k*nchoosek(N,k)*gamma(N-k+1+alpha)*gamma(k)/gamma(N+1+alpha);
end

% GO-CFAR虚警概率计算函数(直接用公式计算)
function [PFA] = func_GoPfa(alpha,N)
  n=N/2;
  A=2*(1+alpha/n)^(-n);
  B=0;
  for k=0:n-1
      B=B+2*nchoosek(n-1+k,k)*(2+alpha/n)^(-(n+k));
  end
  PFA=A-B;
end

% SO-CFAR虚警概率计算函数(直接用公式计算)
function [PFA] = func_SoPfa(alpha,N)
  n=N/2;
  PFA=0;
  for k=0:n-1
      PFA=PFA+2*nchoosek(n-1+k,k)*(2+alpha/n)^(-(n+k));
  end
end

% CA-CFAR检测概率计算函数(直接用公式计算)
function [Pd] = func_CaPd(alpha,N,snr)
  snr=10.^(snr/10); %将snr转化成线性
  Pd=(1+alpha./(N*(1+snr))).^(-N);
end

% OS-CFAR检测概率计算函数(直接用公式计算)
function [Pd] = func_OsPd(alpha,N,k,snr)
  snr=10.^(snr/10); %将snr转化成线性
  Pd=k*nchoosek(N,k)*gamma(N-k+1+alpha./(1+snr))*gamma(k)./gamma(N+1+alpha./(1+snr));
end

% GO-CFAR检测概率计算函数(直接用公式计算)
function [Pd] = func_GoPd(alpha,N,snr)
  snr=10.^(snr/10); %将snr转化成线性
  n=N/2;
  A=2*(1+alpha./(n*(1+snr))).^(-n);
  B=0;
  for k=0:n-1
      B=B+2*nchoosek(n-1+k,k)*(2+alpha./(n*(1+snr))).^(-(n+k));
  end
  Pd=A-B;
end

% SO-CFAR检测概率计算函数(直接用公式计算)
function [Pd] = func_SoPd(alpha,N,snr)
  snr=10.^(snr/10); %将snr转化成线性
  n=N/2;
  Pd=0;
  for k=0:n-1
      Pd=Pd+2*nchoosek(n-1+k,k)*(2+alpha./(n*(1+snr))).^(-(n+k));
  end
end

% CA-CFAR门限乘积因子计算函数(直接用公式计算)
function [alpha] = func_CaAlpha(PFA,N)
    alpha=N*(PFA^(-1/N)-1);
end

% OS-CFAR门限乘积因子计算函数(构造多项式计算)
function [alpha] = func_OsAlpha(PFA,N,k)
    syms T;
    x=vpasolve(PFA-k*nchoosek(N,k)*gamma(N-k+1+T)*gamma(k)/gamma(N+T+1)==0,T);
    alpha=x(x==abs(x));
end

% GO-CFAR门限乘积因子计算函数(用二分法逼近)
function [alpha] = func_GoAlpha(PFA,N)
   scope=[0,500];    %预设门限乘积因子的范围
   res=1;            %预设门限乘积因子的计算误差
   while 1
     alpha=mean(scope);
     PFA_=func_GoPfa(alpha,N);   %根据alpha值计算虚警率
     d=1/PFA_-1/PFA;             %理想PFA与计算得到的PFA之前的差异
     if abs(d)<res || abs(scope(1)-scope(2))<0.0001
         return;
     elseif d<0
         scope(1)=alpha;
     else
         scope(2)=alpha;
     end
  end
end

% SO-CFAR门限乘积因子计算函数(用二分法逼近)
function [alpha] = func_SoAlpha(PFA,N)
   scope=[0,500];    %预设门限乘积因子的范围
   res=1;            %预设门限乘积因子的计算误差
   while 1
     alpha=mean(scope);
     PFA_=func_SoPfa(alpha,N);   %根据alpha值计算虚警率
     d=1/PFA_-1/PFA;             %理想PFA与计算得到的PFA之前的差异
     if abs(d)<res || abs(scope(1)-scope(2))<0.0001
         return;
     elseif d<0
         scope(1)=alpha;
     else
         scope(2)=alpha;
     end
   end
end

上述代码已与matlab自带的CFAR算法结果进行比对,证明了代码的正确性。

(10)各种CFAR算法的实现代码

% 函数说明:实现CA-CFAR
% 输入参数:
%    (1)x:原始样本,暂时只支持一维向量
%    (2)cutI:待检单元索引
%    (3)refN:参考窗长度
%    (4)prctN:保护窗长度
%    (5)PFA:虚警概率
% 输出参数:
%    (1)flag:该检测单元上是否存在目标,0表示不存在,1表示存在
%    (2)alpha:门限乘积因子
%    (3)threshold:检测门限
% 版本历史:
% 20210802:程序创建,只支持一维输入向量,且不考虑边缘情况
function [flag,alpha,threshold] = func_CaCFAR(x,cutI,refN,prctN,PFA)
    x=x(:);
    if cutI-refN/2-prctN/2<=0 | cutI+refN/2+prctN/2>length(x)
        error('出现边缘情况,请检查函数输入参数!');
    end

    leading=x(cutI-refN/2-prctN/2:cutI-prctN/2-1);  %前参考窗
    lagging=x(cutI+prctN/2+1:cutI+prctN/2+refN/2);  %后参考窗
    cut=x(cutI);                                    %待检单元

    alpha=func_CaAlpha(PFA,refN);            %计算门限乘积因子
    noiseP=mean([leading;lagging]);          %计算噪声功率
    threshold=alpha*noiseP;                  %计算门限
    flag=(cut>=threshold);                   %待检单元与检测门限对比获得检测结果
end

% 函数说明:实现GO-CFAR
% 输入参数:
%    (1)x:原始样本,暂时只支持一维向量
%    (2)cutI:待检单元索引
%    (3)refN:参考窗长度
%    (4)prctN:保护窗长度
%    (5)PFA:虚警概率
% 输出参数:
%    (1)flag:该检测单元上是否存在目标,0表示不存在,1表示存在
%    (2)alpha:门限乘积因子
%    (3)threshold:检测门限
% 版本历史:
% 20210802:程序创建,只支持一维输入向量,且不考虑边缘情况
function [flag,alpha,threshold] = func_GoCFAR(x,cutI,refN,prctN,PFA)
    x=x(:);
    if cutI-refN/2-prctN/2<=0 | cutI+refN/2+prctN/2>length(x)
        error('出现边缘情况,请检查函数输入参数!');
    end

    leading=x(cutI-refN/2-prctN/2:cutI-prctN/2-1);  %前参考窗
    lagging=x(cutI+prctN/2+1:cutI+prctN/2+refN/2);  %后参考窗
    cut=x(cutI);                                    %待检单元

    alpha=func_GoAlpha(PFA,refN);            %计算门限乘积因子
    noiseP=max(mean(leading),mean(lagging)); %计算噪声功率
    threshold=alpha*noiseP;                  %计算门限
    flag=(cut>=threshold);                   %待检单元与检测门限对比获得检测结果
end

% 函数说明:实现SO-CFAR
% 输入参数:
%    (1)x:原始样本,暂时只支持一维向量
%    (2)cutI:待检单元索引
%    (3)refN:参考窗长度
%    (4)prctN:保护窗长度
%    (5)PFA:虚警概率
% 输出参数:
%    (1)flag:该检测单元上是否存在目标,0表示不存在,1表示存在
%    (2)alpha:门限乘积因子
%    (3)threshold:检测门限
% 版本历史:
% 20210802:程序创建,只支持一维输入向量,且不考虑边缘情况
function [flag,alpha,threshold] = func_SoCFAR(x,cutI,refN,prctN,PFA)
    x=x(:);
    if cutI-refN/2-prctN/2<=0 | cutI+refN/2+prctN/2>length(x)
        error('出现边缘情况,请检查函数输入参数!');
    end
    
    leading=x(cutI-refN/2-prctN/2:cutI-prctN/2-1);  %前参考窗
    lagging=x(cutI+prctN/2+1:cutI+prctN/2+refN/2);  %后参考窗
    cut=x(cutI);                                    %待检单元

    alpha=func_SoAlpha(PFA,refN);            %计算门限乘积因子
    noiseP=min(mean(leading),mean(lagging)); %计算噪声功率
    threshold=alpha*noiseP;                  %计算门限
    flag=(cut>=threshold);                   %待检单元与检测门限对比获得检测结果
end

% 函数说明:实现OS-CFAR
% 输入参数:
%    (1)x:原始样本,暂时只支持一维向量
%    (2)cutI:待检单元索引
%    (3)refN:参考窗长度
%    (4)prctN:保护窗长度
%    (5)k:噪声估计单元索引
%    (5)PFA:虚警概率
% 输出参数:
%    (1)flag:该检测单元上是否存在目标,0表示不存在,1表示存在
%    (2)alpha:门限乘积因子
%    (3)threshold:检测门限
% 版本历史:
% 20210802:程序创建,只支持一维输入向量,且不考虑边缘情况
function [flag,alpha,threshold] = func_OsCFAR(x,cutI,refN,prctN,k,PFA)
    x=x(:);
    if cutI-refN/2-prctN/2<=0 | cutI+refN/2+prctN/2>length(x)
        error('出现边缘情况,请检查函数输入参数!');
    end

    leading=x(cutI-refN/2-prctN/2:cutI-prctN/2-1);  %前参考窗
    lagging=x(cutI+prctN/2+1:cutI+prctN/2+refN/2);  %后参考窗
    cut=x(cutI);                                    %待检单元

    alpha=func_OsAlpha(PFA,refN,k);          %计算门限乘积因子
    tmp=sort([leading;lagging],'ascend');
    noiseP=tmp(k);                           %计算噪声功率
    threshold=alpha*noiseP;                  %计算门限
    flag=(cut>=threshold);                   %待检单元与检测门限对比获得检测结果
end

上述代码已与matlab自带的CFAR代码进行了对比,证明了上述代码的正确性。

(11)理论性能对比代码

snr=5:30;       %信噪比(dB)
N=[16,32];      %参考窗长度
k=round(N*3/4); 
PFA=1e-6;      %虚警概率

PD_Optimal=PFA.^(1./(1+10.^(snr/10))); 
PD_CA=zeros(length(N),length(snr));
PD_SO=zeros(length(N),length(snr));
PD_GO=zeros(length(N),length(snr));
PD_OS=zeros(length(N),length(snr));
for ii=1:length(N)
    alpha_CA=func_CaAlpha(PFA,N(ii));
    alpha_OS=func_OsAlpha(PFA,N(ii),k(ii));
    alpha_GO=func_GoAlpha(PFA,N(ii));
    alpha_SO=func_SoAlpha(PFA,N(ii));
     
    PD_CA(ii,:)=func_CaPd(alpha_CA,N(ii),snr);
    PD_OS(ii,:)=func_OsPd(alpha_OS,N(ii),k(ii),snr);
    PD_SO(ii,:)=func_SoPd(alpha_SO,N(ii),snr);
    PD_GO(ii,:)=func_GoPd(alpha_GO,N(ii),snr);
end

figure;hold on;box on;
plot(PD_Optimal,'r');
% plot(PD_CA(1,:),'b.-');
plot(PD_CA(2,:),'b*-');
% plot(PD_GO(1,:),'k.-');
plot(PD_GO(2,:),'k*-');
% plot(PD_SO(1,:),'g.-');
plot(PD_SO(2,:),'g*-');
% plot(PD_OS(1,:),'y.-');
plot(PD_OS(2,:),'y*-');
legend('optimal','CA32','GO32','SO32','OS32');
axis tight;

(12)单目标情况下各CFAR算法检测门限

PFA=1e-5;          %虚警概率
N=32;              %参考窗长度
k=round(N*3/4);   
L=100;             %原始数据长度(这边暂时不考虑边缘效应,所以实际生成的数据要比这个长度稍长)

SNR=15;            %目标信噪比(dB)
noiseP=20;         %噪声背景平均功率(dB)
trgtLoc=50;        %目标所在距离单元

% 计算每种算法对应的门限乘积因子
alpha_CA=func_CaAlpha(PFA,N);
alpha_OS=func_OsAlpha(PFA,N,k);
alpha_GO=func_GoAlpha(PFA,N);
alpha_SO=func_SoAlpha(PFA,N);

% 每种算法对应的门限值(dB)
threshold_CA=zeros(L+N,1);
threshold_OS=zeros(L+N,1);
threshold_GO=zeros(L+N,1);
threshold_SO=zeros(L+N,1);

% 生成原始平方率检波数据
sigma0=sqrt(10^(noiseP/10))/sqrt(2);    %单路噪声标准差
sigma1=sqrt(10^((noiseP+SNR)/10))/sqrt(2);%单路目标标准差
x=sigma0*(randn(L+N,1)+1j*randn(L+N,1));%生成指定功率的噪声信号
cut=sigma1*(randn(1,1)+1j*randn(1,1));%待检单元回波
x(trgtLoc)=cut;                       %待检单元回波
x=abs(x).^2;                           %模值平方

for ii=N/2+1:L+N/2
    left=ii-N/2:ii-1;   %前参考窗索引
    right=ii+1:ii+N/2;  %后参考窗索引
    
    threshold_CA(ii)=10*log10(alpha_CA*mean(x([left right])));
    threshold_GO(ii)=10*log10(alpha_GO*max(mean(x(left)),mean(x(right))));
    threshold_SO(ii)=10*log10(alpha_SO*min(mean(x(left)),mean(x(right))));
    
    tmp=sort(x([left right]),'ascend');
    threshold_OS(ii)=10*log10(alpha_OS*tmp(k));
end

figure;hold on;box on;
plot(10*log10(x),'b');
plot(threshold_CA,'r');
plot(threshold_GO,'k');
plot(threshold_SO,'y');
plot(threshold_OS,'g');
xlabel('采样点');ylabel('幅度(dB)');axis tight;xlim([N/2+1 N/2+1+L]);
legend('原始采样点','CA-CFAR','GO-CFAR','SO-CFAR','OS-CFAR');

(13)蒙特卡洛仿真实验代码

PFA=1e-5;          %虚警概率
mcTimes=round(1/PFA);%蒙特卡洛仿真次数
N=32;              %参考窗长度
k=round(N*3/4);   

noiseP=10;         %背景噪声功率(dB)
SNR=5:30;          %目标信噪比(dB)

% 计算各种算法的门限乘积因子
alpha_CA=func_CaAlpha(PFA,N);
alpha_GO=func_GoAlpha(PFA,N);
alpha_SO=func_SoAlpha(PFA,N);
alpha_OS=func_OsAlpha(PFA,N,k);

% 计算各种算法理论的检测概率
CaPd_Theo=zeros(length(SNR),1);
OsPd_Theo=zeros(length(SNR),1);
SoPd_Theo=zeros(length(SNR),1);
GoPd_Theo=zeros(length(SNR),1);

for ii=1:length(SNR)
    CaPd_Theo(ii)=func_CaPd(alpha_CA,N,SNR(ii));
    OsPd_Theo(ii)=func_OsPd(alpha_OS,N,k,SNR(ii));
    SoPd_Theo(ii)=func_SoPd(alpha_SO,N,SNR(ii));
    GoPd_Theo(ii)=func_GoPd(alpha_GO,N,SNR(ii));
end

% 计算各种算法蒙特卡洛仿真的结果
rng(1000);
CaPd_Mc=zeros(length(SNR),1);
OsPd_Mc=zeros(length(SNR),1);
SoPd_Mc=zeros(length(SNR),1);
GoPd_Mc=zeros(length(SNR),1);

sigma=sqrt(10^(noiseP/10))/sqrt(2);    %单路噪声标准差
for isnr=1:length(SNR)
    trgt=10^((noiseP+SNR(isnr))/20);                   %目标幅值
    x=sigma*(randn(N+1,mcTimes)+1j*randn(N+1,mcTimes));%生成指定功率的噪声信号
    x(N/2+1,:)=trgt;
    x=abs(x).^2;

    CaDetector=phased.CFARDetector('Method','CA','NumGuardCells',0,'NumTrainingCells',N,'ProbabilityFalseAlarm',PFA);
    CaResult=CaDetector(x,N/2+1);
    CaPd_Mc(isnr)=sum(CaResult)/mcTimes;
    
    GoDetector=phased.CFARDetector('Method','GOCA','NumGuardCells',0,'NumTrainingCells',N,'ProbabilityFalseAlarm',PFA);
    GoResult=GoDetector(x,N/2+1);
    GoPd_Mc(isnr)=sum(GoResult)/mcTimes;
    
    SoDetector=phased.CFARDetector('Method','SOCA','NumGuardCells',0,'NumTrainingCells',N,'ProbabilityFalseAlarm',PFA);
    SoResult=SoDetector(x,N/2+1);
    SoPd_Mc(isnr)=sum(SoResult)/mcTimes;
    
        OsDetector=phased.CFARDetector('Method','OS','Rank',k,'NumGuardCells',0,'NumTrainingCells',N,'ProbabilityFalseAlarm',PFA);
    OsResult=OsDetector(x,N/2+1);
    OsPd_Mc(isnr)=sum(OsResult)/mcTimes;
    
    disp(strcat('第',num2str(isnr),'个信噪比计算完成!'));
end

figure;hold on;box on;
plot(SNR,CaPd_Theo,'r');
plot(SNR,CaPd_Mc,'r.-');
plot(SNR,OsPd_Theo,'b');
plot(SNR,OsPd_Mc,'b.-');
plot(SNR,GoPd_Theo,'k');
plot(SNR,GoPd_Mc,'k.-');
plot(SNR,SoPd_Theo,'g');
plot(SNR,SoPd_Mc,'g.-');
xlabel('信噪比(dB)');ylabel('P_d');axis tight;
legend('CA','CA-MC','OS','OS-MC','GO','GO-MC','SO','SO-MC');

由于在上面的附录里面已经验证了自己写的代码和matlab自带的CFAR代码结果是相吻合的,所以以后在处理的时候可以直接用matlab的库函数来实现,显得更加专业和灵活。

(14)修改目标回波生成方式后代码

PFA=1e-5;          %虚警概率
mcTimes=round(1/PFA);%蒙特卡洛仿真次数
N=32;              %参考窗长度
k=round(N*3/4);   

noiseP=10;         %背景噪声功率(dB)
SNR=5:30;          %目标信噪比(dB)

% 计算各种算法的门限乘积因子
alpha_CA=func_CaAlpha(PFA,N);
alpha_GO=func_GoAlpha(PFA,N);
alpha_SO=func_SoAlpha(PFA,N);
alpha_OS=func_OsAlpha(PFA,N,k);

% 计算各种算法理论的检测概率
CaPd_Theo=zeros(length(SNR),1);
OsPd_Theo=zeros(length(SNR),1);
SoPd_Theo=zeros(length(SNR),1);
GoPd_Theo=zeros(length(SNR),1);

for ii=1:length(SNR)
    CaPd_Theo(ii)=func_CaPd(alpha_CA,N,SNR(ii));
    OsPd_Theo(ii)=func_OsPd(alpha_OS,N,k,SNR(ii));
    SoPd_Theo(ii)=func_SoPd(alpha_SO,N,SNR(ii));
    GoPd_Theo(ii)=func_GoPd(alpha_GO,N,SNR(ii));
end

% 计算各种算法蒙特卡洛仿真的结果
rng(1000);
CaPd_Mc=zeros(length(SNR),1);
OsPd_Mc=zeros(length(SNR),1);
SoPd_Mc=zeros(length(SNR),1);
GoPd_Mc=zeros(length(SNR),1);

for isnr=1:length(SNR)
    % 回波生成方式1:高斯分布的模值平方
    %sigma0=sqrt(db2pow(noiseP)/2);                     %单路噪声标准差
    %sigma1=sqrt(db2pow(noiseP+SNR(isnr))/2);           %单路目标回波的标准差
    %x=sigma0*(randn(N+1,mcTimes)+1j*randn(N+1,mcTimes));%生成指定功率的噪声信号
    %trgt=sigma1*(randn(1,mcTimes)+1j*randn(1,mcTimes)); %生成指定信噪比的目标回波信号
    %x(N/2+1,:)=trgt;
    %x=abs(x).^2;
    
    % 回波生成方式2:直接用指数分布生成
    lambda0=db2pow(noiseP);                           %噪声指数分布参数
    lambda1=db2pow(noiseP+SNR(isnr));                 %目标回波指数分布
    x=exprnd(lambda0,N+1,mcTimes);                    %生成指定功率的噪声信号
    trgt=exprnd(lambda1,1,mcTimes);                   %生成指定信噪比的目标回波信号
    x(N/2+1,:)=trgt;

    CaDetector=phased.CFARDetector('Method','CA','NumGuardCells',0,'NumTrainingCells',N,'ProbabilityFalseAlarm',PFA);
    CaResult=CaDetector(x,N/2+1);
    CaPd_Mc(isnr)=sum(CaResult)/mcTimes;
    
    GoDetector=phased.CFARDetector('Method','GOCA','NumGuardCells',0,'NumTrainingCells',N,'ProbabilityFalseAlarm',PFA);
    GoResult=GoDetector(x,N/2+1);
    GoPd_Mc(isnr)=sum(GoResult)/mcTimes;
    
    SoDetector=phased.CFARDetector('Method','SOCA','NumGuardCells',0,'NumTrainingCells',N,'ProbabilityFalseAlarm',PFA);
    SoResult=SoDetector(x,N/2+1);
    SoPd_Mc(isnr)=sum(SoResult)/mcTimes;
    
        OsDetector=phased.CFARDetector('Method','OS','Rank',k,'NumGuardCells',0,'NumTrainingCells',N,'ProbabilityFalseAlarm',PFA);
    OsResult=OsDetector(x,N/2+1);
    OsPd_Mc(isnr)=sum(OsResult)/mcTimes;
    
    disp(strcat('第',num2str(isnr),'个信噪比计算完成!'));
end

figure;hold on;box on;
plot(SNR,CaPd_Theo,'r');
plot(SNR,CaPd_Mc,'r.-');
plot(SNR,OsPd_Theo,'b');
plot(SNR,OsPd_Mc,'b.-');
plot(SNR,GoPd_Theo,'k');
plot(SNR,GoPd_Mc,'k.-');
plot(SNR,SoPd_Theo,'g');
plot(SNR,SoPd_Mc,'g.-');
xlabel('信噪比(dB)');ylabel('P_d');axis tight;
legend('CA','CA-MC','OS','OS-MC','GO','GO-MC','SO','SO-MC');
  • 19
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值