阵列信号处理笔记(3):阵列调向、栅瓣、半功率波束带宽、端射阵列

这篇具有很好参考价值的文章主要介绍了阵列信号处理笔记(3):阵列调向、栅瓣、半功率波束带宽、端射阵列。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

阵列信号处理笔记


阵列调向

  阵列调向是阵列信号处理中一个非常基本的问题,通常阵列调向需要做的就是将主瓣对准某一特定位置。这一骚操作可以通过物理手段实现,例如旋转阵列朝向,或者通过电子方式实现。一个比较经典的例子是基站天线的下倾角调节,如图所示。

阵列信号处理笔记(3):阵列调向、栅瓣、半功率波束带宽、端射阵列

  这种天线通过一个可调节的机械结构改变天线对地的夹角,而为了调节这个机械结构需要相关的操作人员上站调试。现代基站天线基本都具有电子下倾角调节功能,当需要对基站覆盖范围做出某些调整(例如相邻小区干扰严重)时,操作人员在机械倾角的基础上通过合理设置阵列参数,就能达到等效的倾角调节。天线下倾角管理是一个优化问题,而它的基础则依赖于阵列调向理论。

  阵列调向理论非常简单,根据前面的章节,任意一个阵列的频域-波数域响应都能用下式表示
γ ( w , k ) = W H ( w ) v ( k ) (1) \gamma(w,\mathbf{k})=\mathbf{W}^{\mathrm{H}}(w)\mathbf{v}(\mathbf{k})\tag{1} γ(w,k)=WH(w)v(k)(1)
阵列调向做的事情在波数域(k域)很简单,形式上就是 γ ( w , k − k 0 ) \gamma(w,\mathbf{k-k_0}) γ(w,kk0),从数学上则是阵列流形左乘一个调向矩阵 I s ( k 0 ) \mathbf{I_s}(\mathbf{k_0}) Is(k0)
γ ( w , k − k 0 ) = W H ( w ) v ( k − k 0 ) = W H ( w ) I s ( k 0 ) v ( k ) (2) \gamma(w,\mathbf{k-k_0})=\mathbf{W}^{\mathrm{H}}(w)\mathbf{v}(\mathbf{k-k_0})=\mathbf{W}^{\mathrm{H}}(w)\mathbf{I_s}(\mathbf{k_0})\mathbf{v}(\mathbf{k})\tag{2} γ(w,kk0)=WH(w)v(kk0)=WH(w)Is(k0)v(k)(2)
其中
I s ( k 0 ) = ( e j k 0 T p 0 0 ⋯ 0 0 e j k 0 T p 1 ⋯ 0 0 ⋯ ⋱ 0 0 ⋯ 0 e j k 0 T p N − 1 ) (3) \mathbf{I_s}(\mathbf{k_0})=\left(\begin{array}{c} e^{j \mathbf{k_0}^\mathrm{T}p_0} & 0 & \cdots &0 \\ 0 &e^{j \mathbf{k_0}^\mathrm{T}p_1} & \cdots &0 \\0&\cdots &\ddots &0 \\ 0 & \cdots &0 &e^{j \mathbf{k_0}^\mathrm{T}p_{N-1}} \\ \end{array}\right)\tag{3} Is(k0)= ejk0Tp00000ejk0Tp10000ejk0TpN1 (3)

  有兴趣可以乘一乘验证一下😀对于u域, ψ \psi ψ域也是如法炮制,但是对 θ \theta θ域稍微有点区别。实际上对于ULA来说,调向后的频域-波数域响应就是
γ ( k : k 0 ) = 1 N v ( k 0 ) H v ( k ) (4) \gamma(\mathbf{k}:\mathbf{k_0})=\frac{1}{N}\mathbf{v}(\mathbf{k_0})^{\mathrm{H}}\mathbf{v}(\mathbf{k})\tag{4} γ(k:k0)=N1v(k0)Hv(k)(4)
证明很简单,令 W = [ 1 / N , 1 / N , ⋯   , 1 / N ] \displaystyle \mathbf{W}=[1/N,1/N,\cdots, 1/N] W=[1/N,1/N,,1/N]即可。


栅瓣

  栅瓣是波束方向图中间隔出现的,与主瓣高度相同的波瓣。栅瓣的来源可以通过空域采样理论解释,即一个域的离散必定对应于另一个域的周期延拓。在时域中对一个信号 f ( t ) f(t) f(t)进行采样,那么频域必定得到的是以采样角频率为周期重复的 F ( w ) F(w) F(w)。与时域采样类似,空域采样也会存在混叠。关于空域混叠问题在上面一节已经给出了一个描述,这里将给出另一个等价的说法。

  阵列调向的方向图可以视为一种移动(在k/u/ ψ \psi ψ域),以u域为例,其中 u 0 u_0 u0是移动距离,那么
