LabVIEW

cancel
Showing results for 
Search instead for 
Did you mean: 

complex demodulation

Can someone familiar with Complex Demodulation please give me some advice here. 1) After multiplying the original time series X(t) with a complex sinusoide exp(-if0t) and then passing that signal through a low-pass butterwroth filter, is the output from the filter supposed to be complex, or in real form? If so does the butterworth filter.vi handle complex numbers?
0 Kudos
Message 1 of 13
(4,578 Views)
The Butterworth Filter.vi is only working with real signals. If you input a complex signal you will loose the imaginary part of your signal and the VI will return the filtered real part. To filter your complex signal you can filter the real and imaginary parts separatly and optionally rebuild the filtered output as a complex signal.

I have attached a VI that shows an example of complex demodulation using real butterworth filter VIs. LabVIEW 6.1 required (let me know if you are using LabVIEW 6.0)
0 Kudos
Message 2 of 13
(4,578 Views)
Hi Alain,
Thanks for responding. I'm using LabVIEW 5. But I do have a demo copy of LabVIEW 6 which I might be able to use to look that your example.
I might need more help later on if it doesn't work out though!
0 Kudos
Message 3 of 13
(4,578 Views)
Another question i have is that, I've set the digital indicator to represent data in complex numbers, but it appears that the format is in rectangular form..is there a way of getting this into polar form? or does Labview automatically convert these for you?
0 Kudos
Message 4 of 13
(4,578 Views)
To respond to your first comment, the VI I posted will not work with LabVIEW 5.* because it uses high-level generation and filtering VIs that were first introduced with LabVIEW 6.0.

To respond to your second comment, there is only one way to represent complex values. If you want to represent your result using polar coordinates, use the conversion primitive "Complex to Polar" (in the Numeric>>Complex palette) but the result will be 2 real values, resp. "r" and "theta".
0 Kudos
Message 5 of 13
(4,578 Views)
I've implemented the low-pass filtering by sepearting the real and complex parts, and the amplitude output seems be to be working. As for the frequency output, I'm getting periodic spikes...what am i doing wrong here?
0 Kudos
Message 6 of 13
(4,578 Views)
I am not sure I understand what you mean with "amplitude output" and "frequency output". Have you converted your real and imaginary signals to polar coordinates and are you looking at the magnitude (amplitude) and phase arrays? This wouldn't make much sense but could explain your "spikes" happening when the phase wraps around 360 degrees (modulo 360 degrees).

Could you post your VI(s) with input data and ouptut results saved as default on the front panels? That could be useful to find out what the problem is.
0 Kudos
Message 7 of 13
(4,578 Views)
I've attached the relevant VI's. the data saved are not simulated signals but real signals from human heart rate time series. I'm a self taught LabView user and don't pay much attntion to the layout of the block diagrams so might seem a bit messy. Hope u can help shed some light on whats not right with the program as nobody else i know seems to be able to. Would u be able to send a copy of your example in form that i could open in LabView 5 ?
Download All
0 Kudos
Message 8 of 13
(4,578 Views)
there is a subvi called CMD-padded array...just ignre that, basically all I did there was padd the origninal signal at the ends with their mirror images to try and reduce the 'ringing' at the beginning and ends due to the filtering...
0 Kudos
Message 9 of 13
(4,578 Views)
I am not able to run your VIs because some sub-VIs are missing. However looking at your code I see that you are differentiating your phase signal (to get the group delay I guess). As I mention earlier this won't work correctly when the phase is wrapping around at +/- PI radians. To fix this problem you have to insert the Unwrap Phase.vi right before your differentiator VI. I tried to do this on some or your saved phase data and it removed most of the spikes from your output signal.

The Unwrap Phase.vi is located in your Signal Analysis>>Time Domain palette.

Otherwise your complex demodulation/filtering procedure looks right, so I hope this will fix your problem.
0 Kudos
Message 10 of 13
(4,578 Views)