The sounds normally characterized as voiced stops in Spanish, /b/, /d/ and /g/, each have two [allophones][1] (contextual variants), as you have noted. One is pronounced as a true stop (the one you call "strong"), while the other (the "soft" one) is pronounced as a weak fricative or an approximant, and sometimes [elided][2] (dropped). This kind of weakening is called **[lenition][3]**. For the most part the "strong" allophones are found at the beginning of words or after another consonant, especially nasals and liquids (/r/ and /l/). This varies with dialect, but we need not concern ourselves with the specifics.

Word-initial voiced stops remain always strong, moreover, only when the word is pronounced in isolation or with special care (e.g. when the speaker wants to emphasize them). If there is a word ending with a vowel before it, the word-initial voiced stop will be lenited just as if it were inside the word and surrounded by vowels. In your example, *«cada dos semanas»*, the initial /d/ in *dos* will always be "soft", because *cada* is a function word that always gets attached to the next word, so it's as though you had pronounced *\*cadadós*.

This is not *liaison* as in French; no new sound is appearing to link the two words (*enchaînement*). But depending on the analysis, it can be considered a related kind of change. French *liaison* makes a "hidden" consonant appear at the boundary between two words when two vowels would otherwise come into contact; Spanish lenition changes the **quality** of a consonant in that same environment. The effect in both cases is to soften the transition between the vowels.

There are differences, though. French *liaison* [takes into account grammatical factors][4] that Spanish lenition doesn't. In Spanish, if there are two vowels with a voiced stop in between and no forced pause is inserted, then the voiced stop will weaken, always.

As explained elsewhere, /b/, /d/ and /g/ all become lenited in certain contexts. When I say /b/ that's the sound that you'll find written as *b* or *v*, which are pronounced the same (no matter what anyone might tell you: **they mean the same sound, always**). And /g/ you can of course find written as *g* (as in *gato, gota, gula*) or as *gu* before *e* and *i* (as in *guerra, guitarra*); not the same as the *g* in *gel* or *gil* (which sounds the same as *j*). All of these can weaken to the point of disappearing altogether between vowels in some dialects and in fast speech.

There's a particular case that you might run into, having to do with "S-aspiration". The sound /s/ is sometimes "aspirated", pronounced [h] (like an English *h*) when syllable-final. This aspiration is also a kind of lenition or weakening, and it can also turn into elision (the sound is dropped altogether). But this weakening or disappearance is normally avoided, when the sound /s/ is at the end of a word, if the next word begins with a vowel. This is in fact rather similar to French *liaison*.

For example, a speaker might pronounce *«los patos»* as [lohpátoh], aspirating the two /s/ sounds; but in *«las águilas»* they will pronounce [lasáγilah] ([γ] = lenited /g/). And *«los patos y las águilas»* would come out as [lohpátosi lasáγilah] (since *y* = /i/, a vowel).

This is a very simplified explanation of actual S-aspiration in Spanish. Some dialects do not have it and others do different things with it, but that's the idea.


  [1]: https://en.wikipedia.org/wiki/Allophone
  [2]: https://en.wikipedia.org/wiki/Elision
  [3]: https://en.wikipedia.org/wiki/Lenition
  [4]: https://en.wikipedia.org/wiki/Liaison_(French)#Impossible_liaison