I am trying to design linear phase band pass FIR filters for complex IQ base-band data. The incoming IQ data is BFSK modulated with ones and zeros represented by subcarriers at 1300 Hz and 2100 Hz. I want to design complext banpass filters to look at the energy at 600 Hz, 1300 Hz and 2100 Hz. My previous experience has been with designing filter with real coefficients operating on real data. I looked up some references butthey also deal only with real coefficient filters operating on real inputs. I could convert complex IQ domain data to real frequency domain input but I would like to perform filtering in IQ complex domain. Can someone point me to a reference or describe how to go about it. I have Matlab to design the filter.
filter design for complex input
Started by ●February 10, 2009
Reply by ●February 10, 20092009-02-10
ane <anemat01@gmail.com> writes:> I am trying to design linear phase band pass FIR filters for complex > IQ base-band data. The incoming IQ data is BFSK modulated with ones > and zeros represented by subcarriers at 1300 Hz and 2100 Hz. I want > to design complext banpass filters to look at the energy at 600 Hz, > 1300 Hz and 2100 Hz. My previous experience has been with designing > filter with real coefficients operating on real data. I looked up > some references butthey also deal only with real coefficient filters > operating on real inputs. I could convert complex IQ domain data to > real frequency domain input but I would like to perform filtering in > IQ complex domain. Can someone point me to a reference or describe > how to go about it. I have Matlab to design the filter.You definitely don't want to convert to real and back - that would be pointless. Recall the property of the DTFT that a signal F(\omega) has an asymmetric spectrum if and only if the time-domain signal f[n] is complex. In a complex bandpass filter, you want the band of only one side, e.g., +600 Hz, and not +/- 600 Hz, thus such a filter will necessarily have a complex impulse response. From there it's just a matter of performing complex arithmetic in the convolution sum: y[n] = \sum_{j=0}{J-1} x[n] * h[n-j], where both x and h are complex. One way to design a complex bandpass filter at Fc with bandwidth B is to design a real lowpass filter with a bandwidth of B / 2. The complex filter coefficients are then h[n] = e^(+/-2*pi*Fc*n*Ts) .* hlp[n], to generate the positive Fc or negative Fc bandpasses, respectively. Hope this helps. -- % Randy Yates % "How's life on earth? %% Fuquay-Varina, NC % ... What is it worth?" %%% 919-577-9882 % 'Mission (A World Record)', %%%% <yates@ieee.org> % *A New World Record*, ELO http://www.digitalsignallabs.com
Reply by ●February 10, 20092009-02-10
On Feb 10, 6:07�pm, Randy Yates <ya...@ieee.org> wrote:> ane <anema...@gmail.com> writes: > > I am trying to design linear phase band pass FIR filters for complex > > IQ base-band data. �The incoming IQ data is BFSK modulated with ones > > and zeros represented by subcarriers at 1300 Hz and 2100 Hz. �I want > > to design complext banpass filters to look at the energy at 600 Hz, > > 1300 Hz and 2100 Hz. �My previous experience has been with designing > > filter with real coefficients operating on real data. �I looked up > > some references butthey also deal only with real coefficient filters > > operating on real inputs. �I could convert complex IQ domain data to > > real frequency domain input but I would like to perform filtering in > > IQ complex domain. �Can someone point me to a reference or describe > > how to go about it. �I have Matlab to design the filter. > > You definitely don't want to convert to real and back - that would > be pointless. > > Recall the property of the DTFT that a signal F(\omega) has an > asymmetric spectrum if and only if the time-domain signal f[n] is > complex. In a complex bandpass filter, you want the band of only one > side, e.g., +600 Hz, and not +/- 600 Hz, thus such a filter will > necessarily have a complex impulse response. > > From there it's just a matter of performing complex arithmetic in the > convolution sum: > > � y[n] = \sum_{j=0}{J-1} x[n] * h[n-j], > > where both x and h are complex. > > One way to design a complex bandpass filter at Fc with bandwidth > B is to design a > real lowpass filter with a bandwidth of B / 2. The complex filter > coefficients are then > > � h[n] = e^(+/-2*pi*Fc*n*Ts) .* hlp[n], > > to generate the positive Fc or negative Fc bandpasses, respectively. > > Hope this helps. > -- > % �Randy Yates � � � � � � � � �% "How's life on earth? > %% Fuquay-Varina, NC � � � � � �% �... What is it worth?" > %%% 919-577-9882 � � � � � � � �% 'Mission (A World Record)', > %%%% <ya...@ieee.org> � � � � � % *A New World Record*, ELOhttp://www.digitalsignallabs.comThanks. I understand the explaination. The multiplication (last equation) is supposed to be with a complex exponential, correct? so it should be exp(j*2**pi*Fc/Fs*n)?
Reply by ●February 10, 20092009-02-10
ane <anemat01@gmail.com> writes:> On Feb 10, 6:07�pm, Randy Yates <ya...@ieee.org> wrote: >> ane <anema...@gmail.com> writes: >> > I am trying to design linear phase band pass FIR filters for complex >> > IQ base-band data. �The incoming IQ data is BFSK modulated with ones >> > and zeros represented by subcarriers at 1300 Hz and 2100 Hz. �I want >> > to design complext banpass filters to look at the energy at 600 Hz, >> > 1300 Hz and 2100 Hz. �My previous experience has been with designing >> > filter with real coefficients operating on real data. �I looked up >> > some references butthey also deal only with real coefficient filters >> > operating on real inputs. �I could convert complex IQ domain data to >> > real frequency domain input but I would like to perform filtering in >> > IQ complex domain. �Can someone point me to a reference or describe >> > how to go about it. �I have Matlab to design the filter. >> >> You definitely don't want to convert to real and back - that would >> be pointless. >> >> Recall the property of the DTFT that a signal F(\omega) has an >> asymmetric spectrum if and only if the time-domain signal f[n] is >> complex. In a complex bandpass filter, you want the band of only one >> side, e.g., +600 Hz, and not +/- 600 Hz, thus such a filter will >> necessarily have a complex impulse response. >> >> From there it's just a matter of performing complex arithmetic in the >> convolution sum: >> >> � y[n] = \sum_{j=0}{J-1} x[n] * h[n-j], >> >> where both x and h are complex. >> >> One way to design a complex bandpass filter at Fc with bandwidth >> B is to design a >> real lowpass filter with a bandwidth of B / 2. The complex filter >> coefficients are then >> >> � h[n] = e^(+/-2*pi*Fc*n*Ts) .* hlp[n], >> >> to generate the positive Fc or negative Fc bandpasses, respectively. >> >> Hope this helps. >> -- >> % �Randy Yates � � � � � � � � �% "How's life on earth? >> %% Fuquay-Varina, NC � � � � � �% �... What is it worth?" >> %%% 919-577-9882 � � � � � � � �% 'Mission (A World Record)', >> %%%% <ya...@ieee.org> � � � � � % *A New World Record*, ELOhttp://www.digitalsignallabs.com > > Thanks. I understand the explaination. The multiplication (last > equation) is supposed to be with a complex exponential, correct? so it > should be exp(j*2**pi*Fc/Fs*n)?You're right - I forgot the "j", and I shouldn't have used the Matlab operator ".*" but simply "*": � h[n] = e^(+/-j*2*pi*Fc*n*Ts) * hlp[n] --RY -- % Randy Yates % "She has an IQ of 1001, she has a jumpsuit %% Fuquay-Varina, NC % on, and she's also a telephone." %%% 919-577-9882 % %%%% <yates@ieee.org> % 'Yours Truly, 2095', *Time*, ELO http://www.digitalsignallabs.com
Reply by ●February 10, 20092009-02-10
Randy Yates wrote:> ane <anemat01@gmail.com> writes: > >> I am trying to design linear phase band pass FIR filters for complex >> IQ base-band data. The incoming IQ data is BFSK modulated with ones >> and zeros represented by subcarriers at 1300 Hz and 2100 Hz. I want >> to design complext banpass filters to look at the energy at 600 Hz, >> 1300 Hz and 2100 Hz. My previous experience has been with designing >> filter with real coefficients operating on real data. I looked up >> some references butthey also deal only with real coefficient filters >> operating on real inputs. I could convert complex IQ domain data to >> real frequency domain input but I would like to perform filtering in >> IQ complex domain. Can someone point me to a reference or describe >> how to go about it. I have Matlab to design the filter. > > You definitely don't want to convert to real and back - that would > be pointless. > > Recall the property of the DTFT that a signal F(\omega) has an > asymmetric spectrum if and only if the time-domain signal f[n] is > complex. In a complex bandpass filter, you want the band of only one > side, e.g., +600 Hz, and not +/- 600 Hz, thus such a filter will > necessarily have a complex impulse response. > > From there it's just a matter of performing complex arithmetic in the > convolution sum: > > y[n] = \sum_{j=0}{J-1} x[n] * h[n-j], > > where both x and h are complex. > > One way to design a complex bandpass filter at Fc with bandwidth > B is to design a > real lowpass filter with a bandwidth of B / 2. The complex filter > coefficients are then > > h[n] = e^(+/-2*pi*Fc*n*Ts) .* hlp[n], > > to generate the positive Fc or negative Fc bandpasses, respectively. > > Hope this helps.Why not two identical bandpass filters, one for I, the other for Q? Jerry -- Engineering is the art of making what you want from things you can get. �����������������������������������������������������������������������
Reply by ●February 11, 20092009-02-11
On 11 Feb, 03:05, Jerry Avins <j...@ieee.org> wrote:> Randy Yates wrote: > > ane <anema...@gmail.com> writes: > > >> I am trying to design linear phase band pass FIR filters for complex > >> IQ base-band data. �The incoming IQ data is BFSK modulated with ones > >> and zeros represented by subcarriers at 1300 Hz and 2100 Hz. �I want > >> to design complext banpass filters to look at the energy at 600 Hz, > >> 1300 Hz and 2100 Hz. �My previous experience has been with designing > >> filter with real coefficients operating on real data. �I looked up > >> some references butthey also deal only with real coefficient filters > >> operating on real inputs. �I could convert complex IQ domain data to > >> real frequency domain input but I would like to perform filtering in > >> IQ complex domain. �Can someone point me to a reference or describe > >> how to go about it. �I have Matlab to design the filter. > > > You definitely don't want to convert to real and back - that would > > be pointless. > > > Recall the property of the DTFT that a signal F(\omega) has an > > asymmetric spectrum if and only if the time-domain signal f[n] is > > complex. In a complex bandpass filter, you want the band of only one > > side, e.g., +600 Hz, and not +/- 600 Hz, thus such a filter will > > necessarily have a complex impulse response. > > > From there it's just a matter of performing complex arithmetic in the > > convolution sum: > > > � y[n] = \sum_{j=0}{J-1} x[n] * h[n-j], > > > where both x and h are complex. > > > One way to design a complex bandpass filter at Fc with bandwidth > > B is to design a > > real lowpass filter with a bandwidth of B / 2. The complex filter > > coefficients are then > > > � h[n] = e^(+/-2*pi*Fc*n*Ts) .* hlp[n], > > > to generate the positive Fc or negative Fc bandpasses, respectively. > > > Hope this helps. > > Why not two identical bandpass filters, one for I, the other for Q?Where I and Q are regarded as real-valued? This is probably the better solution. It certainly avoids a lot of toruble. Rune
Reply by ●February 11, 20092009-02-11
Jerry Avins <jya@ieee.org> writes:> Randy Yates wrote: >> ane <anemat01@gmail.com> writes: >> >>> I am trying to design linear phase band pass FIR filters for complex >>> IQ base-band data. The incoming IQ data is BFSK modulated with ones >>> and zeros represented by subcarriers at 1300 Hz and 2100 Hz. I want >>> to design complext banpass filters to look at the energy at 600 Hz, >>> 1300 Hz and 2100 Hz. My previous experience has been with designing >>> filter with real coefficients operating on real data. I looked up >>> some references butthey also deal only with real coefficient filters >>> operating on real inputs. I could convert complex IQ domain data to >>> real frequency domain input but I would like to perform filtering in >>> IQ complex domain. Can someone point me to a reference or describe >>> how to go about it. I have Matlab to design the filter. >> >> You definitely don't want to convert to real and back - that would >> be pointless. >> >> Recall the property of the DTFT that a signal F(\omega) has an >> asymmetric spectrum if and only if the time-domain signal f[n] is >> complex. In a complex bandpass filter, you want the band of only one >> side, e.g., +600 Hz, and not +/- 600 Hz, thus such a filter will >> necessarily have a complex impulse response. >> >> From there it's just a matter of performing complex arithmetic in the >> convolution sum: >> >> y[n] = \sum_{j=0}{J-1} x[n] * h[n-j], >> >> where both x and h are complex. >> >> One way to design a complex bandpass filter at Fc with bandwidth >> B is to design a >> real lowpass filter with a bandwidth of B / 2. The complex filter >> coefficients are then >> >> h[n] = e^(+/-2*pi*Fc*n*Ts) .* hlp[n], >> >> to generate the positive Fc or negative Fc bandpasses, respectively. >> >> Hope this helps. > > Why not two identical bandpass filters, one for I, the other for Q?Filtering I and Q separately with a real filter is equivalent to filtering the total complex signal with a real filter. It is impossible for a real filter to be asymmetric in its frequency response (i.e., to have a different response for negative frequencies than it does for positive frequencies). Such a filter necessarily requires cross terms, e.g., contributions to the I stream from the Q stream and vice-versa. -- % Randy Yates % "Bird, on the wing, %% Fuquay-Varina, NC % goes floating by %%% 919-577-9882 % but there's a teardrop in his eye..." %%%% <yates@ieee.org> % 'One Summer Dream', *Face The Music*, ELO http://www.digitalsignallabs.com
Reply by ●February 11, 20092009-02-11
On 11 Feb, 14:00, Randy Yates <ya...@ieee.org> wrote:> Jerry Avins <j...@ieee.org> writes: > > Randy Yates wrote: > >> ane <anema...@gmail.com> writes: > > >>> I am trying to design linear phase band pass FIR filters for complex > >>> IQ base-band data. �The incoming IQ data is BFSK modulated with ones > >>> and zeros represented by subcarriers at 1300 Hz and 2100 Hz. �I want > >>> to design complext banpass filters to look at the energy at 600 Hz, > >>> 1300 Hz and 2100 Hz. �My previous experience has been with designing > >>> filter with real coefficients operating on real data. �I looked up > >>> some references butthey also deal only with real coefficient filters > >>> operating on real inputs. �I could convert complex IQ domain data to > >>> real frequency domain input but I would like to perform filtering in > >>> IQ complex domain. �Can someone point me to a reference or describe > >>> how to go about it. �I have Matlab to design the filter. > > >> You definitely don't want to convert to real and back - that would > >> be pointless. > > >> Recall the property of the DTFT that a signal F(\omega) has an > >> asymmetric spectrum if and only if the time-domain signal f[n] is > >> complex. In a complex bandpass filter, you want the band of only one > >> side, e.g., +600 Hz, and not +/- 600 Hz, thus such a filter will > >> necessarily have a complex impulse response. > > >> From there it's just a matter of performing complex arithmetic in the > >> convolution sum: > > >> � y[n] = \sum_{j=0}{J-1} x[n] * h[n-j], > > >> where both x and h are complex. > > >> One way to design a complex bandpass filter at Fc with bandwidth > >> B is to design a > >> real lowpass filter with a bandwidth of B / 2. The complex filter > >> coefficients are then > > >> � h[n] = e^(+/-2*pi*Fc*n*Ts) .* hlp[n], > > >> to generate the positive Fc or negative Fc bandpasses, respectively. > > >> Hope this helps. > > > Why not two identical bandpass filters, one for I, the other for Q? > > Filtering I and Q separately with a real filter is equivalent to > filtering the total complex signal with a real filter.Yes, but how do you design a complex-valued filter? You can start from a real-valued prototype, but if you do, you end up with several problems. First, complex-valued signals are unique on w = [-pi,pi] whereas real-valued filters are conjugate symmetric H(w) = conj(H(-w)). How do you break that symemtry? You need to, since you otherwise will have two passbands on w = [-pi,pw]. You can multiply H(w) with a complex factor, to make h[n] complex-valued, but this alone doesn't break the symmetry of the spectrum. The other option is to design some real-valued h[n] and Hilbert transform it, but this will first of all make a very long filter (about twice as long as necessary) if the passband is contained in w = [0,pi]. Second, it does not easily allow for general filter responses with passbands of arbitrary widths at arbitrary locations. Nah, using the real-valued h[n] on the I and Q components seems to be the convenient option. Rune
Reply by ●February 11, 20092009-02-11
On Feb 11, 8:28�am, Rune Allnor <all...@tele.ntnu.no> wrote:> Yes, but how do you design a complex-valued filter? You can > start from a real-valued prototype, but if you do, you end > up with several problems. > > First, complex-valued signals are unique on w = [-pi,pi] > whereas real-valued filters are conjugate symmetric > H(w) = conj(H(-w)). How do you break that symemtry? > You need to, since you otherwise will have two > passbands on w = [-pi,pw]. You can multiply H(w) with a > complex factor, to make h[n] complex-valued, but this > alone doesn't break the symmetry of the spectrum. > > The other option is to design some real-valued h[n] > and Hilbert transform it, but this will first of all > make a very long filter (about twice as long as > necessary) if the passband is contained in w = [0,pi]. > Second, it does not easily allow for general filter > responses with passbands of arbitrary widths at > arbitrary locations. > > Nah, using the real-valued h[n] on the I and Q > components seems to be the convenient option. > > RuneIf you can design an arbitrary filter response about zero frequency, then you can move its center wherever you want. Just multiply the filter coefficients by a complex exponential at the desired center frequency. No Hilbert transform necessary. You also often see complex filters in equalizers; since the channel distortion that the equalizer is trying to undo need not be symmetric, the equalizer response should also be able to be asymmetric. Therefore, FIR equalizer coefficients are usually specified to be complex. Jason
Reply by ●February 11, 20092009-02-11
On 11 Feb, 14:36, cincy...@gmail.com wrote:> On Feb 11, 8:28�am, Rune Allnor <all...@tele.ntnu.no> wrote:> > Yes, but how do you design a complex-valued filter?> If you can design an arbitrary filter response about zero frequency, > then you can move its center wherever you want. Just multiply the > filter coefficients by a complex exponential at the desired center > frequency. No Hilbert transform necessary.Nifty! Pretty obvious once you've seen it. Rune