γ ( u : u 0 ) = 1 N sin ⁡ [ π N λ d ( u − u 0 ) ] sin ⁡ [ π λ d ( u − u 0 ) ] (5) \gamma(u:u_0)=\frac{1}{N} \frac{\sin\left[ \frac{\pi}{N\lambda}d(u-u_0) \right]}{\sin \left[ \frac{\pi}{\lambda}d\left( u-u_0 \right) \right]}\tag{5} γ(u:u0)=N1sin[λπd(uu0)]sin[Nλπd(uu0)](5)
其中可视区域为 − 1 ⩽ u ⩽ 1 -1 \leqslant u \leqslant1 1u1(即 0 ⩽ θ ⩽ 18 0 ∘ 0 \leqslant \theta \leqslant 180 ^{\circ} 0θ180),当 u 0 ∈ [ − 1 , 1 ] u_0 \in [-1, 1] u0[1,1]时,可以绘制相应的波束方向图。下面四幅图给出了阵元间距d分别为 λ \lambda λ 0.75 λ 0.75\lambda 0.75λ 0.5 λ 0.5\lambda 0.5λ 0.25 λ 0.25\lambda 0.25λ时的动态图。

  这是 d = λ d=\lambda d=λ的情况

阵列信号处理笔记(3):阵列调向、栅瓣、半功率波束带宽、端射阵列

  这是 d = 0.75 λ d=0.75\lambda d=0.75λ的情况

阵列信号处理笔记(3):阵列调向、栅瓣、半功率波束带宽、端射阵列

  这是 d = 0.5 λ d=0.5\lambda d=0.5λ的情况

阵列信号处理笔记(3):阵列调向、栅瓣、半功率波束带宽、端射阵列

  这是 d = 0.25 λ d=0.25\lambda d=0.25λ的情况

阵列信号处理笔记(3):阵列调向、栅瓣、半功率波束带宽、端射阵列

  不难发现,当 d > 0.5 λ d>0.5 \lambda d>0.5λ时,随着 u 0 u_0 u0 [ − 1 , 1 ] [-1, 1] [1,1]移动,栅瓣的峰值将落入可视区域内,这种情况被认为是一种峰值响应模糊,也就是说当给我们一张波束方向图(没有任何先验知识),我们无从分辨哪个是主瓣,继而做空间谱估计时也无从分辨哪个峰值对应了真正的波达方向。当 d = 0.5 λ d=0.5 \lambda d=0.5λ时恰好为临界情况,而 d < 0.5 λ d<0.5 \lambda d<0.5λ ∀ u 0 ∈ [ − 1 , 1 ] \forall u_0 \in [-1,1] u0[1,1]均无栅瓣峰值落入可视区域,并且随着d的减小,栅瓣之间间距也越来越大。

  所以这里我们从u域出发得到了相同的结论,即对于均匀线阵,满足无空域混叠的条件是
d ⩽ λ 2 (6) d \leqslant \frac{\lambda}{2}\tag{6} d2λ(6)
现在考虑调向范围受限的情形,即 ∣ u 0 ∣ ⩽ Δ u m a x , Δ u m a x ∈ [ 0 , 1 ] \left| u_0 \right| \leqslant \Delta u_{max},\Delta u_{max} \in [0, 1] u0ΔumaxΔumax[0,1]。为了使得不存在峰值响应模糊,即第一级栅瓣不能落入可视区域,必须满足
d ⩽ 1 1 + Δ u m a x λ (7) d \leqslant \frac{1}{1+\Delta u_{max}}\lambda\tag{7} d1+Δumax1λ(7)

简单证明一下。

阵列信号处理笔记(3):阵列调向、栅瓣、半功率波束带宽、端射阵列

考虑左侧第一级栅瓣,当主瓣调向达到右侧最大时,第一级栅瓣位于左侧可视区域边界之外(说人话就是可视区域里不能有栅瓣),也就是
π λ d ( − 1 − Δ u m a x ) ⩾ − π \frac{\pi}{\lambda}d(-1-\Delta u_{max})\geqslant-\pi λπd(1Δumax)π

d ⩽ 1 1 + Δ u m a x d \leqslant \frac{1}{1+ \Delta u_{max}} d1+Δumax1
根据对称性,右侧第一级栅瓣同理。值得注意的是,当 Δ u m a x = 1 \Delta u_{max}=1 Δumax=1,即 u 0 ∈ [ − 1 , 1 ] u_0 \in [-1, 1] u0[1,1]时,上式简化为
d ⩽ λ 2 d \leqslant \frac{\lambda}{2} d2λ
这与前面MATLAB仿真结果是一致滴。


