Octave:如何对傅立叶级数函数进行矢量化?

时间:2018-03-29 03:03:25

标签: vectorization octave

假设我有复合信号;通过傅立叶分析,我找到了余弦(a)和正弦(b)项的系数,并将它们与频率一起放在一个矩阵中。使用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个间隔出现混叠。

1 个答案:

答案 0 :(得分:2)

您可以在transposing t后使用正常的矩阵乘法获得余弦和正弦内的结果。将其与C列相乘可以使用隐式展开(.*),然后沿着行进行sum

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