Le dimanche 24 mars 2019 04:19:09 UTC-4, Piotr Wyderski a écrit :
> I have a classic digital PLL with multiplier-based phase detector,
> intended to lock at 50Hz. The sampling frequency Fs is 25kHz, the loop
> filter bandwidth varies between Fc=10Hz to 40Hz, as I am experimenting
> with different filter structures. The PLL itself works like
> a charm and my reference filter is a 500th order FIR: fir1(500,Fc/(Fs/2)).
>
> To a reasonable degree the loop converges to a 55Hz input signal after
> 4..5 periods; after about 12 periods the phase error is essentialy zero:
>
> https://i.postimg.cc/MpmPz0QK/convergence-sine-fir.png
> https://i.postimg.cc/hGGrgknp/convergence-sine-fir-magnified.png
>
> (green is the input, blue is the VCO signal, red is the error)
>
> Interestingly, in the case of a heavily distorted signal the convergence
> is still great:
>
> input=0.5*(1.5*sin(2*pi*f0+(80.0/180.0)*pi)+0.5*sin(3*2*pi*f0+(60.0/180.0)*pi)
> + 0.2*sin(5*2*pi*f0+(45.0/180.0)*pi) +
> 0.15*sin(7*2*pi*f0+(36.0/180.0)*pi) + 0.1*sin(11*2*pi*f0+(30.0/180.0)*pi))
>
> https://i.postimg.cc/t48TCPQw/convergence-sine-fir-distorted.png
>
> But to te point: as the overhead of the FIR is bit too high, my next
> attempt was to use 2 sections of the same biquad
>
> fs=25e3;
> fc=35;
> Wc=fc/fs;
>
> [B,A] = cheby1(2,1,Wc);
>
> The convergence rate is worse, but still acceptable. I am concerned
> with the huge relative magnitude of the B and A coefficients, as the
> target implementation is going to be fixed-point. But as a double-based
> proof of concept it is fine.
>
> My third attempt was to use an exponential moving averager and
> experiment with the alpha. It turns out that 8 EMA sections (I'm not
> sure the term "order" is still correct here) in series, all with
> alpha=1/70 work comparably well to the IIR. The number of
> multiplications is a bit higher than in the case of a biquad (16
> instead of 10), but the structure seems to be unconditionally
> stable and easy to implement in fixed-point. It even seems to
> require less scaling fun than a good implementation of the FIR.
>
> https://i.postimg.cc/TPPZSN4X/convergence-ema-sine.png
> https://i.postimg.cc/MTVtryqS/convergence-ema-distorted.png
> https://i.postimg.cc/5yf57TsB/convergence-ema-distorted-magnified.png
>
> (in the last case the VCO tracks the f0 frequency component exactly,
> there is no phase error, contrary to the first impression from the plot).
>
> I think I am onto something, but most likely not the first one.
> Could you please explain to me why the multi-stage EMA works so
> well or suggest a good reading on the theoretical properties of
> this kind of structures? I haven't seen the performance of EMAs
> appreciated in the entry-level DSP books.
>
> Best regards, Piotr
Quick question : Since your frequency is 50 Hz, why not use a SOGI-PLL? Is there a reason to try another filter structure?
Reply by ●March 26, 20192019-03-26
On Monday, March 25, 2019 at 8:52:55 PM UTC-4, Steve Pope wrote:
> Piotr Wyderski <peter.pan@neverland.mil> wrote:
>
> >I have a classic digital PLL with multiplier-based phase detector,
> >intended to lock at 50Hz. The sampling frequency Fs is 25kHz, the loop
> >filter bandwidth varies between Fc=10Hz to 40Hz, as I am experimenting
> >with different filter structures. The PLL itself works like
> >a charm and my reference filter is a 500th order FIR: fir1(500,Fc/(Fs/2)).
>
why does it work so well?
because with a passband requirement of circa 50 Hz and a stopband requirement circa 25 kHz, the loop filter is not particularly challenging. Why use a 500 order filter?
fundamentally the filtering is easy because your Fs is much higher compared to the desired loop BW. Works the same way in analog implementations.
m
Reply by Steve Pope●March 25, 20192019-03-25
Piotr Wyderski <peter.pan@neverland.mil> wrote:
>I have a classic digital PLL with multiplier-based phase detector,
>intended to lock at 50Hz. The sampling frequency Fs is 25kHz, the loop
>filter bandwidth varies between Fc=10Hz to 40Hz, as I am experimenting
>with different filter structures. The PLL itself works like
>a charm and my reference filter is a 500th order FIR: fir1(500,Fc/(Fs/2)).
>
>To a reasonable degree the loop converges to a 55Hz input signal after
>4..5 periods; after about 12 periods the phase error is essentialy zero:
>
>https://i.postimg.cc/MpmPz0QK/convergence-sine-fir.png
>https://i.postimg.cc/hGGrgknp/convergence-sine-fir-magnified.png
>
>(green is the input, blue is the VCO signal, red is the error)
>
>Interestingly, in the case of a heavily distorted signal the convergence
>is still great:
>
>input=0.5*(1.5*sin(2*pi*f0+(80.0/180.0)*pi)+0.5*sin(3*2*pi*f0+(60.0/180.0)*pi)
>+ 0.2*sin(5*2*pi*f0+(45.0/180.0)*pi) +
>0.15*sin(7*2*pi*f0+(36.0/180.0)*pi) + 0.1*sin(11*2*pi*f0+(30.0/180.0)*pi))
>
>https://i.postimg.cc/t48TCPQw/convergence-sine-fir-distorted.png
>
>But to te point: as the overhead of the FIR is bit too high, my next
>attempt was to use 2 sections of the same biquad
>
> fs=25e3;
> fc=35;
> Wc=fc/fs;
>
> [B,A] = cheby1(2,1,Wc);
>
>The convergence rate is worse, but still acceptable. I am concerned
>with the huge relative magnitude of the B and A coefficients, as the
>target implementation is going to be fixed-point. But as a double-based
>proof of concept it is fine.
You can use a lattice topology to reduce the coefficient sensitivity and
ensure stability when implementing this transfer function. (If you're
using Matlab with the filter design thingie, this is called an
"ARMA" filter.)
>My third attempt was to use an exponential moving averager and
>experiment with the alpha. It turns out that 8 EMA sections (I'm not
>sure the term "order" is still correct here) in series, all with
>alpha=1/70 work comparably well to the IIR.
Is this another way of saying you're using a cascade of single-pole
IIR filters? Which is to say, you're using a Bessel filter?
Steve
Reply by Piotr Wyderski●March 24, 20192019-03-24
I have a classic digital PLL with multiplier-based phase detector,
intended to lock at 50Hz. The sampling frequency Fs is 25kHz, the loop
filter bandwidth varies between Fc=10Hz to 40Hz, as I am experimenting
with different filter structures. The PLL itself works like
a charm and my reference filter is a 500th order FIR: fir1(500,Fc/(Fs/2)).
To a reasonable degree the loop converges to a 55Hz input signal after
4..5 periods; after about 12 periods the phase error is essentialy zero:
https://i.postimg.cc/MpmPz0QK/convergence-sine-fir.pnghttps://i.postimg.cc/hGGrgknp/convergence-sine-fir-magnified.png
(green is the input, blue is the VCO signal, red is the error)
Interestingly, in the case of a heavily distorted signal the convergence
is still great:
input=0.5*(1.5*sin(2*pi*f0+(80.0/180.0)*pi)+0.5*sin(3*2*pi*f0+(60.0/180.0)*pi)
+ 0.2*sin(5*2*pi*f0+(45.0/180.0)*pi) +
0.15*sin(7*2*pi*f0+(36.0/180.0)*pi) + 0.1*sin(11*2*pi*f0+(30.0/180.0)*pi))
https://i.postimg.cc/t48TCPQw/convergence-sine-fir-distorted.png
But to te point: as the overhead of the FIR is bit too high, my next
attempt was to use 2 sections of the same biquad
fs=25e3;
fc=35;
Wc=fc/fs;
[B,A] = cheby1(2,1,Wc);
The convergence rate is worse, but still acceptable. I am concerned
with the huge relative magnitude of the B and A coefficients, as the
target implementation is going to be fixed-point. But as a double-based
proof of concept it is fine.
My third attempt was to use an exponential moving averager and
experiment with the alpha. It turns out that 8 EMA sections (I'm not
sure the term "order" is still correct here) in series, all with
alpha=1/70 work comparably well to the IIR. The number of
multiplications is a bit higher than in the case of a biquad (16
instead of 10), but the structure seems to be unconditionally
stable and easy to implement in fixed-point. It even seems to
require less scaling fun than a good implementation of the FIR.
https://i.postimg.cc/TPPZSN4X/convergence-ema-sine.pnghttps://i.postimg.cc/MTVtryqS/convergence-ema-distorted.pnghttps://i.postimg.cc/5yf57TsB/convergence-ema-distorted-magnified.png
(in the last case the VCO tracks the f0 frequency component exactly,
there is no phase error, contrary to the first impression from the plot).
I think I am onto something, but most likely not the first one.
Could you please explain to me why the multi-stage EMA works so
well or suggest a good reading on the theoretical properties of
this kind of structures? I haven't seen the performance of EMAs
appreciated in the entry-level DSP books.
Best regards, Piotr