It seems like your having rubber-banding issues. Those issues are only caused by sudden drops in your network connection or lost packets. Think of it like a car engine misfiring occasionally.
These issues are most common on wireless networks or "shared" networks like some apartment buildings.
Your download speed seems fine but your upload seems a bit off as it's usually about 1/5 of your download speed. Typically on multi-player games your upload speed is more important than your download speed.
Also, try resetting your modem/router and see if that helps.
I would run some type of network monitor and watch your connection ( control + shift + escape then select networking ). Turn off any programs that use bandwidth (torrents, etc) and see what happens.
You could also try using the command prompt (start button - run or search box - type "cmd" without quotes and hitting enter) and then typing "ping -t" and the ip address of the server you are connecting to to see the extent and how often your ping fluctuates.
Example, one of my favorite BF3 servers (pRc - REDDIT: 64p | All Maps | Team Balance | PBBans GGC) it's ip address is 208.146.44.61.
So to ping it I open the command prompt and type the following:
ping -t 208.146.44.61
Then you will get something that says and it will keep repeating with only the time=XXXms changing:
Reply from 208.146.44.61: bytes=32 time=XXXms TTL=106
The only number that is important is the time=XXXms, as that is your ping to that server at that given time. If you happen to see something that says "Request timed out." then the information was dropped and it is a lost packet.
If you have a solid connection then your ping should not fluctuate by more than 40ms between the highest and lowest ping.
Also, let this run for about 2 or 3 minutes and see how things look.
Stop it by pressing Control + C
After doing that you will have your ping statistics show up. You will have the number of packets sent, packets received and packets lost. Also, the important stuff, your ping times.
They will be listed as minimum, maximum and average.
The closer those numbers are to 0 and the closer they are together, the better your connection is.