Octave:如何向量化傅里叶级数函数?

Octave: How to vectorize a Fourier series function?

假设我有一个复合信号;通过傅里叶分析,我找到了余弦 (a) 和正弦 (b) 项的系数,并将它们与以 Hz 为单位的频率一起放入矩阵中。使用 for 循环从系数和频率计算傅里叶级数,我得到了预期的结果。

%Startcode
t = linspace(1,5,100)';
a0 = 0;
a = [1;3;0;0];
b = [0;0;4;2];
w = [1;10;20;30];
C = [a,b,w];
k = length(w);
fs = a0 .* ones(length(t),1);
for j=1:k
    fs = fs + C(j,1)*cos(2*pi*C(j,3)*t) + C(j,2)*sin(2*pi*C(j,3)*t);
end
plot(t,fs);
%Endcode

但是,我想对代码进行矢量化以消除 for 循环。有什么建议吗?

UDATE:我应该这样修改代码:

t = linspace(1,5,200)';

因为只有 100 个间隔会出现混叠。

在行transposing t. Multiplying it with columns of C can be done with implicit expansion (.*) and then just sum之后用普通矩阵乘法可以得到余弦和正弦范围内的结果。

fs = a0 + sum( C(:,1).*cos(2*pi*C(:,3)*t.')  +  C(:,2).*sin(2*pi*C(:,3)*t.') );