Author Topic: Bessel low pass filter design for DDS  (Read 28815 times)

0 Members and 1 Guest are viewing this topic.

Offline T3sl4co1l

  • Super Contributor
  • ***
  • Posts: 21972
  • Country: us
  • Expert, Analog Electronics, PCB Layout, EMC
    • Seven Transistor Labs
Re: Bessel low pass filter design for DDS
« Reply #25 on: January 11, 2015, 06:14:08 pm »
Thats actually interesting! Because the website you've posted  calculated the values exact same as me, but in reverse order, like having input and output of the filter interchanged. So who's correct? Or is the filter symmetrical also when components arent? (That seem odd to be).

By reciprocity, it doesn't matter which end you call the "input" or "output".  Waves don't care, they just bounce back and forth through the structure.  There may be practical reasons, like presenting a certain dominant inductance or capacitance to the outside (or inside) world.

Once upon a time, I was involved in the design of, essentially, a DAQ (data acquisition) system.  We found that a 5th order Bessel did a fine job for Fs = 4*Fc.

Note that, for arbitrary waveforms, your 20MHz DAC with 5MHz cutoff can't describe anything with risetime below 70ns, fundamental above 5MHz, or effective symbol rate over 10MHz.  A waveform will look like trash until it's got more than a few points, limiting your arbitrary waves to perhaps <500kHz (N=40, but only 1/10th of Fc).

