Showing results for 
Search instead for 
Did you mean: 
Honored Contributor I

FSK adding I&Q correctly in phase and amplitude

I've done an FSK decoder that already works very well but there is a request to enhance the sideband surpression. 


the transmitting part encodes its binary stream with fsk, where it sends out two frequencies where f0 is a 0 and f1 is the 1. 

so this is pure fsk and not a complexe fsk where the phase holds the data information. 


The system receives the data stream as I and Q via 2 ADCs  

Just to give the information about the frequencies i am talking about 

ADC clock is 16MHz 

F0 is 0,800 MHz (ADC / 4 / 5) 

F1 is 1,333 MHz (ADC / 4 / 3) 

Each binary bit is send out as 5 complete F0 cycles or 3 complete F1 cycles. 

so the bit length is the same. 


As the data could be on the upper or the lower sideband of the received data stream, i had to insert a sideband switching functionality. no automatic mode allowed here. 

Decoding a sideband gives a 3dB better signal than dual band mode and the correct sideband is 20dB better than the wrong one. 


the I and Q information both go through an FIR, later a bit more about these FIRs, and are added afterwards, some filtering and a full FSK decoder with sin/cos multiplication with F0 and F1 to get a value for F0 and F1, the bigger one is the transmitted frequency. 


That decoder is very precise but now some guys here want to measure the sideband surpression. 


There are two FIRs between the ADC before the results are added. 

one FIR has the coefficients 0,33 0,33 0,33 and the other one -1,55 0 1,55 

the purpose is a phase shift of 90 degree so I and Q can be added 

Sideband is selected by swaping I and Q 

now these two FIR have a problem that they are good matched for the phase but the amplitude for both frequencies in one of the FIR is not matches and that is the reason why i have a bad sideband measurement. 


Question, does anybody know how I and Q can be added that phase and amplitude are matching ? 


there was a thread here about the baseband signal  

(I.*Q_diff - Q.*I_diff)./(I.^2 + Q.^2) 

but that is for complexe FSK. 


my intendion is to replace / optimize these two FIR for phase shifting 90 degree with "something" that matches in phase and amplitude. 


any ideas or recomendations ?
0 Kudos
6 Replies
Honored Contributor I

I am not sure what you are after. 

your FSK is based on I/Q channels from ADC (so it is eqiuvalent to any complex signal at Rx). 

The IQ are needed to get f0/f1. You shouldn't change them. 

May be you are after removing RF sideband. In that case the RF people should do their job better else you remove it if you hve enough speed.
Honored Contributor I

let me try to explain what i can right out of my head, will have to ask the rf guys on monday for deeper informations. 


the transmitter modulates f0 or f1 as a single sideband signal SSB, that could be the lower sideband LSB or the upper sideband USB 

the microwave analog receiver part delivers the ADC signals I and Q as  

I = RFinput x sin wt 

Q = RFinput x cos wt 


currently I feeds FIR1 (0,33 0,33 0,33) and Q FIR2 (-1,55 0 1,55) 

that is LSB and if I and Q are swap this is USB selection 

(or vice versa, i am not shure right now that doesn't matter for explanation) 


The outputs of FIR1 and FIR2 are added to form the value of IQ what is then processed as explained before with sin and cos of f0 and f1 


The binary information is not within the phase of the received signal.  

the absolute amplitude is also not required 

we only need to know whether f0 or f1 is transmitted 

we need the SSB to gain the 3dB in RX as the transmitter is a passiv transmitter (Backscatter) 

we need to add I and Q to get the vector to prevent what we call microwave holes in RX path 


the complete receiver works very good. 

but the values we get if we receive in LSB mode and the ones we receive in USB mode are now as expected. LSB/USB is 3dB better than Dual side band DSB but we loose 10dB or more between correct and wrong side band than we should from theory 


this is due to a mismatch of one of these FIR filters that has good phase matching but f0 and f1 have different gain in amplitude. 


so i want to know if there is a clever way to add I and Q so that phase and amplitidue for f0 and f1 a matched. 


could i make it clear ?
Honored Contributor I

one more note...  

we need that fsk decoder with sin cos f0 f1 multiplication, because this is also a very smal band filtering of the input signal  

the fsk decoder is very imune to additional noise close to f0 and f1.  

in fact the noise can have a higher amplitude than the transmitted fsk signal and is decoded perfercly as long as the lsb of the adc has the information the noise as big as the adc full resolution won't disturb the decoded binary stream. 

we "hear a pin drop" if it drops.
Honored Contributor I

I am used to do FSK by converting phase info in I/Q to frequency. Your approach seems new to me. 

Anyway, it might be good idea to model in matlab: you can generate symbols, modulate with f0/f1 then upconvert (by multiplication) then downconvert as you said:  

I = RFinput x sin wt 

Q = RFinput x cos wt 


apply filters as you wish and display spectrum. 


attached is some of my cluttered code for FSK model(much of it commented out, I am not sure about its working status but it might help:
Honored Contributor I

thanks will have look at it.

Honored Contributor I

Thanks for all sugestions, i was able to solve it. 

the final solution is very simple and very effective. 

both FIR filters for I and Q are now the same with different coefficient set differing by using sin or cosin for folding over a low pass filter that is tranformed with this folding into a band pass that includes a hilbert function for free as the hilbert is stamped into the coeficient set without the need of further multipliers :-) very very simple.  

the result is so good now that we can measure the limitations of sideband surpression the hardware has.