LabVIEW

cancel
Showing results for 
Search instead for 
Did you mean: 

Hilbert Transform for FPGA

Hello,

 

I am currently struggling trying to recreate the Hilbert transform onto the FPGA keeping all the numbers to a maximum of 32bit and the processing time to a small enough tick count that I can run two signals of 100KHz through it.

I have a working system in LabVIEW windows but am really having issues when trying to only use integer numbers.

 

I am trying to calculate the Hilbert transform of real-valued function

Xr (t)® Xˆ (t)

,

the analytical signal:

X (t) X (t) i Xˆ (t)

and the instantaneous phase and frequency. Unfortunately this is proving more of a challange than I was hoping so was wandering if anyone had any ideas. I have attached all of the equations I am trying to reproduce, just dont think my maths is currently up to standards. Thankyou.

 

Pete

 

 

0 Kudos
Message 1 of 5
(5,198 Views)
post your labview working code.
Stu
0 Kudos
Message 2 of 5
(5,170 Views)

Hi, Attached is the code,

 

The problem I am having is that this needs to be implemented not only on FPGA  but on a point by point basis so that I can implement the instantaneous phase and frequency on my latest signal value and calculate my desired output , a pulse of one or zero based on the most recent value I have recieved. I have tried doing a FFT input, multiply by -j and FFT-1, instead of the hilbert, though I am having problems merging the buffers that the two are using so that it functions as a point by point system on the FPGA.

 

Thank you.

 

Peter

0 Kudos
Message 3 of 5
(5,151 Views)

Ok,


Slightly easier way of solving this problem but still need it sorting. Basically i am sampling an input at 10Khz on the FPGA, I cannot transport this up to the RT as wont have time, the RT is already doing other things.

 

For every reading I need to get the hilbert transform.

 

This can be achieved by doing an FFT, multiplying by 1j and then doing an inverse FFT

currently the FFT needs to store a buffer of the data so is consistantly leaving me a buffer behind.

 

I am trying to implement them on a point by point basis so that I can get the output of the latest individual sample at any one point.

 

regards

 

peter

0 Kudos
Message 4 of 5
(5,100 Views)

Take a look at the Signal Processing>>Filters>>Advanced FIR Filter>>Parks-McClellen.vi

 

This vi, when given the appropriate inputs, should provide the FIR coefficients needed for a Hilbert Transformer filter.

Randall Pursley
0 Kudos
Message 5 of 5
(5,087 Views)