Reply by April 2, 20092009-04-02
On Apr 2, 1:17&#4294967295;pm, robert bristow-johnson <r...@audioimagination.com>
wrote:
> On Apr 2, 11:17&#4294967295;am, c...@claysturner.com wrote: > > > > > An 11 tap filter will have a delay of (11-1)/2 = 5 samples, so the > > delay is integral. > > > But a 10 tap filter will has a delay of 4.5 samples - nonintegral > > delay. > > yeah, we know that. &#4294967295;this issue with Hilbert is so we can have both > the (delayed) unmodified signal sit side-by-side with the (delay) > Hilbert and get a proper analytic signal. > > > The bummer is a Hilbert with odd length must has a zero in its > > frequency response at Fs/2 and the OP wants a 90 degree phase shift > > for all frequencies and an integral delay. > > ANY filter that has odd symmetry and zero real part in the frequency > response about DC must also have odd symmetry and zero real part about > Nyquist. > > > > > > > > > To illustrate the 0 at Fs/2, let's look at a simple example with 5 > > taps (with odd symmetry) with the following values > > > -b, -a, 0, a, b > > > A signal at Fs/2 is a scaled version of 1,-1,1,-1,1, etc > > > So convolve this with our taps, and we get > > > (-b) + (- -a) + (0) + (- a) + (b) &#4294967295;which equals zero. > > > And no matter what the scaling is on our alternating ones signal, an > > odd length and odd symmetric impulse response filter will result in a > > zero output. > > > And I think you can see how this extends to all odd lenth odd > > symmetric impulse response filters. > > > And even length case is different where, for example we look at 4 taps > > > -b, -a, a, b > > > and convolved with c*( -1, 1, -1, 1) > > > we get > > > c* [ &#4294967295;(- -b) + (-a) + (-a) + (b) ] = 2*c*(b-a) > > > which is not likely zero. > > if it's not zero, then there is a real part in the frequency response > of the delay compensated filter. &#4294967295;does that cut it as a Hilbert > transformer? > > r b-j
What I was saying there is you can easily design a hilbert transformer with an even number of taps that passes signals (with near unity gain) at and near Fs/2. A Hilbert's taps must have odd symmetry! And my 2*c* (b-a) basically says the example output for an even length odd symmetric filter is easily not zero. The case for the odd length odd symmetric case says the output must be zero for a signal at Fs/2 regardless of the coefficients values apart from their needing to have odd symmetry. Just to reiterate for all who are looking at this thread. Linear phase FIR filters must have impulse responses that are either symmetric or antisymmetric. If the impulse response is neither of these, then the filter is not linear phase. The are 4 types of linear phase FIR filters. All have a group delay of (N-1)/2 samples where "N" is the length of the filter. Even symmetry - odd length - no gain restrictions at DC or Fs/2 Even symmetry - even length - gain = 0 at Fs/2 Odd symmetry - odd length - gain = 0 at DC and at Fs/2 Odd symmetry - even length - gain = 0 at DC The OP's situation is a common one where he wants both filters to have the same delay. But if you require linear phase, then one or the other filter must have a zero response at Fs/2 - which the OP can't use. He needs unity gain out of both filters at Fs/2. Then of course he asks about mxing filter lengths - which solves has gain at Fs/2 problem but then he needs a 1/2 sample compensatory delay for one of the filters. But operating at Fs/2, interpolation schemes to implement the 1/2 sample delay are going to really perform poorly. That's why I reconmend he moves his signals of interest to Fs/4 where all of a sudden things get quite simple. If the OP is willing to get away from strictly linear phase, well that's a different story. Then he can use a pair of filters whose phase delays differ by 90 degrees. Sure you loose the linear phase quality of the filters (assuming he still wants to work af Fs/2) But working in a sampling system with absolutely no oversampling is going to be an issue. I hope this clarifies some things. Clay
Reply by robert bristow-johnson April 2, 20092009-04-02
On Apr 2, 11:17&#4294967295;am, c...@claysturner.com wrote:
> > An 11 tap filter will have a delay of (11-1)/2 = 5 samples, so the > delay is integral. > > But a 10 tap filter will has a delay of 4.5 samples - nonintegral > delay.
yeah, we know that. this issue with Hilbert is so we can have both the (delayed) unmodified signal sit side-by-side with the (delay) Hilbert and get a proper analytic signal.
> The bummer is a Hilbert with odd length must has a zero in its > frequency response at Fs/2 and the OP wants a 90 degree phase shift > for all frequencies and an integral delay.
ANY filter that has odd symmetry and zero real part in the frequency response about DC must also have odd symmetry and zero real part about Nyquist.
> > To illustrate the 0 at Fs/2, let's look at a simple example with 5 > taps (with odd symmetry) with the following values > > -b, -a, 0, a, b > > A signal at Fs/2 is a scaled version of 1,-1,1,-1,1, etc > > So convolve this with our taps, and we get > > (-b) + (- -a) + (0) + (- a) + (b) &#4294967295;which equals zero. > > And no matter what the scaling is on our alternating ones signal, an > odd length and odd symmetric impulse response filter will result in a > zero output. > > And I think you can see how this extends to all odd lenth odd > symmetric impulse response filters. > > And even length case is different where, for example we look at 4 taps > > -b, -a, a, b > > and convolved with c*( -1, 1, -1, 1) > > we get > > c* [ &#4294967295;(- -b) + (-a) + (-a) + (b) ] = 2*c*(b-a) > > which is not likely zero.
if it's not zero, then there is a real part in the frequency response of the delay compensated filter. does that cut it as a Hilbert transformer? r b-j
Reply by April 2, 20092009-04-02
On Apr 1, 10:02&#4294967295;pm, "xie.qiang" <xie.qi...@hotmail.com> wrote:
> >On Apr 1, 10:22=A0am, c...@claysturner.com wrote: > >> On Apr 1, 1:51=A0am, "xie.qiang" <xie.qi...@hotmail.com> wrote: > > >> > >xie.qiang wrote: > > >> > > =A0 ... > > >> > >> Maybe I am not make this clear, to be simplify and be more > specific, > >> > let > >> > >> me get a little straight, and show what I am tring to do: > >> > >> I was intend to translate my real baseband signal, BW =3D 48KHz to > r= > >eal > >> > >> bandpass signal. But when you tring to translating your signal to > >> > bandpass, > >> > >> you will get a double side signal instead of single-side-band, > which= > > is > >> > not > >> > >> what I want. > >> > >> Then a better way comes, apply Hilbert transform to the orginal > >> > signal, > >> > >> then mixer with sin and cos on each pair, sketch as: > >> > >> =A0 =A0 =A0 =A0 =A0|----Delay-----Cos-----\ > >> > >> x(n)-----| =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0+ > ----x_bandpa= > >ss(n) > >> > >> =A0 =A0 =A0 =A0 =A0|----Hilbert---Sin-----/ > >> > >> but the problem comes when you apply the even order Hilbert > transfor= > >m > >> > with > >> > >> on flatness around 0, 0.5Fs, Fs,...., =A0my base band signal will > be > >> > nearing > >> > >> 0!!. > > >> > >> Then I was thinking about the highpass Hilbert transform with > flatne= > >ss > >> > >> except 0, Fs, 2Fs,...., when translating my baseband signal to > high > >> > pass, > >> > >> and apply high-pass Hilbert transform with flatness around 0.5Fs, > >> > 1.5Fs, > >> > >> except that around 0, Fs, 2Fs,...., > >> > >> sketch as: > >> > >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > > =A0|----Delay-----Co=>s-----\ > >> > >> x(n)---mix cos(0.5Fs)----| =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > = > >=A0+ ----x_bandpass(n) > >> > >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > > =A0|----Hilbert---Si= > > > > >n-----/ > >> > >> This time the Hilbert FIR will not be with integer group delay, > agai= > >n, > >> > >> which problem becomes as I posed this issue before, I get a > >> > non-integert > >> > >> group delay for Hilbet, but get a integer group delay for the > delay > >> > path, > >> > >> It seems that I can using upsampling to overcome this, when you do > t= > >he > >> > >> math, you will again found after doing x2 upsampling, of cousre, > you > >> > can > >> > >> make both path of Hilbert transform with same group delay, but you > g= > >et > >> > a > > >> > >It seems that you care about the performance above .5Fs. Why? it > >> > >consists of aliases and is useless. The graphs may look nice, but > it > >> > >won't work. > > >> > >Jerry > >> > >-- > >> > >Engineering is the art of making what you want from things you can > get= > >. > > >??????????????????????????????????????????????????????????????????????= > >? > > >> > No, it is not the performance above 0.5Fs that I care about, what I > am > >> > doing first is simply translate the baseband to high around 0.5Fs by > 0.= > >5Fs > >> > mixer, sure it works, I have test this code in matlab, as an example > as > >> > follow: > >> > Fs =A0 =3D 192000*8; > >> > Fout =3D 48000; > >> > N =A0 =A0=3D 1024; > >> > x =A0 =A0=3D sin(2 * pi * Fout * (1 : N) / Fs); > >> > xm =A0 =3D x .* cos(2 * pi * 0.5 * (0 : N-1)); =A0 % Mixed up by 0.5 > Fs > >> > plot(1 : N, 20 * log10(abs(fft(x))) , 'b.-', ... > >> > =A0 =A0 =A01 : N, 20 * log10(abs(fft(xm))), 'm.-'); > >> > grid on; > >> > legend('Org-x', 'Mixed-xm'); > > >> > After doing this, apply the odd order Hilbert transform, which has > >> > flatness at high frequency around 0.5Fs, then gets my trouble!!- Hide > q= > >uoted text - > > >> > - Show quoted text - > > >> You know that when you design a Hilbert transformer with a Parks- > >> McClellan program, you get to pick the band edge frequencies. Thus an > >> odd order Hilbert transform (which has an integral delay) may be > >> designed to cutoff (block) frequencies near 0.5Fs. You don't have to > >> let it pass them through. Try downloading my program here > > >>http://www.claysturner.com/dsp/ > > >> You pick your passband to not include DC or 0.5Fs. > > >> IHTH, > > >> Clay- Hide quoted text - > > >> - Show quoted text - > > >Okay I see what you want to do. It is problematic. Essentially you > >want your pair of filters to each have a passband gain of 1 both near > >and at 0.5Fs. This will be a problem. As odd length Hilberts and even > >length symmetric filters must have zero response at 0.5Fs. So you will > >have a mismatch of delays if you pick the orders of your two filters > >where one is odd and the other even. A half sample delay at 0.5Fs will > >also be very problematic. You should move your signal of interest down > >to something of the order of 0.25Fs. Then life gets real simple for > >you. > > >Clay > > Hi Clay, > Thank you very much, and thanks for your link. > > First, I am surely confirm that I need to have full pass (gain = 1) near > 0.5Fs, and only odd order Hilbert with high pass response can do this. > As you told me that the odd order have non-integer group delay this time. > That's really a problem. > Because do I need to translate my baseband signal(0Hz~BW) to bandpass, and > the bandpass must be with SSB (Single-Side Band), and that why I am > considering the Hilbert Transform. > So, I am tring to search next is: > &#4294967295; 1, Is there any other way to let me to do this, not using a Hilbert way > to translate the baseband or high-pass signal to bandpass with SSB? > And Clay, I do not fullly get the way the paper "Analytic Signal > Generation-Tips and Traps.pdf" suggested, and If this is a good way, then I > can get release of my headache. > &#4294967295; 2, If I still use Hilbert transform, only High pass Hilbert with 1 gain > around 0.5Fs can make me to this, and then I need to design a fullpass > filter with group delay the same as Hilbert FIR path? I have already tried > this.- Hide quoted text - > > - Show quoted text -- Hide quoted text - > > - Show quoted text -
What Reily et al said and did in their paper was to design a lowpass filter using a P-M algorithm and then multiply the resulting filter's impulse response by a complex exponential at -0.25Fs shifting the filter's frequency response towards the positive frequencies.. So design a lowpass filter that basically passes signals from -0.25Fs up to 0.25Fs. Then after doing the complex modulation of the impulse response, the filter now has a pass band of 0 up to 0.5Fs. This is a complex valued filter. You may split the complex filter into two real valued filters. They will both have the same delay. But I don't think this will completely solve your problem. You may want to work at a doubled sample rate before you make your signal into an analytic one. Then you may decimate by two. IHTH, Clay
Reply by April 2, 20092009-04-02
On Apr 1, 10:21&#4294967295;pm, robert bristow-johnson <r...@audioimagination.com>
wrote:
> On Mar 31, 10:41&#4294967295;am, c...@claysturner.com wrote: > > > > > > > On Mar 31, 9:49&#4294967295;am, "xie.qiang" <xie.qi...@hotmail.com> wrote: > > > > Hi All, > > > > I have a baseband signal 0Hz~48KHz, and sampling rate is Fs = 1.536MHz, I > > > need to mix this base signal to IF, which is about 384KHz, but when doing > > > mix, I do not want the Double-Side-Band (DSB) signal but Single-Band-Signal > > > (SSB), so I will considering design a Hilbert transform to mix my base band > > > signal to IF. Since there are two types of Hilbert FIR, even order with > > > integer group delay and odd order with non-integer group delay, > > > even order Hilbert have non-flatness at high frequency band, but odd order > > > have. > > > So, what I am trying is using the flatness of Hilbert response of high > > > frequency band, and I am doing the following step: > > > Step(1): mix my base baseband signal to high-frequency, near Fs/2 by a > > > carry frequency of Fs/2, then all my baseband signal become to > > > high-frequency signal. > > > Step(2): Applying the odder order Hilbert FIR to my signal, then I get > > > delay path xd and Hilbert path output xh with a difference of 0.5 > > > non-integer delay, which is: > > > &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295;|---Delay---xd(n)----> > > > &#4294967295; &#4294967295; &#4294967295; &#4294967295; x(n)---| > > > &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295;|---HT-FIR--xh(n)----> > > > > Step(3): (also become my big problem!!!!!!!!). > > > Interpolate the xd(n) and xh(n) to xd2(n) &#4294967295;and xh2(n), one path shift one > > > more sample unit. > > > After doing this, I can get my Hilbert transform for the x(n), but at this > > > time, the spectrum shifts, and introduce one more un-desirable spectrum, > > > and it is very hard to filter (because of the double side spectrum is so > > > close, equal to zero!!!).. > > > > What I am asking now is there any way that I do not use a x2 interpolation > > > to get the non integer delay, then I can escape those problems? Or Is there > > > any ways to translate a baseband signal to bandpass signal as well as > > > convert the bandpass signal to SSB rather than DSB??? > > > Actually the odd order Hilbert has an integral delay. In fact for all > > FIR filters that have definite symmetry (either even or odd), the > > delay is simply (N-1)/2 samples. So you may use an odd length for your > > Hilbert. The disadvantage with odd length Hilbert tranforms is their > > response at 1/2 of the sampling rate must be zero. But if sounds like > > in your case that won't be an issue. > > Clay, isn't it the case with an FIR that the length of the filter (the > number of taps, including possible zero-coef taps inside of non-zero > taps) is the order of the filter plus 1? &#4294967295;if you have N uniformly- > spaced taps, the order is N-1 and, if it's symmetrical, the delay is > (N-1)/2. &#4294967295;so isn't it that the even order filter has an integral > delay? &#4294967295;i think that any length symmetrical Hilbert filter should have > odd symmetry about both DC and Nyquist, no? > > sorry, i'm confused. > > r b-j- Hide quoted text - > > - Show quoted text -
Hello Robert, An 11 tap filter will have a delay of (11-1)/2 = 5 samples, so the delay is integral. But a 10 tap filter will has a delay of 4.5 samples - nonintegral delay. The bummer is a Hilbert with odd length must has a zero in its frequency response at Fs/2 and the OP wants a 90 degree phase shift for all frequencies and an integral delay. To illustrate the 0 at Fs/2, let's look at a simple example with 5 taps (with odd symmetry) with the following values -b, -a, 0, a, b A signal at Fs/2 is a scaled version of 1,-1,1,-1,1, etc So convolve this with our taps, and we get (-b) + (- -a) + (0) + (- a) + (b) which equals zero. And no matter what the scaling is on our alternating ones signal, an odd length and odd symmetric impulse response filter will result in a zero output. And I think you can see how this extends to all odd lenth odd symmetric impulse response filters. And even length case is different where, for example we look at 4 taps -b, -a, a, b and convolved with c*( -1, 1, -1, 1) we get c* [ (- -b) + (-a) + (-a) + (b) ] = 2*c*(b-a) which is not likely zero. IHTH, Clay
Reply by Jerry Avins April 2, 20092009-04-02
Jerry Avins wrote:

   ...

