I know this is old but anyway, it has nothing to do with coding or anything like this, it’s related to how BER is calculated. The system counts the number of bits that has an error, now to give the BER it divides the number of bits on a different number of bits depending on what kind of channel is used. For TCH, it will depend on the SACCH multiframe

so BER= ( Sum of bits with errors)/

sum of all bits)

Now for SACCH multiframe

you will have 4 multiframes ( 480 ms)

each includes 6 blocks of voice ( 120 ms)each with 378 bits

and one sacch block (456 bits)

so total=

4X6X378+456 = 9528

now for SDCCH, you will have the 102 multiframe

where each user will have 2 SDCCH

blocks and one SACCH block

=3X456= 1368

so the denominator will be always much less in SDCCH BER than TCH BER. Hence BER for SDCCH is always higher.