Blind Demodulation via Convex and Non-Convex Programming