【发布时间】: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.com 或electronics.stackexchange.com 提出这个问题,因为它需要了解傅立叶合成。
-
请考虑写一个简洁的问题或标题。并提供一个最小的工作示例。您的任何代码都不会以
y和i运行,从未初始化。此外,您是否知道您不使用循环控制变量counter?
标签: matlab