Statements like "effective symbol rate" seem disingenuous when your sample rate is obviously an explicit 20MHz -- but, that's exactly the point: a good flat filter exhibits a gradual cutoff, not the hard cutoff and aliasing due to sampling alone.  It won't drop off suddenly at 5.0MHz, it will do so gradually.  Whereas pushing to 10MHz requires ever sharper filters (and more ringing), and attempting more results in complete aliasing (you can't sample a 15MHz waveform at 20MHz and get 15MHz out -- actually, you can, but only because you get 5MHz, and 15, and 25, and etc. all at once, and you have no way to disambiguate which sidebands are the intended signal!).

The slope of a Bessel is very gradual, so the components can pretty loose.  I suggest picking standard 5% C0G caps and RF inductors (usually powdered iron or air cored for this range), testing the frequency and step response in SPICE, and adjusting values to get a reasonable response.

Tim
Seven Transistor Labs, LLC
Electronic design, from concept to prototype.
Bringing a project to life?  Send me a message!
 

Offline YansiTopic starter

  • Super Contributor
  • ***
  • Posts: 3893
  • Country: 00
  • STM32, STM8, AVR, 8051
Re: Bessel low pass filter design for DDS
« Reply #26 on: January 11, 2015, 06:44:55 pm »
tggzzz: At least we can get close enough by slapping some numbers into ready-to-use filter calculator. The values in schematics in the datasheet looks pretty same as what I got from the calculator. See attachement please.

Notice the 200ohm impedance... I think designing such filter at about 100-300ohm is pretty common, so no problems with that.

jpb: I'll try find it.

As I look at teh cauer/elliptical filter - it has only some shunt capacitancies accross the inductors. The filter can be easily routed on the board as universal layout one could use for both variants.

What I plan to do or use:  Two switchabe filters, bessel and elliptical. Both at about 200 ohm impedance, both 7th order, fc = 5MHz.  I will switch 'em with a signal relay, probably SPDT on both ends. (easy for proper layout). Sadly I've just found my SMD signal relays are 24V..  Maybe I'll just slap there Omron G5V1, it is SPDT I think, and have them both 5 and 12V I think. They should be pretty fine with this kind of frequency.

The unsolved are:
What OPamp and how to do the I/V stage
How to design output stage
Where to put the amplitude and offset controlling elements

I gotta some ideas to these three points, I will write something to them little later, now I must leave for a while...


T3sl4co1l: I plan 64K sample memory. And I understand the point of having arbs at a maximum frequency only a fraction of what I can get with sine. I will test and toy a little with that, to see where the limits are.
Iron powder RF cores are nice, no problems with that. But for those values around 1uH and below, it is becoming a little problematic I think. Is it possible to use SMD0805 inductors? I have ready to use set of those.
 

Offline G0HZU

  • Super Contributor
  • ***
  • Posts: 3124
  • Country: gb
Re: Bessel low pass filter design for DDS
« Reply #27 on: January 11, 2015, 07:47:45 pm »
That is a nice advice, I appreciate that, but I can't do that so I haven't considered at all.  :-//

7th order 3 * fc about 40dB (fast guess). That is not enough? Thats 100 times reduction in amplitude. Is that really not enough for a simple lowcost gen?

//I might screwed the calculation, but if 7th order is 42dB/octave, at 3fc it will give  42*log(3)/log(2) = 66dB reduction.. Hell, that is a lot!(an I've just plotted a graph in the AADE rubbish, it also says me about 66dB at that kind o frequency, of course using lossless ideal parts)
Screwed crap...  guess was close enough, might be around that, about 35dB

With a decent synthesis/simulation tool it's possible to design a compensated filter in a few seconds.

eg see below for a compensated elliptic filter.

This (simulated) filter has flat group delay from LF right up to 5MHz. i.e. the change in group delay is <1ns from LF to 5MHz. So it is as flat as a Bessel filter from LF to 5MHz but it offers much steeper rolloff.
The penalty is that it is a much more complicated filter to build.

Obviously, it won't produce very good square waves because it cuts off sharply at 5MHz. But I'm not sure what your priorities are. But this filter has the same group delay time for 1kHz as it does for 5MHz.
« Last Edit: January 12, 2015, 01:30:59 am by G0HZU »
 

Offline YansiTopic starter

  • Super Contributor
  • ***
  • Posts: 3893
  • Country: 00
  • STM32, STM8, AVR, 8051
Re: Bessel low pass filter design for DDS
« Reply #28 on: January 11, 2015, 08:16:46 pm »
G0HZU: That's nice filter, but I've really no idea how did you do that or how the schematic should look like. And those "much complicated" I am aware of...  So probably lets start with Bessel and Cauer.  These are the two which I might be able to design. Complicated stuff is just complicated. I never built any filter like so, so I'd rather start with more basic one.

...and probably learn how to use spice.

My priorities are... I tried to explain, but it wasn't caught. Just not to complicate complicated even more, so at first, I'd like to start with basics.

The unsolved three a little later, still some work to be done here..   :-\
 

Online nfmax

  • Super Contributor
  • ***
  • Posts: 1579
  • Country: gb
Re: Bessel low pass filter design for DDS
« Reply #29 on: January 11, 2015, 09:44:27 pm »
Recently I had to design an anti-alias filter for a system with a bandwidth of around 15MHz, where the transient response was critical, no overshoot permitted, but the sampling frequency limited to about 100MHz. I found a 'maximally flat delay with Chebyshev stopband' design with n=7 worked very well, scaled to 50ohm impedance. This has the same circuit topology as an elliptic or Cauer design, but different component values. It has an almost purely Gaussian impulse response, so it should be just as good for the DDS application.
The trick is to forget entirely about frequency response in the passband, and instead concentrate on rise time and freedom from overshoot: let the 3dB frequency be what it may. This is rather like the rationale for a Gaussian frequency response on oscilloscopes, it does the best job of preserving the waveshape. So long as the stopband response is low enough to limit the amplitude of any aliases to somewhere around 1lsb of your DAC, the design is good. The design tables are in Williams 'Electronic filter design handbook', 3rd edition, section 11.
I didn't have a circuit simulator handy, so I used Matlab to set up and solve the nodal admittance matrix for the circuit. Easy to do a Monte Carlo analysis and to investigate the effect of inductor resistance. The design is quite tolerant of inductor Q, and 5% tolerance parts were fine.
A design like this will work for arbitrary signals, but with sine waves you can do better with a sharp cutoff elliptic design: since there is only one wanted frequency present you don't care about phase response, except for generating a sync output. For square waves the best way to go is to generate the sine wave and use a fast comparator - this can be your sync output for sine waves as well. Using two filters like this lets you generate sine and square waves up to a frequency closer to the Nyquist limit, without the drop off in amplitude which the 'arbitrary waveform' filter introduces at higher frequencies.
 

Offline YansiTopic starter

  • Super Contributor
  • ***
  • Posts: 3893
  • Country: 00
  • STM32, STM8, AVR, 8051
Re: Bessel low pass filter design for DDS
« Reply #30 on: January 11, 2015, 10:39:25 pm »
So if I got it right, the filter has to suppress the first image below 1LSB level. With 12bit DAC, it must be below -70dB. I think that is not easy with phase-linear filter design. How can such a beast as ?ebyšev have phase-linear response in the pass-band? I thought use of  ?ebyšev would likely make crap out of the arbiter waveforms. I didn't notice any use of this filter approx in this kind of application. Did I miss something?

Seems that the "basic DDS test design" should come up with a solution for easy testing of different filter configurations.

Sync out wasn't considered for this basic education-testing only design. And sure the comparator must be hooked directly on the output. (But arb waveforms with multiple zero X-ings complicate the simple use of comparator... But I have an idea how to deal it effectively)

So what others think of the ?ebyšev filter to be used as an output filter for arb waveforms?
 

Offline T3sl4co1l

  • Super Contributor
  • ***
  • Posts: 21972
  • Country: us
  • Expert, Analog Electronics, PCB Layout, EMC
    • Seven Transistor Labs
Re: Bessel low pass filter design for DDS
« Reply #31 on: January 12, 2015, 12:53:14 am »
The name Chebyshev is used because the design involves the eponymous polynomial as an approximation method.

The ideal filter response is 1.0 gain in the passband, 0.0 (or a certain maximum amount) in the stop band, and going from one to the other over a specified transition range.

Since an ideal square (brick wall) filter requires infinite poles, is either noncausal (starts moving before a signal is applied) or exhibits infinite time delay (but doesn't start moving before the signal is applied), and has poor step response (it exhibits both a sin x/x impulse response and Gibbs phenomenon), it's not very practical.

So, we make the sacrifice that the transition band must be continuous and gradual, and we have many degrees of freedom to traverse than "1 to 0" band.

The tightest approximation, in absolute terms, is the Butterworth.  Which, in more abstract mathematical terms, is an orthogonal series of polynomials, of increasing order, with some characteristic property.  The polynomials arise in fitting a polynomial curve to this problem; the metric is minimum RMS error, thus, the frequency response is maximally flat.

Chebyshev approximations work within a peak error band, rather than a mean or RMS weighted error metric.  This is why Chebyshev filters are specified with pass/stop band ripple.  The limit as ripple --> 0 is a Butterworth filter.

If, instead of approximating frequency and amplitude response exclusively, you dig deeper and find the phase shift / group delay, you can run some numbers on those.  If you go for maximally linear phase, you get a Bessel filter.

All all-pole filters have ripple (or not) in the passband and an asymptotic drop in the stop band.  You can't add nulls in the stop band, because those are zeros...

Filters with zeros (L||C links or L+C branches) have ripple in the stop band.  The passband response can still be any of the traditional types, but by adding zeros, the same can be done for the stop band as well (in reciprocal, of course).

The Cauer / Elliptical filter does this, using all poles and all zeros (Nz = Np) to achieve the sharpest (most sudden) possible frequency cutoff, at complete cost to asymptotic attenuation (it's flat at -xx dB, not a slope of -xx dB/dec), (usually?) having a Chebyshev response in the passband.

Cheb. filters are generally used where sharpest frequency response is required: analog radio and audio applications, for example.  Sound card outputs are an excellent example, typically having horrible step response -- but a frequency response of just over 20kHz for a sample rate of 44.1kHz, or whatever.  (Or these days, since digital is so cheap, it's typically upsampled and sinc interpolated, thus pre-filtering it in digital to get by with an even cheaper analog filter.)  They are avoided where excellent time-domain response is necessary: scopes*, digital radio, etc.

*Except some of the, DPO3000 or something like that Tek scopes were "100MHz" with lots of overshoot, another sign of their corporate change..

Tim
Seven Transistor Labs, LLC
Electronic design, from concept to prototype.
Bringing a project to life?  Send me a message!
 
The following users thanked this post: fonograph

Offline codeboy2k

  • Super Contributor
  • ***
  • Posts: 1836
  • Country: ca
Re: Bessel low pass filter design for DDS
« Reply #32 on: January 12, 2015, 06:41:57 am »
An interesting practical paper I found when I was searching this topic sometime ago is:

The Design and Construction of a DDS based
Waveform Generator
Darrell Harmon

I couldn't find the pdf directly when I looked just now but if you google it you should find the option to read it. You may have already looked at it as his design seems very similar to what you are working with.

It appears to be only available online at one view-only PDF hostage site (yumpu, similar to scribd, another PDF hostage site). No downloads even if you make an account there.

So I kept digging and here it is from the Internet Archive.

https://web.archive.org/web/20120417075707/http://dlharmon.com/~dlharmon/arb.pdf
 

Offline YansiTopic starter

  • Super Contributor
  • ***
  • Posts: 3893
  • Country: 00
  • STM32, STM8, AVR, 8051
Re: Bessel low pass filter design for DDS
« Reply #33 on: January 12, 2015, 11:29:45 pm »
Thanks for the pdf, looks like useful practical reading. Definitely will read that.

T3sl4co1l: Nicely done! I had to readit a few times, to understand it as a whole.  (but... "understand"... )
 

Offline Jay_Diddy_B

  • Super Contributor
  • ***
  • Posts: 2738
  • Country: ca
Re: Bessel low pass filter design for DDS
« Reply #34 on: January 13, 2015, 03:58:28 am »
Hi group,

Here is some LTspice analysis of the 7th order Butterworth filter used in Darrell Harmon's DDS Waveform generator.

In the first analysis I am sweeping the circuit with the calculated values and the values that were used by Darrell:



Results:




If I change the source to a 2 MHz square wave:




The results show a little ringing on the leading edges:



I have now modified the model to include Monte Carlo analysis. Is the analysis the simulation is run multiple times, I have set the number to 50 times. I have set the capacitor tolerance to 2% and the inductor tolerance to 5%.

Here is the model:



And the results show:



All the LTspice models are in the zipfile.

You can modify these models to other filter types. Enjoy !!

Regards,

Jay_Diddy_B

« Last Edit: January 13, 2015, 04:00:56 am by Jay_Diddy_B »
 

Offline Jay_Diddy_B

  • Super Contributor
  • ***
  • Posts: 2738
  • Country: ca
Re: Bessel low pass filter design for DDS
« Reply #35 on: January 13, 2015, 01:10:29 pm »
Hi group,

I have extended my model to illustrate the difference between a Butterworth and a Bessel Filter. Both filters are 50 Ohm input and output. Both filters were calculated from this link:

http://www.wa4dsy.net/filter/filterdesign.html

Here is the model:


The results for the frequency domain:



And the transient response with a 2 MHz square wave:





I have attached the models in a zipfile.

Regards,

Jay_Diddy_B
 

Offline YansiTopic starter

  • Super Contributor
  • ***
  • Posts: 3893
  • Country: 00
  • STM32, STM8, AVR, 8051
Re: Bessel low pass filter design for DDS
« Reply #36 on: January 13, 2015, 02:01:15 pm »
Thanks for the sims... Could you please add also Chebyshev and cauer/elliptic version in the same picture, to have the comparison complete? That would be very neat. One image worth thousand words.  :-+
 

Offline Jay_Diddy_B

  • Super Contributor
  • ***
  • Posts: 2738
  • Country: ca
Re: Bessel low pass filter design for DDS
« Reply #37 on: January 13, 2015, 02:54:52 pm »
Hi,

A picture is worth a thousand words, here are a few thousand words.

I have built a LTspice model to simulate clocking sine wave data into a filter. The model has two inputs. The ref_sine is the waveform that you want to generate and the sample clock. The rising edge of the sample clock is used to sample the reference waveform. This generates a waveform with steps. The same waveform you would get if you fed values from a look-up table into a DAC.

The output of the sample and hold is then fed to a filter. This should reconstruct the reference waveform (ideally).



Here is a sample waveform, the sample clock is 40 MHz and the reference sine is 4.5 MHz.





The FFT shows the fundamental 4.5 MHz and Fs - 4.5MHz and Fs + 4.5 MHz




I have attached the LTspice model in the zipfile.

You can replace the ref_sine voltage source with a PWL source if you want to try ARBs.

Regards,

Jay_Diddy_B
« Last Edit: January 13, 2015, 02:57:16 pm by Jay_Diddy_B »
 

Offline Jay_Diddy_B

  • Super Contributor
  • ***
  • Posts: 2738
  • Country: ca
Re: Bessel low pass filter design for DDS
« Reply #38 on: January 14, 2015, 12:22:10 pm »
Hi,

Here is a little more modelling to compare 7 pole filters for a DDS application.
I could not find a calculator for the elliptical (Cauer) filter, but I did find a 18 MHz filter on an Analog devices application note. I have also added a Chebyshev filter to the model.

There is no need for a lot of words, this is a continuation of the previous posts.















Regards,

Jay_Diddy_B
« Last Edit: January 14, 2015, 12:24:03 pm by Jay_Diddy_B »
 

Offline Pjotr

  • Frequent Contributor
  • **
  • Posts: 461
  • Country: nl
Re: Bessel low pass filter design for DDS
« Reply #39 on: January 14, 2015, 02:01:13 pm »
Nice demonstration about filtering. You can not have a nice low distortion sine reconstruction and a nice square wave/pulse reconstruction without ringing with the same filter.

The ringing of the square wave has by itself not much with the filter to do, it is just what a band limited square wave is.
 

Online nfmax

  • Super Contributor
  • ***
  • Posts: 1579
  • Country: gb
Re: Bessel low pass filter design for DDS
« Reply #40 on: January 14, 2015, 05:00:29 pm »
Sorry, I've been busy recently. Component values for a 'linear phase with Chebyshev stopband' design that is -3dB @17.4MHz with 19.8ns risetime, -66dB stopband from 68.8MHz upwards, and 0.1% overshoot, are:

R5 50R
C10 47p
L9 160n
C11 20p
C7 420p
L10 390n
C12 13p
C8 91p
L11 120n
C13 8p2
C9 12p
R6 50R

Component references are the same as Jay_Diddy_B's Elliptical design - just different values. I haven't got response plots handy, maybe Jay_Diddy_B could simulate it, please?  :) This is basically a Bessel passband with zeros in the stopband to improve rejection. Linear phase where we care, but not where we don't.

PS I don't claim this as an ideal design for your application, just 'one I prepared earlier'!
 

Offline YansiTopic starter

  • Super Contributor
  • ***
  • Posts: 3893
  • Country: 00
  • STM32, STM8, AVR, 8051
Re: Bessel low pass filter design for DDS
« Reply #41 on: January 14, 2015, 05:11:08 pm »
PS I don't claim this as an ideal design for your application, just 'one I prepared earlier'!

I didn't claim my DDS shoud or have to be ideal, because it simply won't be.  ;)

My app. will have 20MHz running DAC, so the filter should be  around 5 to 7 MHz. 
 

Offline Jay_Diddy_B

  • Super Contributor
  • ***
  • Posts: 2738
  • Country: ca
Re: Bessel low pass filter design for DDS
« Reply #42 on: January 15, 2015, 12:22:55 pm »
Sorry, I've been busy recently. Component values for a 'linear phase with Chebyshev stopband' design that is -3dB @17.4MHz with 19.8ns risetime, -66dB stopband from 68.8MHz upwards, and 0.1% overshoot, are:

R5 50R
C10 47p
L9 160n
C11 20p
C7 420p
L10 390n
C12 13p
C8 91p
L11 120n
C13 8p2
C9 12p
R6 50R

Component references are the same as Jay_Diddy_B's Elliptical design - just different values. I haven't got response plots handy, maybe Jay_Diddy_B could simulate it, please?  :) This is basically a Bessel passband with zeros in the stopband to improve rejection. Linear phase where we care, but not where we don't.

PS I don't claim this as an ideal design for your application, just 'one I prepared earlier'!


nfmax and the group,

Here is the simulation of the above filter

First the model:



Then the AC analysis, this shows the filter is not as steep as some of the other filters modelled:




The transient response is similar to the Bessel filter:



In the DDS circuit, the filter performs similar to the Bessel filter:




The FFT also shows:




Regards,

Jay_Diddy_B



« Last Edit: January 15, 2015, 12:24:45 pm by Jay_Diddy_B »
 

Online nfmax

  • Super Contributor
  • ***
  • Posts: 1579
  • Country: gb
Re: Bessel low pass filter design for DDS
« Reply #43 on: January 15, 2015, 12:29:31 pm »
Jay_Diddy_B - cheers!
 

Offline Jay_Diddy_B

  • Super Contributor
  • ***
  • Posts: 2738
  • Country: ca
Re: Bessel low pass filter design for DDS
« Reply #44 on: January 16, 2015, 03:32:42 am »
PS I don't claim this as an ideal design for your application, just 'one I prepared earlier'!

I didn't claim my DDS shoud or have to be ideal, because it simply won't be.  ;)

