Hi, A bessel filter should have nearly constant group delay up to a certain frequency. In my case, this should be fs=100MHz. What am I doing wrong with this MATLAB code? set(cstprefs.tbxprefs,'FrequencyUnits','Hz'); fs = 100e6; [num,den] = besself(9,2*pi*fs); H = tf(num,den); f_axis = logspace(3, 11, 10000); bode(H, f_axis);grid on; The result is http://snag.gy/wweJj.jpg which shows that the phase is constant up to 1 MHz but not up to 100 MHz. (Of course, if I plot the group delay it is not constant either). Thank you. Peter
Bessel filter: What am I doing wrong?
Started by ●September 13, 2014
Reply by ●September 13, 20142014-09-13
Sorry I think you can disregard the question. I made the same mistake again I did before: Forgot to take the derivative wrt frequency. (i.e., not only diff(phase) but diff(phase)./diff(frreq)) ... On 2014-09-12 21:04, Peter Mairhofer wrote:> Hi, > > A bessel filter should have nearly constant group delay up to a certain > frequency. In my case, this should be fs=100MHz. > > What am I doing wrong with this MATLAB code? > > set(cstprefs.tbxprefs,'FrequencyUnits','Hz'); > fs = 100e6; > [num,den] = besself(9,2*pi*fs); > H = tf(num,den); > f_axis = logspace(3, 11, 10000); > bode(H, f_axis);grid on; > > The result is http://snag.gy/wweJj.jpg which shows that the phase is > constant up to 1 MHz but not up to 100 MHz. (Of course, if I plot the > group delay it is not constant either). > > Thank you. > Peter >
Reply by ●September 13, 20142014-09-13
you might just use the following functions: freqz(num,den) grpdelay(num,den) _____________________________ Posted through www.DSPRelated.com
Reply by ●September 13, 20142014-09-13
On Fri, 12 Sep 2014 21:20:49 -0700, Peter Mairhofer wrote: (top posting fixed)> > On 2014-09-12 21:04, Peter Mairhofer wrote: >> Hi, >> >> A bessel filter should have nearly constant group delay up to a certain >> frequency. In my case, this should be fs=100MHz. >> >> What am I doing wrong with this MATLAB code? >> >> set(cstprefs.tbxprefs,'FrequencyUnits','Hz'); >> fs = 100e6; >> [num,den] = besself(9,2*pi*fs); >> H = tf(num,den); >> f_axis = logspace(3, 11, 10000); >> bode(H, f_axis);grid on; >> >> The result is http://snag.gy/wweJj.jpg which shows that the phase is >> constant up to 1 MHz but not up to 100 MHz. (Of course, if I plot the >> group delay it is not constant either). >> > > Sorry I think you can disregard the question. > > I made the same mistake again I did before: Forgot to take the > derivative wrt frequency. (i.e., not only diff(phase) but > diff(phase)./diff(frreq)) ...And you plotted phase vs. log(frequency). Had you plotted phase vs. _linear_ frequency you should have seen a much straighter line. Don't count on getting over this with experience: 99% of the time you want to see stuff vs. log(frequency), so it's pretty common even for experts to forget when they're working in that 1%. You just need to pad your right hand so you don't get a concussion from slapping your forehead too much. -- Tim Wescott Wescott Design Services http://www.wescottdesign.com