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

14 visualizzazioni (ultimi 30 giorni)
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 Commento
Carlos Eduardo
Carlos Eduardo il 23 Mag 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.

Accedi per commentare.

Risposte (1)

Prasanna
Prasanna il 30 Set 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!

Translated by