使用 Matlab 生成数组响应
Generating an array response using Matlab
我是Matlab的完全新手,以前从未使用过它,因此对如何生成子程序一无所知。我找到了关于生成矩阵和解决相关问题的教程,但到目前为止没有任何帮助我解决以下问题:
我想创建一个子程序来生成一个均匀线性阵列的阵列响应 a(\theta)
,该阵列具有 M
个元素和间距 \Delta
个波长,来自方向 [=14] =]度。
我还获得了以下代码: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)}]
如果有人可以向我演示这是如何完成的,那么至少我会知道如何为其他功能创建子例程。
因此您的函数将 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^x.
如果 theta
以弧度为单位,则此代码有效;否则,如果 theta
以度为单位,则必须使用 sind()
而不是 sin()
.
Matlab 的美妙之处在于它在矢量化表达式方面实际上非常快。确实有一种聪明的方法可以简化上面的代码,如下所示:
a2=exp(1i*2*pi*delta*sin(theta)*((1:M)-1));
和 a2
将与上面评估的 a
完全相同。这个简化的代码依赖于这样一个事实,即在 Matlab 中(大多数时候)您可以将整个值数组提供给给定函数(exp
,在我们的例子中),Matlab 将 return 计算函数在输入数组中的每一点:例如由于 sin([pi pi/2])
,我可以一次性评估 sin(pi)
和 sin(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
我是Matlab的完全新手,以前从未使用过它,因此对如何生成子程序一无所知。我找到了关于生成矩阵和解决相关问题的教程,但到目前为止没有任何帮助我解决以下问题:
我想创建一个子程序来生成一个均匀线性阵列的阵列响应 a(\theta)
,该阵列具有 M
个元素和间距 \Delta
个波长,来自方向 [=14] =]度。
我还获得了以下代码: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)}]
如果有人可以向我演示这是如何完成的,那么至少我会知道如何为其他功能创建子例程。
因此您的函数将 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^x.
如果 theta
以弧度为单位,则此代码有效;否则,如果 theta
以度为单位,则必须使用 sind()
而不是 sin()
.
Matlab 的美妙之处在于它在矢量化表达式方面实际上非常快。确实有一种聪明的方法可以简化上面的代码,如下所示:
a2=exp(1i*2*pi*delta*sin(theta)*((1:M)-1));
和 a2
将与上面评估的 a
完全相同。这个简化的代码依赖于这样一个事实,即在 Matlab 中(大多数时候)您可以将整个值数组提供给给定函数(exp
,在我们的例子中),Matlab 将 return 计算函数在输入数组中的每一点:例如由于 sin([pi pi/2])
,我可以一次性评估 sin(pi)
和 sin(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