Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Errors (IndexError) on silent waves (degenerate pathological cases) #19

Open
nyanpasu64 opened this issue Sep 8, 2018 · 2 comments
Open

Comments

@nyanpasu64
Copy link

  File "/home/jimbo1qaz/miniconda3/envs/wavetable/lib/python3.6/site-packages/waveform_analysis/freq_estimation.py", line 92, in freq_from_autocorr
    start = find(d > 0)[0]
IndexError: index 0 is out of bounds for axis 0 with size 0

If freq_from_autocorr is given a silent signal d contains a series of 0.

I feel the best solution is to just return some arbitrary value without crashing.


I don't remember if it happens in practice, but a while back I found that parabolic(f, 0) compares to f[-1] (which is wrong but doesn't crash) and parabolic(f, len(f)-1) compares to f[len(x)] which raises IndexError.

@endolith
Copy link
Owner

endolith commented Sep 8, 2018

I'm not sure if the frequency estimation function should handle this or not. If it should, it should probably return None, but maybe it should be the calling function's responsibility to only feed it signals with a frequency, or use try .. except to catch the errors when it doesn't.

@nyanpasu64
Copy link
Author

Idea: parabolic(f, x)

# if x < 0 or x >= len(f): raise IndexError(add meaningful message?)
if x <= 0 or x >= len(f) - 1:
    return (x, f[x]) # generates IndexError for x >= len(f), but not x < 0

Also, since freq_from_autocorr performs DC removal, I feel it's unacceptable (for my use cases) for a utility function to crash given any DC input, due to an unhandled internal IndexError. I think to make the function easier to integrate into surrounding code, it should provide a result (f=0?) with the same type as normal execution, or maybe raising ValueError (though I still don't like the idea of a frequency estimator crashing and taking down the entire app, given hard-to-estimate input where I probably don't care about the frequency).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants