让我们考虑以下等式
x(t)=sum(a(i)*sin(2*pi*f(i)*t+b(i)*cos(2*pi*f(i)*t))
其中i = 1,2,...... m和频率f=[f1,f2,.....fm]
和t=[t1,t2,....tn]
我希望按sin(2*pi*f(i)*t)
和cos(2*pi*f(i)*t)
创建矩阵,显然它是带维度NX2*m
的矩阵,我尝试过以下代码
function [amplitudes]=determine_amplitudes(y,f,t,n,m);
X=zeros(n,2*m);
for i=1:n
for k=1:m
if mod(k,2)==1
X(i,k)=sin(2*pi*f(k)*t(i));
else
X(i,k)=cos(2*pi*f(k)*t(i);
end
end
end
end
我使用mod运算符来确定如果k是奇数索引,则应该写入sin值,否则为余弦值,但问题是我不确定给定矩阵是否具有维度NX2 * m,那么如何创建这样的矩阵,使其不超过频率数组的边界索引,回想一下频率数组跟随f=[f1,f2,..fm]
,所以我的问题很简单,就是如何在2 * m位置应用m频率,谢谢你的帮助
更新:
假设m = 3,频率f=[12.5 13.6 21.7]
然后我们有跟随矩阵,也假设
n=4 t=[0.01 0.02 0.03 0.04]
sin(2*pi*f(1)*t(1)) cos(2*pi*f(1)* t(1)) sin(2*pi*f(2)*t(1)) cos(2*pi*f(2)*t(1)) sin(2*pi*f(3)*t(1)) cos(2*pi*f(3)*t(1))
答案 0 :(得分:1)
无循环版
[f1,t1] = meshgrid(f',t');
p1 = sin(bsxfun(@times,f1,2*pi*t')); %%// Create sin copy '
p2 = cos(bsxfun(@times,f1,2*pi*t')); %%// Create cos copy '
d1 = [p1;p2];
final_matrix = reshape(d1,size(p1,1),[]);
天真循环版
final_matrx2 = zeros(n,2*m);
for k1=1:n
for k2=1:2*m
if rem(k2,2)==1
final_matrx2(k1,k2) = sin(2*pi*f(ceil(k2/2))*t(k1));
else
final_matrx2(k1,k2) = cos(2*pi*f(ceil(k2/2))*t(k1));
end
end
end