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?

 채택된 답변

Matt J
Matt J 2013년 9월 29일
편집: Matt J 2013년 9월 29일

0 개 추천

y will not be 14 exactly because you use non-integer arithmetic to generate it. Using round() might be a possible fix.

추가 답변 (2개)

dpb
dpb 2013년 9월 29일
편집: dpb 2013년 9월 30일
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...

댓글 수: 2

Hmm where does that discrepancy in y values come from?
FP rounding...

댓글을 달려면 로그인하십시오.

Wayne King
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

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에 대해 자세히 알아보기

질문:

Dan
2013년 9월 29일

댓글:

2016년 6월 3일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by