I'm interested in sending digital data over ultrasound.
My initial thought is that it should be first converted to BMC:

And then phase shift encoded (PSK):

I initially thought to use a Goertzel filter to decode it, but this runs into trouble: Extracting phase using Goertzel filter in Python
What would be a practical mechanism?
Is there a more intelligent way to encode the data, maybe using two frequencies and taking the relative strength at any moment in time?