Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

I/Q components and phase

Status
Not open for further replies.

senmeis

Full Member level 3
Full Member level 3
Joined
Nov 26, 2014
Messages
171
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,296
Visit site
Activity points
2,562
Hi,

The I and Q parts of a real signal f(t) can be generated by

i(t) + j*q(t) = f(t)*e^(-j2πft).

Can the phase of f(t) be calculated simply by

ph = arctan(q(t)/i(t))?

Senmeis
 

Yes. Think of a graph, one axis id Q, the other I, whats the angle of the point with respect to the origin.
Frank

Thank you. Now I want to solve the following probem with an FPGA.

A signal propagates through two separate lines so that they hae a phase difference. The straightforward way to get this phase difference is: calculate the two absolute phases with the above mentioned I/Q method and make a subtraction.

Are there better ways to do this job? Can somebody give me hints on how to solve this with an FPGA?

Senmeis
 

What you have is a time delay between the signals. So if you can measure this, then then multiply it by the frequency , this will give you the multiple of the carrier time period. This you then have to convert to an angle by multiplying by 360 to give degrees.
I don't think a FPGA will do this.
Frank
 

What you have is a time delay between the signals. So if you can measure this, then then multiply it by the frequency , this will give you the multiple of the carrier time period. This you then have to convert to an angle by multiplying by 360 to give degrees.
I don't think a FPGA will do this.
Frank

The time delay is difficult to measure. I think the above mentioned I/Q method will do, even in an FGPA.

Senmeis
 

I you square both signals and apply that to an EXOR gate you get a pulse out whose time period is that of the difference between the two signals. So you use this pulse to gate a waveform with a suitablely short period, then you can count how many pulses get through and determine the time period. Or for a quick and dirty way is to use the pulse wave form straight into a precise voltage switcher (so you know the exact amplitude of a "1"). The resulting wave form you then just measure with some sort of voltmeter, that integrates the pulses. i.e. no phase shift = no pulses - 0V, 180 degrees phase shift = continous 1 = 10 V, 90 degrees phase shift = 10 V square wave = 5 mean DC V.
Frank
 

Can you please provide some links about this technology? I just don’t understand how to EXOR two signals which are not logical values.

Senmeis
 

I don't see you could do this with an FPGA only, seems like you would have to have to have a couple of external ADCs and compare peaks or troughs or something similar using a counter. this would depend on how much faster your fpga clock was than the signals. Some of that could be mitigated by using RAM to store enough samples to represent the signals and then post processing them. There are probably smarter ways to do this with analog components, maybe some circuit that give you phase differential as a voltage readout that you could then read with an FPGA. Here is a stack overflow ee discussion about something similar with a microcontroller https://electronics.stackexchange.c...culate-phase-shift-between-two-sine-wavefroms

and I found a chip that seems to do what I described as an analog function. https://www.analog.com/en/rfif-components/detectors/ad8302/products/product.html

I figured there was something out there.
 

Thank you.

I will read them carefully. What do you think about the above mentioned I/Q method based on an FPGA and CORDIC algorithm?

Senmeis
 

Thank you.

I will read them carefully. What do you think about the above mentioned I/Q method based on an FPGA and CORDIC algorithm?

Senmeis
Measuring the I and Q components of each of the two signals only makes sense if there is some third signal acting as the reference. But determining I and Q with respect to some third signal is no easier than determining I and Q of one of the original two signals with respect to the other signal acting as the reference.

If the two signals are very clean (with no noise added), you can transform them from analog sine waves into logic square waves by a threshold comparator where the threshold is somewhere near the zero crossing. Then the XOR method mentioned earlier can be used.

If the two signals are not very clean, you can still extract precise phase information, but then you will need to use something like a Phase-Locked Loop to generate a logic version of the analog signal. A PLL is able to find the average phase of a signal whose phase as determined by simple thresholding might be unstable.

I don't know what building blocks you have available in your FPGA, but if it is only logic building blocks, you will need at least one analog block to perform the comparator threshold function or the PLL function.
 

Measuring the I and Q components of each of the two signals only makes sense if there is some third signal acting as the reference. But determining I and Q with respect to some third signal is no easier than determining I and Q of one of the original two signals with respect to the other signal acting as the reference.

If the two signals are very clean (with no noise added), you can transform them from analog sine waves into logic square waves by a threshold comparator where the threshold is somewhere near the zero crossing. Then the XOR method mentioned earlier can be used.

If the two signals are not very clean, you can still extract precise phase information, but then you will need to use something like a Phase-Locked Loop to generate a logic version of the analog signal. A PLL is able to find the average phase of a signal whose phase as determined by simple thresholding might be unstable.

I don't know what building blocks you have available in your FPGA, but if it is only logic building blocks, you will need at least one analog block to perform the comparator threshold function or the PLL function.

What about this idea?
1: Save the two signals
2: make the two signals complex
3: multiplication:

e^j(phi1-phi2) = e^j(2πft+phi1) * e^(-j(2πft+phi2))

Can this method implemented practically?

Senmeis
 

A pretty theoretical approach. Did you already figure out how to "make the signal complex"? Apply a Hilbert transform?

The quite simple method suggested by chuckey in post #6 does effectively the same, by the way.
 

A pretty theoretical approach. Did you already figure out how to "make the signal complex"? Apply a Hilbert transform?

The quite simple method suggested by chuckey in post #6 does effectively the same, by the way.

Yes, I mean I/Q demodulator with Hilbert transformation. Why is it only a theoretical method?

I can’t see the relationship between this method and the one in post #6.

Senmeis
 

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top