调向对方向图的影响

  阵列调向的方向图在k、u、 ψ \psi ψ域可以视为一种移动(平移)。但是在使用的时候,k、u、 ψ \psi ψ域表述似乎实际意义不怎么明确,因为通常我们没法指着一个地方说握草这地方就是 ψ = π 3 \displaystyle \psi=\frac{\pi}{3} ψ=3π…但是我们能很容易感受 θ = 4 5 ∘ \displaystyle \theta=45 ^{\circ} θ=45所对应的大致朝向,但是很不幸的是,在 θ \theta θ域中调向对方向图的影响并非简单的搬移。这种影响要从u域和 θ \theta θ域的关系说起。

我们熟知 u = cos ⁡ θ \displaystyle u = \cos \theta u=cosθ,需要注意的是这个 θ \theta θ指的是阵列扫描方向与z轴正方向的夹角(见上一篇文章开头的图),或者画在平面图上是这样的。

阵列信号处理笔记(3):阵列调向、栅瓣、半功率波束带宽、端射阵列

在很多文献(包括论文、书籍)写的跟我并不一样,他们可能取的是扫描方向与阵列法线的夹角。如果存在一些符号上的差异(例如我是 cos ⁡ θ \cos \theta cosθ别人是 sin ⁡ θ \sin \theta sinθ)请仔细甄别。其实原书《Optimum Array Processing》早在前面就已经对这一点做了详细区分,但是很多时候看起来实在有些累。

  在u域的阵列调向,通常只需要做u域的平移,即 u − u 0 u-u_0 uu0,这样就能将主瓣对准 u 0 u_0 u0所在的方向。有人会说,那我在 θ \theta θ域调向,不是只要做 θ − θ 0 \theta-\theta_0 θθ0就可以了么??但是试过的都知道,理想是丰满滴,现实是骨感滴,因为cos并不满足移不变性(shift-invariance property),这件事情天然的就不成立。那为什么在其他域是成立的捏??(因为是直接由Fouier transform的shift property推导得到)。正确的做法是回到u域,做 cos ⁡ θ − cos ⁡ θ 0 \cos \theta - \cos \theta _0 cosθcosθ0,这样一来,对于ULA来说
γ ( θ : θ 0 ) = 1 N sin ⁡ [ N π λ d ( cos ⁡ θ − cos ⁡ θ 0 ) ] sin ⁡ [ π λ d ( cos ⁡ θ − cos ⁡ θ 0 ) ] (8) \gamma(\theta:\theta_0)=\frac{1}{N} \frac{ \sin \left[ \frac{N\pi}{\lambda}d \left(\cos \theta - \cos \theta_0 \right) \right]}{\sin \left[ \frac{\pi}{\lambda}d \left(\cos \theta - \cos \theta_0 \right) \right]}\tag{8} γ(θ:θ0)=N1sin[λπd(cosθcosθ0)]sin[λNπd(cosθcosθ0)](8)
对N=10的标准ULA,我们画出 θ = 0 ∘ \theta =0^{\circ} θ=0 θ = 6 0 ∘ \theta =60^{\circ} θ=60 θ = 13 5 ∘ \theta =135^{\circ} θ=135的方向图(这里没有置于极坐标中是为了方便对比)

阵列信号处理笔记(3):阵列调向、栅瓣、半功率波束带宽、端射阵列

  很显然这再一次印证了 θ \theta θ域的调向并不是简单的平移,因为主瓣、旁瓣形态都发生了一些改变。因此有必要重新研究一下调向过程中HPBW的变化。

阵列信号处理笔记(3):阵列调向、栅瓣、半功率波束带宽、端射阵列

  如图所示,在u域中,HPBW可以简单表示为
