在matlab中使用for循环和矩阵乘法实现函数

  • 本文关键字:函数 实现 循环 matlab for matlab
  • 更新时间 :
  • 英文 :


我的目标是在matlab中实现一个执行傅立叶合成的函数,作为学习语言的一部分。该函数实现以下表达式:

y = sum(ak*exp((i*2*pi*k*t)/T)

其中k是指数,ak是傅立叶系数的矢量,t是采样时间的时间矢量,t是信号的周期。

我试过这样的东西:

for counter = -N:1:N
k = y+N+1;
y(k) = ak(k)*exp((i*2*pi*k*t)/T);
% y is a vector of length 2N+1
end

然而,这给了我一个错误,即双方的项目数量不相等。这对我来说是有意义的,因为t是一个任意长度的向量,因此我试图使y(k(等于许多东西,而不是一个东西。相反,我怀疑我需要尝试一些类似的东西:

for counter = -N:1:N
k=y+N+1;
for t = 0:1/fs:1
%sum over t elements for exponential operation
end
%sum over k elements to generate y(k)
end

然而,我应该能够使用纯矩阵乘法来实现这一点。我怎么能这么做?我试着了解一下Matlab在做什么,但老实说,它与我所知道的其他语言相去甚远,我真的不知道Matlab在幕后做什么。了解如何在矩阵运算和for循环运算之间进行更改将非常有帮助。

您可以在没有for循环的情况下使用kron来达到目标,即矩阵表示:

y = a*exp(1j*2*pi*kron(k.',t)/T);

其中akt均假定为行向量

示例

N = 3;
k = -N:N;
t = 1:0.5:5;
T = 15;
a = 1:2*N+1;
y = a*exp(1j*2*pi*kron(k.',t)/T);

使得

y =
Columns 1 through 6:
19.1335 +  9.4924i   10.4721 + 10.6861i    2.0447 +  8.9911i   -4.0000 +  5.1962i   -6.4721 +  0.7265i   -5.4611 -  2.8856i
Columns 7 through 9:
-2.1893 -  4.5489i    1.5279 -  3.9757i    4.0000 -  1.7321i

相关内容

  • 没有找到相关文章

最新更新