我是 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)}]
如果有人能向我展示如何做到这一点,那么至少我会知道如何为其他功能创建子程序。
答案 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