H P B W = u r − u l = ( u 0 + 0.45 λ N d ) − ( u 0 − 0.45 λ N d ) (9) \mathrm{HPBW}=u_r-u_l=\left( u_0+0.45\frac{\lambda}{Nd} \right)-\left( u_0-0.45\frac{\lambda}{Nd} \right)\tag{9} HPBW=urul=(u0+0.45Ndλ)(u00.45Ndλ)(9)
利用u域与 θ \theta θ域的关系可得(注意arccos在[-1,1]是单调减函数)
θ H = θ r − θ l = arccos ⁡ ( u 0 − 0.45 λ N d ) − arccos ⁡ ( u 0 + 0.45 λ N d ) (10) \theta_{H}=\theta_r-\theta_l=\arccos\left( u_0-0.45\frac{\lambda}{Nd} \right)-\arccos \left( u_0+0.45\frac{\lambda}{Nd} \right)\tag{10} θH=θrθl=arccos(u00.45Ndλ)arccos(u0+0.45Ndλ)(10)
这个式子看似挺对的哈,其实不难发现可能存在一个 u o ′ u_o' uo使得
u 0 ′ + 0.45 λ N d > 1 (11) u_0'+0.45 \frac{\lambda}{Nd} > 1\tag{11} u0+0.45Ndλ>1(11)
这时候实数域上的反余弦已经没有定义了,很显然这个时候已经找不到 θ l \theta_l θl了,这个极限角度就称为扫描限(Scan Limit)。那么这是什么情况呢…我一开始看教材,这段也挺迷的,然后MATLAB做了一下仿真豁然开朗。

阵列信号处理笔记(3):阵列调向、栅瓣、半功率波束带宽、端射阵列

  上面这张动图做的是波束从 9 0 ∘ 90 ^{\circ} 90调向至 0 ∘ 0^{\circ} 0的情形,可以看到 θ H \theta_H θH在逐渐变大,在大概20°左右的时候就超出扫描限了,直观来看就是左半功率点没了,因为它与左侧过来的一个栅瓣融合在一起。当 θ 0 = 0 \theta_0=0 θ0=0时(也就是主瓣沿着阵列方向走)称为端射(End Fire),如下图(偷来的)左侧所示。

阵列信号处理笔记(3):阵列调向、栅瓣、半功率波束带宽、端射阵列

  由(10)可知, θ H \theta_H θH是与波阵列孔径(就是 N d / λ Nd/\lambda Nd/λ)之比有关的,那么其实可以用下图描述其关系(注意这个图的横坐标和纵坐标都是对数的哈)。

