why am I getting "Array indices must be positive integers or logical values"
2 views (last 30 days)
Show older comments
clear
syms t;
Fs=5;
T=1/Fs;
L=1500;
t=(0:L-1)*T;
Yo=4+4.005*(sin(t)+sin(3*t)/3+sin(5*t)/5+sin(7*t)/7);
y = fft(Yo);
f=2*pi*Fs(0:(L/2))/L;
p2 = abs(y/L);
p1=p2(1:L/2+1);
p1(2:end-1) = 2*p1(2:end-1);
%f=2*pi*Fs(0:(L/2))/L;
plot(f,p1)
title ('Amplitude Spectrum')
xlabel('time')
ylabel('y(t)')
1 Comment
Accepted Answer
Voss
on 11 Feb 2022
You were indexing Fs with a vector that had a 0 in it. Looks like you meant to be multiplying Fs by that vector instead:
clear
syms t;
Fs=5;
T=1/Fs;
L=1500;
t=(0:L-1)*T;
Yo=4+4.005*(sin(t)+sin(3*t)/3+sin(5*t)/5+sin(7*t)/7);
y = fft(Yo);
% f=2*pi*Fs(0:(L/2))/L; % <- indexing
f=2*pi*Fs*(0:(L/2))/L; % <- multiplying
p2 = abs(y/L);
p1=p2(1:L/2+1);
p1(2:end-1) = 2*p1(2:end-1);
%f=2*pi*Fs(0:(L/2))/L;
plot(f,p1)
title ('Amplitude Spectrum')
xlabel('time')
ylabel('y(t)')
0 Comments
More Answers (2)
Jan
on 11 Feb 2022
The variable Fs has the value 5. Then the expression:
Fs(0:(L/2))
is treated as indices. 0 is not a valid index. In addition Fs is a scalar and indexing cannot work apart from the index 1.
Maybe you mean:
Fs * (0:(L/2))
0 Comments
See Also
Categories
Find more on Financial Toolbox in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!