My app. will have 20MHz running DAC, so the filter should be  around 5 to 7 MHz. 

I have adjusted the model to have a 20 Msps sample rate and 5MHz Bessel and Butterworth Filters. I have also changed the reference source so that it will sweep.

Here is the new model:



This is the full sweep:



These are samples of the waveforms at progressively higher frequencies:












I have attached a zipfile with the LTspice model.

Regards,

Jay_Diddy_B

« Last Edit: January 16, 2015, 03:35:19 am by Jay_Diddy_B »
 

Offline YansiTopic starter

  • Super Contributor
  • ***
  • Posts: 3893
  • Country: 00
  • STM32, STM8, AVR, 8051
Re: Bessel low pass filter design for DDS
« Reply #45 on: January 16, 2015, 03:18:26 pm »
Thank you Jay_Diddy_B, for your help simulating the filters for me. (Now I should learn how to use the spice...)

Now I'd like to make a small change of the topic. I'd like to leave the filter stuff, until I have working prototype of the DDS. I have at least some guess, what filters to use. But I have a little trouble design the I/V part and output buffer. Could you please help?

The original idea was to generate full swing signal in the I/V circuit on the DAC output, run it through the filter and then use only buffer with 0dB gain (including the 6dB loss in the filter, bcs of the same IN and OUT impedances). I planned to use there the TS613, but I quickly discovered, it is not enough.

