A device for transmitting data, the device comprising: a processor; a memory, the memory storing instructions, which when executed by the processor, cause the processor to perform operations comprising: receiving a bitstream for transmission; encoding the bitstream using an error correction code, thereby obtaining a coded bitstream; selecting a first symbol corresponding to one or more bits of the coded bitstream, the first symbol having a first value, the first symbol being selected based upon there being an adjacent second symbol corresponding to one or more bits of the coded bitstream that are consecutive to the one or more bits of the first symbol and which has a second value that is not the same as the first value and that is mapped under a modulation scheme to a second constellation point that is within a threshold distance of a first constellation point to which the first value is mapped under the modulation scheme; changing the first symbol from the first value to a third value such that the second constellation point is not within the threshold distance of a third constellation point to which the third value is mapped under the modulation scheme, thereby obtaining a modified bitstream; modulating the modified bitstream according to the modulation scheme, thereby generating a modulated bitstream; and transmitting the modulated bitstream, including transmitting the third value instead of the first value for the first symbol. a processor; a memory, the memory storing instructions, which when executed by the processor, cause the processor to perform operations comprising: receiving a bitstream for transmission; encoding the bitstream using an error correction code, thereby obtaining a coded bitstream; selecting a first symbol corresponding to one or more bits of the coded bitstream, the first symbol having a first value, the first symbol being selected based upon there being an adjacent second symbol corresponding to one or more bits of the coded bitstream that are consecutive to the one or more bits of the first symbol and which has a second value that is not the same as the first value and that is mapped under a modulation scheme to a second constellation point that is within a threshold distance of a first constellation point to which the first value is mapped under the modulation scheme; changing the first symbol from the first value to a third value such that the second constellation point is not within the threshold distance of a third constellation point to which the third value is mapped under the modulation scheme, thereby obtaining a modified bitstream; receiving a bitstream for transmission; encoding the bitstream using an error correction code, thereby obtaining a coded bitstream; selecting a first symbol corresponding to one or more bits of the coded bitstream, the first symbol having a first value, the first symbol being selected based upon there being an adjacent second symbol corresponding to one or more bits of the coded bitstream that are consecutive to the one or more bits of the first symbol and which has a second value that is not the same as the first value and that is mapped under a modulation scheme to a second constellation point that is within a threshold distance of a first constellation point to which the first value is mapped under the modulation scheme; changing the first symbol from the first value to a third value such that the second constellation point is not within the threshold distance of a third constellation point to which the third value is mapped under the modulation scheme, thereby obtaining a modified bitstream; modulating the modified bitstream according to the modulation scheme, thereby generating a modulated bitstream; and transmitting the modulated bitstream, including transmitting the third value instead of the first value for the first symbol.