【问题标题】:Implementing a Function using for-loops and matrix multiplication in matlab在matlab中使用for循环和矩阵乘法实现一个函数
【发布时间】:2020-03-04 21:18:52
【问题描述】:

我的目标是在 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 循环中的运算之间进行更改将非常有帮助。

【问题讨论】:

  • 您最好在math.stackexchange.comelectronics.stackexchange.com 提出这个问题,因为它需要了解傅立叶合成。
  • 请考虑写一个简洁的问题或标题。并提供一个最小的工作示例。您的任何代码都不会以 yi 运行,从未初始化。此外,您是否知道您不使用循环控制变量counter

标签: matlab


【解决方案1】:

您可以使用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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-18
    相关资源
    最近更新 更多