假设我有复合信号;通过傅立叶分析,我找到了余弦(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个间隔出现混叠。
答案 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.') );