> You need to be flat up to some frequency. That is only .fFs if the
Fs/2, of course. Jerry -- Engineering is the art of making what you want from things you can get. &#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;
Reply by Jerry Avins April 2, 20092009-04-02
robert bristow-johnson wrote:
> On Mar 31, 10:41 am, c...@claysturner.com wrote: >> On Mar 31, 9:49 am, "xie.qiang" <xie.qi...@hotmail.com> wrote: >> >> >> >>> Hi All, >>> I have a baseband signal 0Hz~48KHz, and sampling rate is Fs = 1.536MHz, I >>> need to mix this base signal to IF, which is about 384KHz, but when doing >>> mix, I do not want the Double-Side-Band (DSB) signal but Single-Band-Signal >>> (SSB), so I will considering design a Hilbert transform to mix my base band >>> signal to IF. Since there are two types of Hilbert FIR, even order with >>> integer group delay and odd order with non-integer group delay, >>> even order Hilbert have non-flatness at high frequency band, but odd order >>> have. >>> So, what I am trying is using the flatness of Hilbert response of high >>> frequency band, and I am doing the following step: >>> Step(1): mix my base baseband signal to high-frequency, near Fs/2 by a >>> carry frequency of Fs/2, then all my baseband signal become to >>> high-frequency signal. >>> Step(2): Applying the odder order Hilbert FIR to my signal, then I get >>> delay path xd and Hilbert path output xh with a difference of 0.5 >>> non-integer delay, which is: >>> |---Delay---xd(n)----> >>> x(n)---| >>> |---HT-FIR--xh(n)----> >>> Step(3): (also become my big problem!!!!!!!!). >>> Interpolate the xd(n) and xh(n) to xd2(n) and xh2(n), one path shift one >>> more sample unit. >>> After doing this, I can get my Hilbert transform for the x(n), but at this >>> time, the spectrum shifts, and introduce one more un-desirable spectrum, >>> and it is very hard to filter (because of the double side spectrum is so >>> close, equal to zero!!!).. >>> What I am asking now is there any way that I do not use a x2 interpolation >>> to get the non integer delay, then I can escape those problems? Or Is there >>> any ways to translate a baseband signal to bandpass signal as well as >>> convert the bandpass signal to SSB rather than DSB??? >> Actually the odd order Hilbert has an integral delay. In fact for all >> FIR filters that have definite symmetry (either even or odd), the >> delay is simply (N-1)/2 samples. So you may use an odd length for your >> Hilbert. The disadvantage with odd length Hilbert tranforms is their >> response at 1/2 of the sampling rate must be zero. But if sounds like >> in your case that won't be an issue. > > Clay, isn't it the case with an FIR that the length of the filter (the > number of taps, including possible zero-coef taps inside of non-zero > taps) is the order of the filter plus 1? if you have N uniformly- > spaced taps, the order is N-1 and, if it's symmetrical, the delay is > (N-1)/2. so isn't it that the even order filter has an integral > delay? i think that any length symmetrical Hilbert filter should have > odd symmetry about both DC and Nyquist, no? > > sorry, i'm confused.
Order, shmorder. The delay of a (anti)symmetric FIR is (N-1)/2, where N is the number of taps. A one-tap filter has no delay, etc. Jerry -- Engineering is the art of making what you want from things you can get. &#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;
Reply by Jerry Avins April 2, 20092009-04-02
xie.qiang wrote:
>> On Apr 1, 10:22=A0am, c...@claysturner.com wrote: >>> On Apr 1, 1:51=A0am, "xie.qiang" <xie.qi...@hotmail.com> wrote: >>> >>> >>> >>> >>> >>>>> xie.qiang wrote: >>>>> =A0 ... >>>>>> Maybe I am not make this clear, to be simplify and be more > specific, >>>> let >>>>>> me get a little straight, and show what I am tring to do: >>>>>> I was intend to translate my real baseband signal, BW =3D 48KHz to > r= >> eal >>>>>> bandpass signal. But when you tring to translating your signal to >>>> bandpass, >>>>>> you will get a double side signal instead of single-side-band, > which= >> is >>>> not >>>>>> what I want. >>>>>> Then a better way comes, apply Hilbert transform to the orginal >>>> signal, >>>>>> then mixer with sin and cos on each pair, sketch as: >>>>>> =A0 =A0 =A0 =A0 =A0|----Delay-----Cos-----\ >>>>>> x(n)-----| =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0+ > ----x_bandpa= >> ss(n) >>>>>> =A0 =A0 =A0 =A0 =A0|----Hilbert---Sin-----/ >>>>>> but the problem comes when you apply the even order Hilbert > transfor= >> m >>>> with >>>>>> on flatness around 0, 0.5Fs, Fs,...., =A0my base band signal will > be >>>> nearing >>>>>> 0!!. >>>>>> Then I was thinking about the highpass Hilbert transform with > flatne= >> ss >>>>>> except 0, Fs, 2Fs,...., when translating my baseband signal to > high >>>> pass, >>>>>> and apply high-pass Hilbert transform with flatness around 0.5Fs, >>>> 1.5Fs, >>>>>> except that around 0, Fs, 2Fs,...., >>>>>> sketch as: >>>>>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0|----Delay-----Co= >> s-----\ >>>>>> x(n)---mix cos(0.5Fs)----| =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > = >> =A0+ ----x_bandpass(n) >>>>>> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > =A0|----Hilbert---Si= >> n-----/ >>>>>> This time the Hilbert FIR will not be with integer group delay, > agai= >> n, >>>>>> which problem becomes as I posed this issue before, I get a >>>> non-integert >>>>>> group delay for Hilbet, but get a integer group delay for the > delay >>>> path, >>>>>> It seems that I can using upsampling to overcome this, when you do > t= >> he >>>>>> math, you will again found after doing x2 upsampling, of cousre, > you >>>> can >>>>>> make both path of Hilbert transform with same group delay, but you > g= >> et >>>> a >>>>> It seems that you care about the performance above .5Fs. Why? it >>>>> consists of aliases and is useless. The graphs may look nice, but > it >>>>> won't work. >>>>> Jerry >>>>> -- >>>>> Engineering is the art of making what you want from things you can > get= >> . >> ??????????????????????????????????????????????????????????????????????= >> ? >>>> No, it is not the performance above 0.5Fs that I care about, what I > am >>>> doing first is simply translate the baseband to high around 0.5Fs by > 0.= >> 5Fs >>>> mixer, sure it works, I have test this code in matlab, as an example > as >>>> follow: >>>> Fs =A0 =3D 192000*8; >>>> Fout =3D 48000; >>>> N =A0 =A0=3D 1024; >>>> x =A0 =A0=3D sin(2 * pi * Fout * (1 : N) / Fs); >>>> xm =A0 =3D x .* cos(2 * pi * 0.5 * (0 : N-1)); =A0 % Mixed up by 0.5 > Fs >>>> plot(1 : N, 20 * log10(abs(fft(x))) , 'b.-', ... >>>> =A0 =A0 =A01 : N, 20 * log10(abs(fft(xm))), 'm.-'); >>>> grid on; >>>> legend('Org-x', 'Mixed-xm'); >>>> After doing this, apply the odd order Hilbert transform, which has >>>> flatness at high frequency around 0.5Fs, then gets my trouble!!- Hide > q= >> uoted text - >>>> - Show quoted text - >>> You know that when you design a Hilbert transformer with a Parks- >>> McClellan program, you get to pick the band edge frequencies. Thus an >>> odd order Hilbert transform (which has an integral delay) may be >>> designed to cutoff (block) frequencies near 0.5Fs. You don't have to >>> let it pass them through. Try downloading my program here >>> >>> http://www.claysturner.com/dsp/ >>> >>> You pick your passband to not include DC or 0.5Fs. >>> >>> IHTH, >>> >>> Clay- Hide quoted text - >>> >>> - Show quoted text - >> Okay I see what you want to do. It is problematic. Essentially you >> want your pair of filters to each have a passband gain of 1 both near >> and at 0.5Fs. This will be a problem. As odd length Hilberts and even >> length symmetric filters must have zero response at 0.5Fs. So you will >> have a mismatch of delays if you pick the orders of your two filters >> where one is odd and the other even. A half sample delay at 0.5Fs will >> also be very problematic. You should move your signal of interest down >> to something of the order of 0.25Fs. Then life gets real simple for >> you. >> >> >> Clay >> >> >> > Hi Clay, > Thank you very much, and thanks for your link. > > First, I am surely confirm that I need to have full pass (gain = 1) near > 0.5Fs, and only odd order Hilbert with high pass response can do this. > As you told me that the odd order have non-integer group delay this time. > That's really a problem. > Because do I need to translate my baseband signal(0Hz~BW) to bandpass, and > the bandpass must be with SSB (Single-Side Band), and that why I am > considering the Hilbert Transform. > So, I am tring to search next is: > 1, Is there any other way to let me to do this, not using a Hilbert way > to translate the baseband or high-pass signal to bandpass with SSB? > And Clay, I do not fullly get the way the paper "Analytic Signal > Generation-Tips and Traps.pdf" suggested, and If this is a good way, then I > can get release of my headache. > 2, If I still use Hilbert transform, only High pass Hilbert with 1 gain > around 0.5Fs can make me to this, and then I need to design a fullpass > filter with group delay the same as Hilbert FIR path? I have already tried > this.
You need to be flat up to some frequency. That is only .fFs if the sampling frequency is specified. You have discovered one of the major reasons for moderate oversampling. Jerry -- Engineering is the art of making what you want from things you can get. &#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;&#4294967295;
Reply by robert bristow-johnson April 1, 20092009-04-01
On Mar 31, 10:41&#4294967295;am, c...@claysturner.com wrote:
> On Mar 31, 9:49&#4294967295;am, "xie.qiang" <xie.qi...@hotmail.com> wrote: > > > > > Hi All, > > > I have a baseband signal 0Hz~48KHz, and sampling rate is Fs = 1.536MHz, I > > need to mix this base signal to IF, which is about 384KHz, but when doing > > mix, I do not want the Double-Side-Band (DSB) signal but Single-Band-Signal > > (SSB), so I will considering design a Hilbert transform to mix my base band > > signal to IF. Since there are two types of Hilbert FIR, even order with > > integer group delay and odd order with non-integer group delay, > > even order Hilbert have non-flatness at high frequency band, but odd order > > have. > > So, what I am trying is using the flatness of Hilbert response of high > > frequency band, and I am doing the following step: > > Step(1): mix my base baseband signal to high-frequency, near Fs/2 by a > > carry frequency of Fs/2, then all my baseband signal become to > > high-frequency signal. > > Step(2): Applying the odder order Hilbert FIR to my signal, then I get > > delay path xd and Hilbert path output xh with a difference of 0.5 > > non-integer delay, which is: > > &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295;|---Delay---xd(n)----> > > &#4294967295; &#4294967295; &#4294967295; &#4294967295; x(n)---| > > &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295;|---HT-FIR--xh(n)----> > > > Step(3): (also become my big problem!!!!!!!!). > > Interpolate the xd(n) and xh(n) to xd2(n) &#4294967295;and xh2(n), one path shift one > > more sample unit. > > After doing this, I can get my Hilbert transform for the x(n), but at this > > time, the spectrum shifts, and introduce one more un-desirable spectrum, > > and it is very hard to filter (because of the double side spectrum is so > > close, equal to zero!!!).. > > > What I am asking now is there any way that I do not use a x2 interpolation > > to get the non integer delay, then I can escape those problems? Or Is there > > any ways to translate a baseband signal to bandpass signal as well as > > convert the bandpass signal to SSB rather than DSB??? > > Actually the odd order Hilbert has an integral delay. In fact for all > FIR filters that have definite symmetry (either even or odd), the > delay is simply (N-1)/2 samples. So you may use an odd length for your > Hilbert. The disadvantage with odd length Hilbert tranforms is their > response at 1/2 of the sampling rate must be zero. But if sounds like > in your case that won't be an issue.
Clay, isn't it the case with an FIR that the length of the filter (the number of taps, including possible zero-coef taps inside of non-zero taps) is the order of the filter plus 1? if you have N uniformly- spaced taps, the order is N-1 and, if it's symmetrical, the delay is (N-1)/2. so isn't it that the even order filter has an integral delay? i think that any length symmetrical Hilbert filter should have odd symmetry about both DC and Nyquist, no? sorry, i'm confused. r b-j
Reply by xie.qiang April 1, 20092009-04-01
>On Apr 1, 10:22=A0am, c...@claysturner.com wrote: >> On Apr 1, 1:51=A0am, "xie.qiang" <xie.qi...@hotmail.com> wrote: >> >> >> >> >> >> > >xie.qiang wrote: >> >> > > =A0 ... >> >> > >> Maybe I am not make this clear, to be simplify and be more
specific,
>> > let >> > >> me get a little straight, and show what I am tring to do: >> > >> I was intend to translate my real baseband signal, BW =3D 48KHz to
r=
>eal >> > >> bandpass signal. But when you tring to translating your signal to >> > bandpass, >> > >> you will get a double side signal instead of single-side-band,
which=
> is >> > not >> > >> what I want. >> > >> Then a better way comes, apply Hilbert transform to the orginal >> > signal, >> > >> then mixer with sin and cos on each pair, sketch as: >> > >> =A0 =A0 =A0 =A0 =A0|----Delay-----Cos-----\ >> > >> x(n)-----| =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0+
----x_bandpa=
>ss(n) >> > >> =A0 =A0 =A0 =A0 =A0|----Hilbert---Sin-----/ >> > >> but the problem comes when you apply the even order Hilbert
transfor=
>m >> > with >> > >> on flatness around 0, 0.5Fs, Fs,...., =A0my base band signal will
be
>> > nearing >> > >> 0!!. >> >> > >> Then I was thinking about the highpass Hilbert transform with
flatne=
>ss >> > >> except 0, Fs, 2Fs,...., when translating my baseband signal to
high
>> > pass, >> > >> and apply high-pass Hilbert transform with flatness around 0.5Fs, >> > 1.5Fs, >> > >> except that around 0, Fs, 2Fs,...., >> > >> sketch as: >> > >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0
=A0|----Delay-----Co=
>s-----\ >> > >> x(n)---mix cos(0.5Fs)----| =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0
=
>=A0+ ----x_bandpass(n) >> > >> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0
=A0|----Hilbert---Si=
>n-----/ >> > >> This time the Hilbert FIR will not be with integer group delay,
agai=
>n, >> > >> which problem becomes as I posed this issue before, I get a >> > non-integert >> > >> group delay for Hilbet, but get a integer group delay for the
delay
>> > path, >> > >> It seems that I can using upsampling to overcome this, when you do
t=
>he >> > >> math, you will again found after doing x2 upsampling, of cousre,
you
>> > can >> > >> make both path of Hilbert transform with same group delay, but you
g=
>et >> > a >> >> > >It seems that you care about the performance above .5Fs. Why? it >> > >consists of aliases and is useless. The graphs may look nice, but
it
>> > >won't work. >> >> > >Jerry >> > >-- >> > >Engineering is the art of making what you want from things you can
get=
>. >> > >??????????????????????????????????????????????????????????????????????= >? >> >> > No, it is not the performance above 0.5Fs that I care about, what I
am
>> > doing first is simply translate the baseband to high around 0.5Fs by
0.=
>5Fs >> > mixer, sure it works, I have test this code in matlab, as an example
as
>> > follow: >> > Fs =A0 =3D 192000*8; >> > Fout =3D 48000; >> > N =A0 =A0=3D 1024; >> > x =A0 =A0=3D sin(2 * pi * Fout * (1 : N) / Fs); >> > xm =A0 =3D x .* cos(2 * pi * 0.5 * (0 : N-1)); =A0 % Mixed up by 0.5
Fs
>> > plot(1 : N, 20 * log10(abs(fft(x))) , 'b.-', ... >> > =A0 =A0 =A01 : N, 20 * log10(abs(fft(xm))), 'm.-'); >> > grid on; >> > legend('Org-x', 'Mixed-xm'); >> >> > After doing this, apply the odd order Hilbert transform, which has >> > flatness at high frequency around 0.5Fs, then gets my trouble!!- Hide
q=
>uoted text - >> >> > - Show quoted text - >> >> You know that when you design a Hilbert transformer with a Parks- >> McClellan program, you get to pick the band edge frequencies. Thus an >> odd order Hilbert transform (which has an integral delay) may be >> designed to cutoff (block) frequencies near 0.5Fs. You don't have to >> let it pass them through. Try downloading my program here >> >> http://www.claysturner.com/dsp/ >> >> You pick your passband to not include DC or 0.5Fs. >> >> IHTH, >> >> Clay- Hide quoted text - >> >> - Show quoted text - > >Okay I see what you want to do. It is problematic. Essentially you >want your pair of filters to each have a passband gain of 1 both near >and at 0.5Fs. This will be a problem. As odd length Hilberts and even >length symmetric filters must have zero response at 0.5Fs. So you will >have a mismatch of delays if you pick the orders of your two filters >where one is odd and the other even. A half sample delay at 0.5Fs will >also be very problematic. You should move your signal of interest down >to something of the order of 0.25Fs. Then life gets real simple for >you. > > >Clay > > >
Hi Clay, Thank you very much, and thanks for your link. First, I am surely confirm that I need to have full pass (gain = 1) near 0.5Fs, and only odd order Hilbert with high pass response can do this. As you told me that the odd order have non-integer group delay this time. That's really a problem. Because do I need to translate my baseband signal(0Hz~BW) to bandpass, and the bandpass must be with SSB (Single-Side Band), and that why I am considering the Hilbert Transform. So, I am tring to search next is: 1, Is there any other way to let me to do this, not using a Hilbert way to translate the baseband or high-pass signal to bandpass with SSB? And Clay, I do not fullly get the way the paper "Analytic Signal Generation-Tips and Traps.pdf" suggested, and If this is a good way, then I can get release of my headache. 2, If I still use Hilbert transform, only High pass Hilbert with 1 gain around 0.5Fs can make me to this, and then I need to design a fullpass filter with group delay the same as Hilbert FIR path? I have already tried this.
Reply by April 1, 20092009-04-01
On Apr 1, 10:22&#4294967295;am, c...@claysturner.com wrote:
> On Apr 1, 1:51&#4294967295;am, "xie.qiang" <xie.qi...@hotmail.com> wrote: > > > > > > > >xie.qiang wrote: > > > > &#4294967295; ... > > > >> Maybe I am not make this clear, to be simplify and be more specific, > > let > > >> me get a little straight, and show what I am tring to do: > > >> I was intend to translate my real baseband signal, BW = 48KHz to real > > >> bandpass signal. But when you tring to translating your signal to > > bandpass, > > >> you will get a double side signal instead of single-side-band, which is > > not > > >> what I want. > > >> Then a better way comes, apply Hilbert transform to the orginal > > signal, > > >> then mixer with sin and cos on each pair, sketch as: > > >> &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295;|----Delay-----Cos-----\ > > >> x(n)-----| &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295;+ ----x_bandpass(n) > > >> &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295;|----Hilbert---Sin-----/ > > >> but the problem comes when you apply the even order Hilbert transform > > with > > >> on flatness around 0, 0.5Fs, Fs,...., &#4294967295;my base band signal will be > > nearing > > >> 0!!. > > > >> Then I was thinking about the highpass Hilbert transform with flatness > > >> except 0, Fs, 2Fs,...., when translating my baseband signal to high > > pass, > > >> and apply high-pass Hilbert transform with flatness around 0.5Fs, > > 1.5Fs, > > >> except that around 0, Fs, 2Fs,...., > > >> sketch as: > > >> &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295;|----Delay-----Cos-----\ > > >> x(n)---mix cos(0.5Fs)----| &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295;+ ----x_bandpass(n) > > >> &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295; &#4294967295;|----Hilbert---Sin-----/ > > >> This time the Hilbert FIR will not be with integer group delay, again, > > >> which problem becomes as I posed this issue before, I get a > > non-integert > > >> group delay for Hilbet, but get a integer group delay for the delay > > path, > > >> It seems that I can using upsampling to overcome this, when you do the > > >> math, you will again found after doing x2 upsampling, of cousre, you > > can > > >> make both path of Hilbert transform with same group delay, but you get > > a > > > >It seems that you care about the performance above .5Fs. Why? it > > >consists of aliases and is useless. The graphs may look nice, but it > > >won't work. > > > >Jerry > > >-- > > >Engineering is the art of making what you want from things you can get. > > >??????????????????????????????????????????????????????????????????????? > > > No, it is not the performance above 0.5Fs that I care about, what I am > > doing first is simply translate the baseband to high around 0.5Fs by 0.5Fs > > mixer, sure it works, I have test this code in matlab, as an example as > > follow: > > Fs &#4294967295; = 192000*8; > > Fout = 48000; > > N &#4294967295; &#4294967295;= 1024; > > x &#4294967295; &#4294967295;= sin(2 * pi * Fout * (1 : N) / Fs); > > xm &#4294967295; = x .* cos(2 * pi * 0.5 * (0 : N-1)); &#4294967295; % Mixed up by 0.5 Fs > > plot(1 : N, 20 * log10(abs(fft(x))) , 'b.-', ... > > &#4294967295; &#4294967295; &#4294967295;1 : N, 20 * log10(abs(fft(xm))), 'm.-'); > > grid on; > > legend('Org-x', 'Mixed-xm'); > > > After doing this, apply the odd order Hilbert transform, which has > > flatness at high frequency around 0.5Fs, then gets my trouble!!- Hide quoted text - > > > - Show quoted text - > > You know that when you design a Hilbert transformer with a Parks- > McClellan program, you get to pick the band edge frequencies. Thus an > odd order Hilbert transform (which has an integral delay) may be > designed to cutoff (block) frequencies near 0.5Fs. You don't have to > let it pass them through. Try downloading my program here > > http://www.claysturner.com/dsp/ > > You pick your passband to not include DC or 0.5Fs. > > IHTH, > > Clay- Hide quoted text - > > - Show quoted text -
Okay I see what you want to do. It is problematic. Essentially you want your pair of filters to each have a passband gain of 1 both near and at 0.5Fs. This will be a problem. As odd length Hilberts and even length symmetric filters must have zero response at 0.5Fs. So you will have a mismatch of delays if you pick the orders of your two filters where one is odd and the other even. A half sample delay at 0.5Fs will also be very problematic. You should move your signal of interest down to something of the order of 0.25Fs. Then life gets real simple for you. Clay