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

hierarchical Nuttall basis functions #2904

Open
stevengj opened this issue Sep 6, 2024 · 0 comments
Open

hierarchical Nuttall basis functions #2904

stevengj opened this issue Sep 6, 2024 · 0 comments

Comments

@stevengj
Copy link
Collaborator

stevengj commented Sep 6, 2024

Currently, the adjoint optimization can be slow if you use closely spaced frequency points in the DFT, because then it will try to use very narrow-bandwidth Nuttall basis functions to fit it.

Since this is really a form of radial basis function (RBF) fit, there is a lot of RBF theory that can help us out here.

In particular, one known trick is to use a hierarchy of RBFs. For example:

  1. First, do a least-square fit to a single Nuttall basis function that spans the whole bandwidth. Subtract this from the actual frequency spectrum to get an error.
  2. Second, fit the error from (1) to two Nuttall basis functions of half the width. Subtract this fit from the error to get a new error.
  3. Repeat: double the number of basis functions and fit to the error from the previous step. Stop when the error is below some tolerance.

This should be no worse than what we are doing now (when the number of basis functions becomes ≥ the number of frequency points, the error will go to zero), and it may well be much better: we might be able to stop when the windows are much wider than they are now (especially if the error tolerance is moderate), leading to much shorter adjoint simulations.

For a review of the theory of multi-level RBF methods, see e.g. section 3.1 of this thesis (Wilna du Toit, 2008).

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

No branches or pull requests

1 participant