Quantizing a filtered signal In the process of trying to learn dialup, I've managed to learn/figure out everything except how to convert a demodulated/filtered signal back into the original data.

Here I have a random two-bit signal (red) sampled at 16000Hz at 2400 symbols/s (gray lines separate symbols), as well as the filtered signal (blue). The filter is a raised-cosine filter with α=1200Hz, β=0.5, and a length of 27 samples.



Given the filtered signal, it's clear that a simple A/D converter is insufficient; for example, at about 7 symbols in (about a third from the left), the original signal crosses zero four times, whereas the filtered signal only crosses twice. I imagine this is due to higher frequencies being attenuated more than lower frequencies.

I realize that because the signal is being filtered at half the symbol rate, there shouldn't be any loss of information. How do I go about reconstructing the original signal from the filtered version?

In case it helps any: because the dialup training signal consists of known, pseudo-random data, should I use that to construct an adaptive filter/equalizer? Is it as "simple" as "un-attenuating" the higher frequencies?
Your low-pass filter's pass band is smaller than your signal's bandwidth, so it is destroying a significant portion of your signal.  Given that, you cannot reliably reproduce the original signal without using sophisticated techniques like error correction codes.

I would try increasing $\alpha$ to 2400 Hz.  Then the rolloff point will be 2400 * .5 = 1200.  The resulting signal should look much better.  If that filter bandwidth is too large you can find your sweet spot somewhere between 1200 and 2400 Hz.