Subscript indices must either be real positive integers or logicals.
이전 댓글 표시
%Number of components
K = zeros(1,111);
%sampling frequency/timing interval
fs = 8000;
Fs = 10*fs;
T = 2;
%frequency components
fk =100:30:3400;
%amplitude components
Ak = rand(1,length(K));
%phase components
phik = 2*pi*rand(1,length(K));
for t = 0:(1/Fs):T %time interval
K = Ak.*cos(2*pi.*fk*t + phik);
y = t/(1/Fs)+1;
xt(1,y) = sum(K,2);
end
I'm trying to run this code but for some reason there is an error at y = 14 which is no where near the end of the loop. I'm pretty sure that xt(1,14) is a valid index. Any reason why this might be happening?
채택된 답변
추가 답변 (2개)
The answer is in the following--
>> fs = 8000;
>> Fs = 10*fs;
>> t=0:1/Fs:2;
>> y = t/(1/Fs)+1;
>> all(fix(y)==y)
ans =
0
>> neq=find(fix(y)~=y);
>> neq(1)
ans =
14
>> y(14)-fix(y(14))
ans =
1.7764e-15
>> length(neq)
ans =
39209
>> length(y)
ans =
160001
>>
Moral: Don't use FP calculations as indices...
Wayne King
2013년 9월 29일
편집: Wayne King
2013년 9월 29일
I'm not sure what you are trying to do, create a superposition of sine waves with different frequencies and a random phase and amplitudes? If so, I'll show you how to do that.
But your immediate issue here is that y=0 when t = 0 and then you try to access the zero-th column of xt(), but that can't exist.
You can do this.
Fs = 8000;
t = (0:1/Fs:2-1/Fs)';
fk = 100:30:3400;
X = zeros(length(t),length(fk));
phi = -pi+2*pi*rand(1,length(fk));
Ak = rand(1,length(fk));
tmat = repmat(t,1,length(fk));
omega = 2*pi*fk;
omega = repmat(omega,size(tmat,1),1);
phi = repmat(phi,size(tmat,1),1);
freq_phi = omega.*tmat+phi;
Ak = repmat(Ak,size(tmat,1),1);
sigz = Ak.*cos(freq_phi);
sig = sum(sigz,2);
Now plot the resulting signal
plot(t,sig)
댓글 수: 1
azure roy
2016년 6월 3일
theta_i(i,j)=2*pi*rand(1) this is showing subscript indices should be integer or logical value. please help with the solution.
카테고리
도움말 센터 및 File Exchange에서 Phased Array Design and Analysis에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!