阵列信号处理笔记(3):阵列调向、栅瓣、半功率波束带宽、端射阵列

  那么这张图说明了一个什么意思呢?我认为大致有2个。

  首先可以肯定的是,当调向越接近正向侧(Broadside,也就是 θ 0 = 9 0 ∘ \theta_0=90^\circ θ0=90孔径越大HPBW越小,这意味着大孔径的阵列具有更加优异的角度分辨性能

  其次,当调向越接近端射,HPBW增大越快,也就是说角度分辨率恶化速度越快。这意味着在工程上,阵列调向角度不宜过大,过大的调向角度会导致主瓣宽度增加(另外还有自耦问题和栅瓣迫近的问题)。


调向对HPBW的影响

  上面通过一张图定性的阐述一些调向对阵列性能的影响,这里还是要深入探讨一下。当调向角度接近正侧向(Broadside, θ = π 2 \displaystyle \theta = \frac{\pi}{2} θ=2π)时具有最窄的HPBW。对(10)使用拉格朗日中值定理可得
θ H = 0.891 λ N d 1 1 − ξ 2 , ξ ∈ [ cos ⁡ θ 0 − 0.45 λ N d , cos ⁡ θ 0 + 0.45 λ N d ] (12) \theta_H=0.891\frac{\lambda}{Nd}\frac{1}{\sqrt{1-\xi^2}},\xi\in[\cos \theta_0-0.45\frac{\lambda}{Nd},\cos \theta_0+0.45\frac{\lambda}{Nd}]\tag{12} θH=0.891Ndλ1ξ2 1,ξ[cosθ00.45Ndλ,cosθ0+0.45Ndλ](12)
显然当 N d / λ → 0 Nd/\lambda\to 0 Nd/λ0时, H P B W → 0 HPBW\to 0 HPBW0,不妨取 ξ \xi ξ为区间中点,那么
θ H ≈ 0.891 λ N d csc ⁡ θ 0 (13) \theta_H\approx 0.891 \frac{\lambda}{Nd}\csc \theta_0\tag{13} θH0.891Ndλcscθ0(13)

《阵列信号处理》原书这里写的是 csc ⁡ θ T ‾ \csc\overline{\theta_T} cscθT,应该是一个笔误,如果用余角应该写 sec ⁡ θ T ‾ \sec \overline{\theta_T} secθT

  那么(13)说滴究竟是什么意思捏??我觉得需要改写一下这个式子,这样直观意义更加明显
θ H ≈ 0.891 λ N ( d sin ⁡ θ 0 ) (14) \theta _H\approx 0.891 \frac{\lambda}{N\left( d \sin \theta_0 \right)}\tag{14} θH0.891N(dsinθ0)λ(14)
  在上一篇文章曾贴了一张图

阵列信号处理笔记(3):阵列调向、栅瓣、半功率波束带宽、端射阵列

  根据幼儿学学过的三角函数知识不难发现,此时阵元的等效的间距其实变成了 d sin ⁡ θ 0 d \sin \theta_0 dsinθ0,如果带入上一篇文章讨论过的 θ \theta θ域的HPBW公式不难得到(14)的结论。也就是说,向端射侧调向相当于降低了阵列孔径,这也能解释为什么越接近端射主瓣宽度越宽。这种现象早在上一篇文章介绍空域采样理论解释的时候就已经能够预见。

  当 θ 0 = 0 \theta_0=0 θ0=0时,也就是端射阵列时,很显然
θ H = 2 arccos ⁡ ( 1 − 0.45 λ N d ) (15) \theta_H=2 \arccos \left( 1-0.45 \frac{\lambda}{Nd} \right)\tag{15} θH=2arccos(10.45Ndλ)(15)
改写一下上式,并利用三角升幂与等价无穷小公式,可以得到
θ H ≈ 2 0.891 λ N d (16) \theta_H \approx 2 \sqrt{0.891 \frac{\lambda}{Nd}}\tag{16} θH20.891Ndλ (16)

简单推导一下,俩改变同时取余弦并移项得到
1 − cos ⁡ ( θ H 2 ) = 0.45 λ N d 1-\cos\left( \frac{\theta_H}{2} \right)=0.45 \frac{\lambda}{Nd} 1cos(2θH)=0.45Ndλ
左边用一下升幂可以得到
sin ⁡ ( θ H 4 ) = 0.45 λ 2 N d \sin \left( \frac{\theta_H}{4} \right)=\sqrt{\frac{0.45\lambda}{2Nd}} sin(4θH)=2Nd0.45λ
N d / λ → 0 Nd/\lambda\to 0 Nd/λ0时, H P B W → 0 HPBW\to 0 HPBW0,对左边用一下等价无穷小 sin ⁡ ( θ H 4 ) ∼ θ H 4 \displaystyle \sin\left( \frac{\theta _H}{4} \right)\sim \frac{\theta _H}{4} sin(4θH)4θH,简化之可得
θ H ≈ 2 0.891 λ N d \theta_H \approx 2 \sqrt{0.891 \frac{\lambda}{Nd}} θH20.891Ndλ


工程相关

  根据幼儿园学的信号与系统的相关经验,一个窗的长度越长主瓣宽度就越窄,这种奇妙的时频对偶特性同样体现在空域中,正如上图所示,阵列的孔径波越大,可以预见的是主瓣宽度也会越窄,HPBW也更小,相应的角度分辨率也会越大。然而大孔径有赖于阵列间距d和阵元数量N,根据前面提到的空域采样定理,增加d会导致不满足无混叠条件,增加N可能带来潜在成本增加(特别是硬件的开销和算力需求),并且过小的d又会使得天线尺寸受限而影响性能,这是一种compromise的艺术。

  下图是TI公司最新的毫米波雷达SOC AWR2944评估版板载的阵列,其中左边是接收天线,右边是发射天线。该阵列的设计使用了一种叫做虚拟阵列的技术,通过特殊的非均匀阵元排列达到提升角度分辨率的效果。

阵列信号处理笔记(3):阵列调向、栅瓣、半功率波束带宽、端射阵列

  这种骚操作可以在保证单个天线性能的前提下更好的平衡设计复杂度以及成本。

阵列信号处理笔记(3):阵列调向、栅瓣、半功率波束带宽、端射阵列

  此外对于特定的应用,不需要如此之高的扫描范围,那么对阵列间距可以适当放宽,根据(7)的结论可以得到
d ⩽ 1 1 + ∣ sin ⁡ θ m a x ‾ ∣ d \leqslant \frac{1}{1+\left| \sin \overline{\theta_{max}} \right|} d1+ sinθmax 1
其中这个 θ m a x ‾ \overline{\theta_{max}} θmax是最大调向角度的余角。


MATLAB代码

阵列调向u域平移的动图

clc;
clear;
close all;

lambda = 1;
d = lambda / 2;

for u0 = [-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1]
    hold off
    [B, u] = get_B_u(10, d, lambda, u0);
    plot(u, 20 * log10(abs(B)),'linewidth', 1.3);
    Graph_Set(gca,gcf, [-4 4],[-30 20],'u','','N=10',[900,400]);
    hold on;
    fill([-1,-1,1,1],[20,-30,-30,20],'r','FaceAlpha',0.1);
    text(-0.65,18,'Visible Region','FontSize',14);
    text(-0.35,15,['u = ' num2str(u0, '%.2f')],'FontSize',16);
    text(-0.35,12,['\theta = ' num2str(acos(u0) / pi * 180, '%.2f') '^{\circ}'],'FontSize',16);
    set(gcf,'position',[500,500,900,400]);
    drawnow;
    pause(1);
end


function [B, u] = get_B_u(N, d, lambda, u0)
u = -4 : 0.001 : 4;
B = 1 / N * sin(N * pi / lambda * d * (u-u0)) ./ sin(pi / lambda * d * (u-u0));
end


function Graph_Set(ax, fig, XLim, YLim, Xlabel, Ylabel, Title, size)
ax.FontSize = 11;
ax.Title.String = Title;
ax.XLabel.String = Xlabel;
ax.YLabel.String = Ylabel;
ax.XLim = XLim;
ax.YLim = YLim;
ax.XGrid = 'on';
ax.YGrid = 'on';
ax.XMinorTick = 'on';
ax.YMinorTick = 'on';
set(fig,'position',[500,300, size]);
end

θ \theta θ域调向, θ = 0 ∘ \theta =0^{\circ} θ=0 θ = 6 0 ∘ \theta =60^{\circ} θ=60 θ = 13 5 ∘ \theta =135^{\circ} θ=135的方向图

clc;
clear;
close all;
lambda = 1;

[B, u] = get_B_theta(10, lambda * 0.5, lambda, 0);
B_db = 20 * log10(abs(B));
subplot(3,1,1);
hold on
plot(u, B_db,'linewidth', 1.3);
fill([-3,0,3],[5,1,5],'r');
hold off
Graph_Set(gca,gcf,[-180 180],[-30 20],'\theta','','\theta_0=0^{\circ}',[900,600]);

[B, u] = get_B_theta(10, lambda * 0.5, lambda, 60);
B_db = 20 * log10(abs(B));
subplot(3,1,2);
hold on
plot(u, B_db,'linewidth', 1.3);
fill([57,60,63],[5,1,5],'r');
hold off
Graph_Set(gca,gcf,[-180 180],[-30 20],'\theta','','\theta_0=60^{\circ}',[900,600]);

[B, u] = get_B_theta(10, lambda * 0.5, lambda, 135);
B_db = 20 * log10(abs(B));
subplot(3,1,3);
hold on
plot(u, B_db,'linewidth', 1.3);
fill([132,135,138],[5,1,5],'r');
hold off
Graph_Set(gca,gcf,[-180 180],[-30 20],'\theta','','\theta_0=135^{\circ}',[900,600]);


function [B, theta] = get_B_theta(N, d, lambda, theta0)
theta = -180 : 0.01 : 180;
B = 1 / N * sin(N * pi / lambda * d * (cos(theta/180*pi)-cos(theta0/180*pi))) ./ sin(pi / lambda * d * (cos(theta/180*pi)-cos(theta0/180*pi)));
end


function Graph_Set(ax, fig, XLim, YLim, Xlabel, Ylabel, Title, size)
ax.FontSize = 11;
ax.Title.String = Title;
ax.XLabel.String = Xlabel;
ax.YLabel.String = Ylabel;
ax.XLim = XLim;
ax.YLim = YLim;
ax.XGrid = 'on';
ax.YGrid = 'on';
ax.XMinorTick = 'on';
ax.YMinorTick = 'on';
set(fig,'position',[500,300, size]);
end

阵列调向 θ \theta θ域变化的动图

clc;
clear;
close all;

lambda = 1;
theta0 = 20;
N = 10;
d = lambda * 0.5;

for theta0 = 90 : -5 : 0
hold off
[B, theta] = get_B_theta(N, d, lambda, theta0);
B_db = 20 * log10(abs(B));
plot(theta, B_db,'linewidth', 1.3);
Graph_Set(gca,gcf,[-180 180],[-30 20],'\theta','','',[900,400]);
hold on;
theta_hpbw_r = acos(cos(theta0 / 180 * pi) - 0.45 * lambda /(N * d)) / pi * 180;
theta_hpbw_l = acos(cos(theta0 / 180 * pi) + 0.45 * lambda /(N * d)) / pi * 180;
text(-70,16,['\theta   = ' num2str(theta0, '%.2f') '^{\circ}'],'FontSize',20);
if(real(theta_hpbw_l) ~= 0)
    fill([theta_hpbw_l,theta_hpbw_l,theta_hpbw_r,theta_hpbw_r],[20,-30,-30,20],'r','FaceAlpha',0.1);
    text(-70,11,['\theta_H = ' num2str(theta_hpbw_r - theta_hpbw_l, '%.2f') '^{\circ}'],'FontSize',20)
    
else
    text(-120,11,'Exceed Scan Limit','FontSize',20);
end
drawnow;
pause(0.5);
end

function [B, theta] = get_B_theta(N, d, lambda, theta0)
theta = -180 : 0.01 : 180;
B = 1 / N * sin(N * pi / lambda * d * (cos(theta/180*pi)-cos(theta0/180*pi))) ./ sin(pi / lambda * d * (cos(theta/180*pi)-cos(theta0/180*pi)));
end

function Graph_Set(ax, fig, XLim, YLim, Xlabel, Ylabel, Title, size)
ax.FontSize = 11;
ax.Title.String = Title;
ax.XLabel.String = Xlabel;
ax.YLabel.String = Ylabel;
ax.XLim = XLim;
ax.YLim = YLim;
ax.XGrid = 'on';
ax.YGrid = 'on';
ax.XMinorTick = 'on';
ax.YMinorTick = 'on';
set(fig,'position',[500,200,size]);
end

HPBW与阵列孔径、调向角度的关系图

这是原书自带的代码,加了点东西美化一下(面子工程)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Figure 2.24
% HPBW versus steering angle
% Lillian Xu
% Modified by Xin Zhang
% Last updated by L. Xu 11/30/00, K. Bell 7/22/01, 10/4/01, 10/17/01
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

clear all;
close all;

Nd_set=[1000:-5:700 700:-0.5:200 200:-0.05:20 15:-0.005:1];
theta_deg=[2.5 5 10 20 30 45 90];
%theta_deg=[2.5 5 10 20 30 45 60 90];
theta_set=theta_deg*pi/180;
figure
for num=1:size(theta_set,2)
    theta=theta_set(num);
    bw=0;
    for num1=1:size(Nd_set,2)
        Nd=Nd_set(num1);
        r=cos(theta)+0.443/Nd;
        if abs(r)<=1
            bw(num1)=acos(r)-acos(cos(theta)-0.443/Nd);
        end
    end
    loglog(Nd_set(1:size(bw,2)),abs(bw*180/pi),'linewidth', 1.3);
    hold on
    rightpoint=abs(bw(1)*180/pi);
    text(1040,rightpoint,[num2str(theta_deg(num)),'^\circ'],'fontsize',10); % used to be 7
end
axis([1 1000 0.04 100])
xlabel('{\itNd}/\lambda','Fontsize',16)
ylabel('3-dB beamwidth in degrees','Fontsize',16)

scanlimit=-acos(1-2*0.443./Nd_set);
loglog(Nd_set,abs(scanlimit*180/pi),'--','linewidth', 1.3)

Endfire = 2*acos(1-0.433./Nd_set);
loglog(Nd_set,abs(Endfire*180/pi),'linewidth', 1.3)
rightpoint=abs(Endfire(1)*180/pi);
text(1040,rightpoint,'\theta=0^\circ','fontsize',10); % used to be 7
%title('HPBW versus steering angle: standard linear array with uniform weighting')
text(12,35,'Endfire','Fontsize',12)
text(12,14.4,'Scan limit','Fontsize',12)
text(12,1.8,'Broadside','Fontsize',12)
plot([1 1000],[0.1 0.1],':')
plot([1 1000],[1 1],':')
plot([1 1000],[10 10],':')
plot([1 1000],[100 100],':')
plot([10 10],[0.04 200],':')
plot([100 100],[0.04 200],':')
axis([1 1000 0.04 200])
set(gcf,'position',[500,200,1200,600]);
gca.XGrid = 'on';
gca.YGrid = 'on';
gca.XMinorTick = 'on';
gca.YMinorTick = 'on';
grid on

其他乱七八糟的

  这篇文章里用了几个动图,感觉效果还挺不错的。其实本来MATLAB就可以做gif,不过出来的文件实在有些大啊,这里还是采用了保存图片+第三方软件生成gif。

  MATLAB保存gif的语句是

print(gcf,'-dpng','example.png');

  这里强烈安利一个图像方面大名鼎鼎的开源软件ImageMagick,这个软件有非常丰富的说明文档,包括详细的技术,特别值得一读。我曾经做过一些图像方面的研究,代码参考了很多ImageMagick源码。

  例如将1.png、2.png、3.png合并成out.gif,每一张图片300ms,循环播放,可以使用如下命令

convert.exe -delay 30 1.png 2.png 3.png -loop 0  out.gif

  其中-delay 30表示一帧300ms,-loop 0表示无限次循环播放。需要注意的是,一定要把ImageMagick添加到环境变量中,不然convert就找不到命令了文章来源地址https://www.toymoban.com/news/detail-510092.html

到了这里,关于阵列信号处理笔记(3):阵列调向、栅瓣、半功率波束带宽、端射阵列的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 语音信号处理基础知识之频谱、相位谱、幅度谱、功率谱及语谱图

    一段音频信号在时域上,可以用一个实数向量来表示。这个数组的大小=采样率*音频时长。举个例子:一段采样率为8000,长15.6s的音频在matlab中表示为: 15.6x8000=124800大小的实数向量 下面是利用matlab读取.wav文件和.pcm文件的两种方法 从上图可以看出,音频信号在matlab中就是用一

    2024年02月05日
    浏览(101)
  • 【阵列信号处理】空间匹配滤波器、锥形/非锥形最佳波束成形器、样本矩阵反演 (SMI) 研究(Matlab代码实现)

    💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码实现 空间匹配

    2024年02月14日
    浏览(46)
  • 语音信号处理 —— 笔记(一)音频信号处理

      声音的产生 :能量通过声带使其振动产生一股基声音,这个基声音通过声道 ,与声道发生相互作用产生共振声音,基声音与共振声音一起传播出去。 传感器以 某种频率 探测声音的振幅强度以及振动方向,所得到的一系列随时间变化的点。 传感器的探测频率,即为采样

    2023年04月09日
    浏览(55)
  • Matlab信号处理笔记

    寒假开始学习基于MATLAB的信号处理。学习教材: 以此博客来记录 Matlab基本函数-fix函数 与C语言的switch-case语句不同的是,在MATLAB语言中,当其中一个case语句后的条件为真时,switch-case语句不对其后的case语句进行判断,也就是说在MATLAB语言中,即使有多条case判断语句为真,也

    2024年02月07日
    浏览(57)
  • MATLAB GUI笔记(十):音频信号处理

    选择Blank GUI,然后更改保存路径 改变字体大小和显示内容 更改字体大小和显示内容 注意:以下代码中的部分变量使用global,是全局变量,这样别的控件callback函数也能调用该变量。 可以更改字体大小和显示内容 查看属性并更改字体大小和显示内容 面板 单选按钮 按钮 静态文

    2024年02月09日
    浏览(45)
  • MATLAB信号处理与应用 读书笔记 一

    完成了基本操作,今天组数也正常,需要对应解决fsctrl文件中的信号处理相关 重点关注4傅里叶变换,6FIR滤波器,10信号处理中的应用 字符的链接[\\\'aa\\\',\\\'bb\\\']; FFT用DFT原理,理解起来还是吃力 FFT绘图部分,原信号: 叠加上随机噪声 plot画图,画连续的也需要进行点数离散化,点

    2024年02月04日
    浏览(43)
  • 数字信号处理教程学习笔记1-第2章时域中的离散信号和系统

    信号处理的任务示意方框图 模拟信号和数字信号分别是啥样的,有啥区别

    2024年01月22日
    浏览(54)
  • EMC学习笔记(九)特殊信号的EMC处理(一)

    在PCB的EMC设计考虑中,我们主要的精力都是围绕一些为数不多的特殊信号的处理上。从信号与外界的关系来分,可分为强信号与小弱信号;从信号的种类来分,需要关注的有时钟、总线、I/O、复位、接口、电源、地等。 经验根据,二极管三极管之间跨界RC或者C吸收电路,推荐

    2024年02月10日
    浏览(43)
  • 数字信号处理翻转课堂笔记17——窗函数法设计FIR滤波器及matlab实现

    对应教材:《数字信号处理(第五版)》西安电子科技大学出版社,丁玉美、高西全著 (1)窗函数法设计FIR线性相位滤波器的原理; (2)加窗效应:加窗对滤波器特性的影响(难点); (3)典型窗函数及其主要特性和参数(重点); (4)窗函数法设计FIR滤波器的步骤(

    2024年01月16日
    浏览(53)
  • FPGA学习笔记(八)同步/异步信号的打拍分析处理及亚稳态分析

    一、FPGA学习笔记(一)入门背景、软件及时钟约束 二、FPGA学习笔记(二)Verilog语法初步学习(语法篇1) 三、FPGA学习笔记(三) 流水灯入门FPGA设计流程 四、FPGA学习笔记(四)通过数码管学习顶层模块和例化的编写 五、FPGA学习笔记(五)Testbench(测试平台)文件编写进行

    2024年02月01日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包