So how should I design the analog path? What is the usual maximum output swing of generators? I  think it should be 10Vpp output (no load, so 5Vpp into 50ohm) and also include offset shift capability to the output. So the output stage would require at least +-15V supply voltage.

I have got multiplying DAC, AD5445. To control output amplitude, I will simply regulate the voltage at the DAC reference input.

To shift the offset level, I thought to do it in the output stage, by simply adding the offset control voltage together with the signal from the filter.

What are your reccomendations for designing the analog part please? The holy grail should be to keep it as low cost as posible, so I am not afraid of using more components (like for discrete buffer).

Lets start with the current2voltage part: What output amplitude should it produce? The output of the whole generator should be 10Vpp. It seems to be nonsense to make the I/V part generate full swing signal, because it would require very fast and expensive opamp.  The I/V output amplitude should be therefore a compromise of the opamp speed. Considering the 6dB voltage loss in the filter, I would prefer to have the output amplitude of about 2 to 4Vpp out of the I/V stage. Is it fine or did I miss any other drawbacks? With such an amplitude and the filter input impedance of about 200ohms, it does not require any highcurrent OPamp.

Output buffer: Here comes the trouble.  Very fast opamps capable of 30V supply voltage and 50ohm output are very expensive. I'd like to avoid using them. I'd like to build discrete or semi-discrete output buffer. The output stage must have some gain, not only pure buffer. Output voltage from filter woud be around volt to two, so the buffer should have gain at least of about 5 (14dB) to produce teh desired 10Vpp. I really don't know, if there is some simple discrete solution for this (obviously not), but using a standard OPamp with current gain stages seems like a more souitable way to do it. But the opamp must therefore be capable of working at 30V supply voltage and be fast enough to produce any usable quality of signal, at a gain of about 5 to 10. Are there some affordable "high" voltage and high speed opamps, or is there any other way how to make such a buffer with some voltage gain?

What do you think about my ideas for building the analog output circuitry?
Thank you,
Y
 

Offline Jay_Diddy_B

  • Super Contributor
  • ***
  • Posts: 2738
  • Country: ca
Re: Bessel low pass filter design for DDS
« Reply #46 on: January 16, 2015, 04:37:31 pm »
Yansi,

I would probably start a new thread, with a title like '5 MHz function generator output stage design'

Something like the LT1210 would be a suitable place to start for the output stage.

Regards,

Jay_Diddy_B
 

Offline YansiTopic starter

  • Super Contributor
  • ***
  • Posts: 3893
  • Country: 00
  • STM32, STM8, AVR, 8051
Re: Bessel low pass filter design for DDS
« Reply #47 on: January 16, 2015, 04:59:05 pm »
Ok, I'll do it. I just didn't want to spread my mess too much :-)

Thanx
Y
 


Share me

Digg  Facebook  SlashDot  Delicious  Technorati  Twitter  Google  Yahoo
Smf