why am I getting "Array indices must be positive integers or logical values"

12 views (last 30 days)
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;
Array indices must be positive integers or logical values.
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)')

Accepted Answer

Voss
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)')

More Answers (2)

Jan
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))

Image Analyst
Image Analyst on 12 Feb 2022

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by