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

问题描述 投票:1回答:1

我的目标是在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循环运算之间进行切换将大有帮助。

matlab
1个回答
0
投票

您可以使用kron达到目标,而无需for循环,即矩阵表示:

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
© www.soinside.com 2019 - 2024. All rights reserved.