I'm trying to receive an ASK signal in the 433 MHz center frequency with a bandwidth of 100KHz. I'm using a CC1101 transceiver connected to a Raspberry Pi GPIO ports. However, there is an intermittent signal in the 433MHz center frequency coming from the sensors of my alarm system, so the RX doesn't get all the samples of my wanted signal and I'm not sure how I could filter the interference because both signals are "unknown" (they are not generated by me). I wonder how I could do this, at least in theory.
First of all, the CC1101 supports a number of other frequencies, so as a trivial solution, you can switch to using those.
The other thing that you can do at the RF module level is to "shift" your data out of the problematic region. Now, I am assuming that the other module is on 433MHz and it is not a similar module with similar operation. Let's assume that the interfering module is different than the one you are using.
What you could do, is shift to 4-FSK with the highest
DEVIATION_M (refer to the datasheet) but use it as 2-FSK. What you would be trying to do is use the two symbols that cause the largest deviation to the centre carrier frequency to avoid your data being contaminated by the interference. Usually, these two symbols would be
11 (notice these pairs). This is inefficient of course, but it might work as a quick workaround for you.
But what might be happening is that the other RF module is also behaving in the same way. It might also be doing Frequency Shift Keying, in which case, none of the frequencies your RF module might try to hop to is "safe" from noise.
In this case, you have to work with high levels of noise.
The number one way to guard against this kind of interference is with the use of coding.
This can take many forms and have various complexities. One of the simplest "encoding" schemes is a Repetition Code coupled with simple Majority Decoding scheme. You might notice above that your effective B-FSK used the symbols
11 which, effectively, is a bit like using a repetition code.
One of the issues you might face in this case is that you do not have access to the internals of the RF module. In other words, the only thing you would be doing here is repeat bits $N$ times and at the reception end, receive a frame and decide what bit was sent by assigning the frame to the majority of bits received (either $0$ or $1$).
Obviously the question now is, where does the frame start and where does it end?
To deal with this, you are now going to have to embed your data stream on some form of protocol that specifies that your actual message starts with something like
0000000000111111111100001111001101 followed by your encoded bits.
The frame start sequence has equal chances of being contaminated with noise as the rest of the data, but the idea is to be looking in to your incoming data stream for a sequence that looks as close as possible to the frame start sequence.
And thus, progressively, we are going closer and closer to convolutional codes where you would be inserting redundant
1s in a predictable way in your data stream to be able to decode the most likely sequence to have been sent. That is a bit more involved at the decoding side but convolutional codes are more powerful than plain repetition codes.
Hope this helps.
Have a model for the interference, if you can hopefully get the idea of amplitudes of the interference (you could get the idea using the following):
Since you mention that interference occurs at random times, get a spectrogram running on the received signal and watch for abrupt transitions (would occur when ur random interference occurs), then from the FFT knowledge about the interference you would get idea of interference power. Once you know this, model the random Interference as noise to your signal with appropriate variance and mean zero. The power of Interference is given by the FFT magnitude squared using parsevalls theorem. Then as a second step once you have the overall signal and interference modelled you could use sequential least squares to estimate the signal.
The best way to share the same carrier is to use CDMA modulation. The GPS satellite constellation all broadcast on the same carriers.
You mentioned that the interference was intermittent, so don’t broadcast when it does. The alarm sensors are either using a schedule or using collision detection-rebroadcast protocol, so fill the empty times.
There is a lot of work called cognitive radio which steals dead time.
Blocking a carrier while simultaneously receiving is hard to do.
Most new stuff is designed to be part of a network, conforming to a standard. Roll your own protocols tend to be frowned on, unless there is a very good reason. The non recurring costs are higher. The maintenance costs are higher. Upgrade is rip out and replace.
As long as the post processing delay is acceptable another potential option is to puncture in time or puncture in frequency depending on the nature of the interference and your ability to detect it. If the interference is much shorter in time than the symbol pulse duration but clearly at a higher amplitude than the signal of interest then the strategy of blanking the interference will provide reception advantage. Alternatively if the interference is much narrower in frequency than the bandwidth of the signal but much larger in amplitude within an FFT bin then the strategy of taking an FFT and excising the interference followed by IFFT (frequency domain excision) will provide reception advantage. The imposed new interference of nulling in time or nulling in frequency and equalizing for that would need to be balanced with the advantage of removing the external interference.