Why am I getting Index exceeds the number of array elements. Index must not exceed 751.

1 vue (au cours des 30 derniers jours)
clear
syms t;
Fs = 1.5; % Sampling frequency
T = 1/Fs; % Sampling period
L = 1500; % Length of signal
t = (0:L-1)*T;
x1 = 4+4.005*(sin(t)); % First row wave
x2 = sin(3*t)/3; % Second row wave
x3 = sin(5*t)/5; % Third row wave
x4 = sin(7*t)/7; % Fourth row wave
X = [x1; x2; x3; x4];
n = 2^nextpow2(L);
dim = 2;
Y = fft(X,n,dim);
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);
for i=1:4
plot(0:(Fs/n):(Fs/2-Fs/n),p1(1:n/2))
title ('Amplitude Spectrum')
xlabel('time')
ylabel('y(t)')
end
Index exceeds the number of array elements. Index must not exceed 751.
  1 commentaire
David Hill
David Hill le 12 Fév 2022
for i=1:4
plot(0:(Fs/n):(Fs/2-Fs/n),p1(1:n/2))
title ('Amplitude Spectrum')
xlabel('time')
ylabel('y(t)')
end
Above makes no sense. You are repeating the same plot four times (nothing changes). You need to stop your code and look at the sizes of your arrays. (see my previous answer to your other same question)

Connectez-vous pour commenter.

Réponses (1)

Cris LaPierre
Cris LaPierre le 12 Fév 2022
Modifié(e) : Cris LaPierre le 12 Fév 2022
The error is due to the fact that you are inconsitant with the use of n and L. Once you define n, you should use that instead of L (when calculating Y, p2, and p1).
There is another issue. You create X as a 4x1500 but then never distinguish downstream rows and columns when indexing variables created from X. The result is that linear indexing is used, which does not get you the same result. This is likely why you are using a for loop to plot - once for each signal
Try this:
Fs = 1.5; % Sampling frequency
T = 1/Fs; % Sampling period
L = 1500; % Length of signal
t = (0:L-1)*T;
x1 = 4+4.005*(sin(t)); % First row wave
x2 = sin(3*t)/3; % Second row wave
x3 = sin(5*t)/5; % Third row wave
x4 = sin(7*t)/7; % Fourth row wave
X = [x1; x2; x3; x4];
n = 2^nextpow2(L);
dim = 2;
Y = fft(X,n,dim)'; % ###### transposed
f = 2*pi*Fs*(0:(n/2))/n; % <- multiplying ###### Changed L to n
p2 = abs(Y/n); % ###### Changed L to n
p1=p2(1:n/2+1,:); % ###### Changed L to n
p1(2:end-1,:) = 2*p1(2:end-1,:);
% for i=1:4 ###### Modifed so for loop is not needed
plot(0:(Fs/n):(Fs/2-Fs/n),p1(1:n/2,:))
title ('Amplitude Spectrum')
xlabel('time')
ylabel('y(t)')
legend

Catégories

En savoir plus sur Matrix Indexing dans Help Center et File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by