Error using wavedec Expected X to be finite. Error in wavedec (line 34) validateat​tributes(x​,{'numeric​'},{'vecto​r','finite​','real'},​'wavedec',​'X');

14 views (last 30 days)
I am using wavedec to discritize my signal using 'db4' wavelet.
my X = acceleration vector(9000 x 1)
My X is finite. But I am getting a error that ' Error using wavedec Expected X to be finite'
My code :
[a,l] = wavedec(acc,3,'db4');
approx = appcoef(a,l,'db4');
[acd1,acd2,acd3] = detcoef(a,l,[1 2 3]);
figure
subplot(4,1,1)
plot(approx)
title('Approximation Coefficients')
subplot(4,1,2)
plot(acd3)
title('Level 3 Detail Coefficients')
subplot(4,1,3)
plot(acd2)
title('Level 2 Detail Coefficients')
subplot(4,1,4)
plot(acd1)
title('Level 1 Detail Coefficients')
please help me. Where I am wrong. I am unable to solve this problem.
  1 Comment
Carlos Eduardo
Carlos Eduardo on 23 May 2024
Hola, hermano, perdona por contestar tantos años tarde y en español, el problema puede radicar de dos situaciones, la primera es que el vector es incorrecto (obvio ahí lo dice) pero puede ser ue tengas una columna que enumere tus datos, lo cual es un porblema, el formato .txt ya organiza los datos y la última y es así cómo encontré solución, le tienes que agregar ceros a la izquierda de tus datos, por ejemplo si tienes un 41 y un 1023, lo que tienes que hacer para que los lea como un mismo vector es agregar los respectivos ceros a la izquierda, por ejemplo 00041 y 01023.
Espero le sea de ayuda a alguien más.

Sign in to comment.

Answers (1)

Prasanna
Prasanna on 30 Sep 2024
Hi Arvind,
The error message you are encountering, "Expected X to be finite," indicates that the wavedec function is detecting non-finite values (such as NaN or Inf) in your input vector acc. Although you mentioned that your data is finite, you can verify it programmatically using the below code to ensure there are no unexpected values. For Assumption, I am taking a random 9000x1 vector as the acceleration vector.
acc = rand(9000,1);
% Check for non-finite values
if any(~isfinite(acc))
error('Input vector contains non-finite values.');
end
% Clean the input vector (if necessary)
acc = fillmissing(acc, 'linear'); % Replace NaNs with linear interpolation
% Verify the input vector
assert(all(isfinite(acc)), 'Input vector must be finite.');
[a,l] = wavedec(acc,3,'db4');
approx = appcoef(a,l,'db4');
[acd1,acd2,acd3] = detcoef(a,l,[1 2 3]);
figure
subplot(4,1,1)
plot(approx)
title('Approximation Coefficients')
subplot(4,1,2)
plot(acd3)
title('Level 3 Detail Coefficients')
subplot(4,1,3)
plot(acd2)
title('Level 2 Detail Coefficients')
subplot(4,1,4)
plot(acd1)
title('Level 1 Detail Coefficients')
The above code gives the following as output:
For more documentation on the used functions, you can refer to the following links:
Hope this helps!

Community Treasure Hunt

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

Start Hunting!