What happens if SINR is < 1?
Yes, it is practical.

For example, if you have an ASK signal with modulation depth 60%:

&gt;&gt; am = [ (ones(1,100) * 0.2) (ones(1,200) * 0.8) (ones(1,200) * 0.2) (ones(1,100) * 0.8)];




Using a low-pass filter

&gt;&gt; d = fdesign.lowpass(0.01, 0.02, 0.01, 100);
&gt;&gt;  hd = design(d)

hd =

 FilterStructure: 'Direct-Form FIR'
      Arithmetic: 'double'         
       Numerator: [1x946 double]   
PersistentMemory: false            


you can reduce the output signal bandwidth in order to be nice to the neighbors:

&gt;&gt; amlp = filter2(hd.Numerator, sig);




The recipient gets a noisy signal

&gt;&gt; amno = amlp + 2*rand(1,600) - 0.5;




and also uses a lowpass filter to reconstruct it:

&gt;&gt; amre = filter2(hd.Numerator, amno) - mean(amno) + 0.5;




This signal is sufficiently similar to the original signal that you can decide between 0 and 1 bits, but you need a rather narrow filter here in order to remove the noise -- in my case, 1% of the sampling rate (that is the .01 above). Note that we're only interested in the signal at the points 50, 150, 250, ..., 550, i.e. the middle of each symbol.

In order to be able to reconstruct that signal, I had to use rather long symbols (100 samples). That is, with 100 Hz sampling rate, which would allow me to express frequencies up to 50 Hz, I can only transfer 1 bit per second.