使用Matlab生成数组响应

时间:2016-04-22 16:55:53

标签: matlab signal-processing

我是 Matlab 中的一个完全新手,之前从未使用过它,因此没有丝毫知道如何生成子程序。我已经找到了关于生成矩阵和解决相关问题的教程,但到目前为止没有什么可以帮助我解决以下问题:

我想制作一个子程序来生成一个均匀线性阵列的数组响应a(\theta),其中M个元素和间距\Delta波长来自方向\theta的源度。

我还获得了以下代码:function a = gen_a(M,Delta,theta)

现在,据我所知,数组响应a(\theta)

给出
a(\theta)=[1 ; e^{j2\pi\Delta\sin(\theta)} ; ..... ; e^{j2\pi(M-1)\Delta\sin(\theta)}]

如果有人能向我展示如何做到这一点,那么至少我会知道如何为其他功能创建子程序。

1 个答案:

答案 0 :(得分:1)

因此,您的函数将输入delta(波长),M(数组元素数)和theta(到达方向)。

假设你的公式是正确的,你的第一个选择是写一个for循环而不是所有数组元素的运行。让我们调用m数组索引:

for m=1:M
    a(m)=exp(1i*2*pi*delta*sin(theta)*(m-1));
end

如果theta=pi/4; delta=1;M=10;(为了演示而只是一些随机数),您将拥有:

a =

  Columns 1 through 4

   1.0000 + 0.0000i  -0.2663 - 0.9639i  -0.8582 + 0.5133i   0.7233 + 0.6906i

  Columns 5 through 8

   0.4731 - 0.8810i  -0.9752 - 0.2214i   0.0462 + 0.9989i   0.9506 - 0.3105i

  Columns 9 through 10

  -0.5524 - 0.8336i  -0.6564 + 0.7544i

在上面的代码段中,pi是常量π,1i是虚数单位 j ,而exp(x)是一个简单评估 E 1 X 。
如果theta为弧度,则此代码有效;否则,如果theta为度,您必须使用sind()而不是sin()

Matlab的美妙之处在于它在矢量化表达式方面实际上非常快。事实上,有一种简化上述代码的聪明方法如下:

a2=exp(1i*2*pi*delta*sin(theta)*((1:M)-1));

a2与上面评估的a完全相同。这个简化的代码依赖于这样的事实:在Matlab(大多数时候)你可以提供给定的函数(在我们的例子中是exp)一整个值数组,Matlab将返回在每个点评估的函数。输入数组:例如由于sin(pi),我可以一次性评估sin(pi/2)sin([pi pi/2]),因为您可以看到我创建了一个输入向量并将此向量提取到sin()

因此,总之,您可以轻松地将您的函数编写为

function a = gen_a(M,Delta,theta)
    for m=1:M
        a(m)=exp(1i*2*pi*Delta*sin(Theta)*(m-1));
    end
end

function a = gen_a(M,Delta,theta)
    a=exp(1i*2*pi*Delta*sin(Theta)*((1:M)-1));
end