diff --git a/docs/README.md b/docs/README.md index 3520f3c..df4d4e4 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,5 +1,9 @@ #Demo +$$ +E=mc^2 +$$ +[transmission_process.md](transmission_process.md) ## embedding it directly ```mermaid diff --git a/docs/arm/ASM.md b/docs/arm/ASM.md new file mode 100644 index 0000000..b07d74a --- /dev/null +++ b/docs/arm/ASM.md @@ -0,0 +1,55 @@ +# Intro +## Mode de fonctionnement +A l'initialisation du processeur, le mode "system" est activé + +|Processor mode|Notation|Description| +|---|---|---| +|User|\_usr|The normal program execution mode| +|FIQ|\_fiq|Designed to support a high-speed transfer or channel process| +|IRQ|\_irq|Used for general–purpose interrupt handling| +|Supervisor|\_svc|A protected mode for the operating system| +|Abort|\_abt|Used to implement virtual memory and/or memory coprocessor| +|Undefined|\_und|Used to support software emulation of hardware coprocessor| +|System|\_sys|Used to run privileged operating system tasks| + +## Les registres du processeur ARM +![[Pièces jointes/Pasted image 20230928150906.png]] +### Rôle des registres +- Les registres `r0` à `r12`sont libre pour un usage général +- Le registre `r13`appelé `SP`(Stack Pointer) sert comme pointeur de pile propre à chaque mode +- Le registre `r14` appelé `LR`(Link Register) mémorise l'adresse de retour lors d'un appel de fonction +- Le registre `r15`appelé `PC`(Program Counter) pointe sur la prochaine instruction à exécuter +- `CPSR`(Current Program Status Register) est le registre d'états courant du processeur +- `SPSR` (Saved Program Status Register) est le registre de sauvegarde de l'ancien registre d'états + +### Registres `CPSR`et `SPSR` +Les registres `CPSR`et `SPSR`regroupent: +- Les fanions concernant la plus récente opération réalisée par l'ALU +- Les bits d'acceptation ou de refus d'interruptions électriques +- Le mode du processeur codé sur 5 bits +- Le bit d'activation du jeu d'instructions Thumb + ![[Pièces jointes/Pasted image 20231120100133.png]] + +## Les fanions +A chaque opération mathématique ou logique, l'ALU peut positionner des fanions +- **N** `Negative` - Nombre négatif. C'est le bit de signe du nombre en complément à 2 +- **Z** `Zero` - Nombre = 0. Utilisé généralement avec des compteurs pour effectuer des boucles +- **C** `Carry` - Retenue ou dépassement de capacité lors d'opérations sur des nombres logiques +- **V** `oVerflow` - Dépassement de capacité lors d'opérations arithmétiques en complément à 2 +>[!warning] +>Toute les instructions n'affectent pas tous les fanions + +## Exécution conditionnelle +Chaque instruction du processeur ARM peut-être exécutée sous condition +- Pour rendre une instruction conditionnelle, il suffit d'ajouter deux lettres à sa mnémonique +- L'opcode de chaque instruction comprend un champ "condition" + ![[Pièces jointes/Pasted image 20231120103537.png]] +```armasm +CMP r0, r1 ; Update flags based on r0 - r1 +ADDGT r0, r0, #4 ; If r0 greater than r1 THEN r0 = r0 + 4 + ; ELSE ADDGT is skipped +ADDLT r1, r1, #4 ; IF r0 less than r1 THEN r1 = r1 + 4 + ; ELSE ADDLT is skipped +``` +![[Pièces jointes/Pasted image 20230928151308.png]] +# Instructions de branchement \ No newline at end of file diff --git a/docs/arm/PLA.md b/docs/arm/PLA.md new file mode 100644 index 0000000..8a82ce8 --- /dev/null +++ b/docs/arm/PLA.md @@ -0,0 +1,162 @@ +# Tailles +- Nibble: 4 bits +- Byte: 8 bits +- Halfword: 16 bits +- Word: 32 bits +- Double Word: 64 bits + +# Bases +## Decimal +{digits} + +Exemple: +ex: 154 + +## Hexadecimal +0x_{hex_digits} +&{hex_digits} + +Exemple: +0x9A +&9A + +## Octal +0{octal_digits} +8_{octal_digits} + +Exemple: +0232 +8_232 + +## Binary +2_{binary_digits} +0b{binary_digits} + +Exemple: +2_10011010 +0b10011010 +# Directives +## EQU +- La directive *EQU* assigne une constante numérique au nom symbolique *name* +- La directive *EQU* définit une constante, appelée constante d'assemblage (assembly-time constant) + +```armasm +MAX_TEMP EQU 99 +BUFFER_SIZE EQU 20*16 + + MOV r0, #MAX_TEMP ; remplace MOV r0, #99 + MOV r1, #BUFFER_SIZE ; remplace MOV r1, #320 +``` + +## GBLx +- La directive *GBLA* déclare une variable globale arithmétique initialisée à 0 +- La directive *GBLL* déclare une variable globale logique initialisée à `{FALSE}` +- La directive *GBLS* déclare une variable globale de type chaîne de caractères initialisés comme une chaîne vide "" + +## EXPORT & GLOBAL +- La directive *EXPORT* déclare à l'éditeur des liens que le nom symbolique peut-être référencé + - Dans un autre objet + - Dans un autre fichier +- La directive *GLOBAL* est un synonyme +``` armasm + AREA Example, CODE, READONLY + EXPORT DoAdd ; Export the function name + ; DoAdd to be used by + ; external modules. +DoAdd ADD r0, r0, r1 +``` + +## EXTERN & IMPORT +- La directive *EXTERN* informe l'assembleur que le nom symbolique n'est pas défini dans le fichier courant +- Le nom symbolique *symbole* est traité comme une adresse + - Sa valeur est définie lors de l'opération d'édition des liens + - Avant l'opération d'édition des liens, sa valeur est zéro +``` armasm + AREA Example, CODE, READONLY + EXTERN __C_INITIALIZE ; If C++library linked, gets + ; the adress of __C_INITIALIZE + + LDR r0, __C_INITIALIZE ; In not linked, adress is zeroed + CMP r0, #0 ; Test if zero + BEQ noCLinked ; Branch on the result +``` + +## DCB +- La directive *DCB* + - Réserve un ou plusieurs [bytes](#Tailles) en mémoire + - définit la valeur initiale de ces positions mémoires + - Lors de l'exécution du programme (runtime), les valeurs de ces positions mémoires peuvent être changées +``` armasm +nbChar DCB 24, 32 +cString DCB "C_string", 0 +``` +>[!warning] +>Si la directive ***DCB*** est suivie par une instruction, l'usage de la directive ***[ALIGN](#ALIGN-amp-ORG)*** est indispensable + +![](img%2FPasted%20image%2020231116153738.png) + + + +## DCW +- La directive *DCW* + - Réserve un ou plusieurs [halfword (16bits)](#Tailles) en mémoire à une adresse paire + - Définit la valeur initiale de ces positions mémoires +``` armasm +number EQU 10 +data DCW -255, 2*number +``` +>[!warning] +>Si la directive ***DCW*** est suivie par une instruction, l'usage de la directive ***[ALIGN](#ALIGN-amp-ORG)*** est indispensable + +![](img%2FPasted%20image%2020231116154303.png) + +## DCD +- La directive *DCD* + - Réserve un ou plusieurs [word (32 bits)](#Tailles) en mémoire à une adresse multiple de 4 + - Définit la valeur initiale de ces positions mémoires +```armasm +data1 DCD 1, 5, 20 ; Defines 3 words containing + ; decimal values 1,5,and 20 +data2 DCD data1 + 4 ; Defines 1 word containing 4 + + ; the address of the label data1 +``` +![](img%2FPasted%20image%2020231116154853.png) + +## SPACE +- La directive *SPACE* réserve un bloc mémoire initialisé à zéro + - La taille du bloc mémoire est exprimée en byte +```armasm + AREA MyData, DATA, READWRITE +buffer SPACE 255 ; Define 255 bytes of zeroed store +``` +>[!warning] +>Si la directive ***SPACE*** est suivie par une instruction, l'usage de la directive ***[ALIGN](#ALIGN-amp-ORG)*** est indispensable + +![](img%2FPasted%20image%2020231116155200.png) + +## ALIGN & ORG +- La directive *ALIGN* aligne la position courante à un multiple de *expr*, en ajoutant si nécessaire des bytes de bourrage +```armasm +label1 DCB 1 ; PC now misaligned + ALIGN ; Ensure that Func1 addresses +Func1 ; now aligned on 4-byte boundary + MOV r5, #0x5 + ... ... ; Code + MOV pc, lr ; Code + ALIGN 8 ; Now aligned on 8-byte boundary + +rout2 ... ... ; Code +``` +- La directive *ORG* fixe la valeur absolue de la position courante + +```armasm + ORG 0x4000 ; instructions start at addr 0x4000 + MOV r5, #0x5 + ... ... ; Code + MOV pc, lr ; Code + + ORG 0x8000 ; data start at addr 0x8000 +Data1 DCD 12 +Data2 DCD 0 +``` + diff --git a/docs/arm/README.md b/docs/arm/README.md index 0f272dc..6179d21 100644 --- a/docs/arm/README.md +++ b/docs/arm/README.md @@ -1,6 +1,7 @@ # Taille des paquets de bits Nom valable uniquement pour l'architecture ARM, attention certain nom peuvent changer pour d'autres architecture + |Nom |Taille | |-----------|-------| |Nibble | 4 bits| @@ -8,3 +9,6 @@ Nom valable uniquement pour l'architecture ARM, attention certain nom peuvent ch |Halfword |16 bits| |Word |32 bits| |Double word|64 bits| + +[PLA.md](PLA.md) +[ASM.md](ASM.md) \ No newline at end of file diff --git a/docs/arm/img/Pasted image 20231116153738.png b/docs/arm/img/Pasted image 20231116153738.png new file mode 100644 index 0000000..a8e1792 Binary files /dev/null and b/docs/arm/img/Pasted image 20231116153738.png differ diff --git a/docs/arm/img/Pasted image 20231116154303.png b/docs/arm/img/Pasted image 20231116154303.png new file mode 100644 index 0000000..1a794af Binary files /dev/null and b/docs/arm/img/Pasted image 20231116154303.png differ diff --git a/docs/arm/img/Pasted image 20231116154853.png b/docs/arm/img/Pasted image 20231116154853.png new file mode 100644 index 0000000..6e08a10 Binary files /dev/null and b/docs/arm/img/Pasted image 20231116154853.png differ diff --git a/docs/arm/img/Pasted image 20231116155200.png b/docs/arm/img/Pasted image 20231116155200.png new file mode 100644 index 0000000..e797526 Binary files /dev/null and b/docs/arm/img/Pasted image 20231116155200.png differ diff --git a/docs/index.html b/docs/index.html index a8582d9..9f31d1a 100644 --- a/docs/index.html +++ b/docs/index.html @@ -11,14 +11,36 @@
+ + + + + + + + + + + + + + + + diff --git a/docs/transmission_process.md b/docs/transmission_process.md new file mode 100644 index 0000000..2b087ff --- /dev/null +++ b/docs/transmission_process.md @@ -0,0 +1,136 @@ +# Statistique +$E$ : Ensemble de tous les éléments de l'expérience +$P(u) = \frac{\#u}{\#E}$ : Probabilité que $u$ soit vrai dans l'ensemble $E$. +$P(v) = \frac{\#v}{\#E}$ : Probabilité que $v$ soit vrai dans l'ensemble $E$. +$P(u|v) = \frac{\# (u \space \&\& \space v)}{\#v}$ : Probabilité que $u$ soit vrai dans l'ensemble des $v$ vrai. +$P(u,v) = \frac{\#(u \space \&\& \space v)}{\# E}$ : Probabilité que $u$ et $v$ soient vrai dans l'ensemble $E$ + +$$\begin{align} +Mean &= \sum^{n}_{k=0} P_{x}\cdot X_{k} \\ +Variance &= \sum^{n}_{k=0}(X_{k}-Mean)^{2}\cdot P_{x} \\ +ecart-type &= \sqrt{ Variance } +\end{align}$$ + +# Digitalisation d'un signal +![[Pièces jointes/Pasted image 20230921090301.png]] +## Quantification +résolution: $2^{\text{nbits}}$ + +>[!example] MATLAB (A2) +>![[Pièces jointes/Pasted image 20231114203300.png]] +>![[Pièces jointes/Pasted image 20231114203320.png]] + + + + +### Déquantification + +>[!example] MATLAB (A2) +>![[Pièces jointes/Pasted image 20231114203411.png]] +>$$\begin{align} \\ +\text{Add: } +\frac{\frac{Q_{P}}{2^{double(Q_{Nb})-1}}}{2} +\text{ for offset and take middle of value} +\end{align}$$ +> +> +>![[Pièces jointes/Pasted image 20231114203425.png]] + + +## Échantillonnage +Mesure à chaque clock +$f_{s} = 2*f_{out}$ +$f_{s}$ : Fréquence de sample +>[!example] MATLAB (A1) +>![[Pièces jointes/Pasted image 20231114203111.png]] + +### Reconstruction +Passe-bas avec $f_{c} = \frac{f_{s}}{2}$ +$f_{c}$ : Fréquence de coupure +>[!example] MATLAB (A1) +>![[Pièces jointes/Pasted image 20231114203129.png]] + + + + + + +# Contrôle d'erreur +## ARQ +Automatic Repeat reQuest +Technique pour contrôler les erreurs en communication bidirectionnelle +Avec un canal de retour comme "stop & go" ou "TCP" +![[Pièces jointes/Pasted image 20231114204351.png]] + +## FEC +Forward Error Coding +Technique pour contrôler les erreurs en communication monodirectionnelle : +- Envoie de 3 fois ou n (impair) fois chaque bit +- Avec code de Hamming + ![[Pièces jointes/Pasted image 20231114204109.png]] + Exemple FEC 1/3 (1 bit de donnée pour 3 bit transmit) + $E_{0}$ : 0 bit faux + $E_{1}$ : 1 bit faux + $E_{2}$ : 2 bits faux + $E_{3}$ : 3 bits faux + $P(E_{0})=(1-BER)\cdot(1-BER)\cdot(1-BER)$ + $P(E_{1})=(1-BER)\cdot(1-BER)\cdot BER$ + $P(E_{2})=(1-BER)\cdot BER \cdot BER$ + $P(E_{3})=BER\cdot BER\cdot BER$ + +|bit 1 | bit 2 | bit 3 | Résultat | P(juste) | +|---|---|---|---|---| +|J|J|J|Juste|$P(E_{0})$| +|J|J|F|Juste|$P(E_{1})$| +|J|F|J|Juste|$P(E_{1})$| +|J|F|F|Faux|$P(E_{2})$| +|F|J|J|Juste|$P(E_{1})$| +|F|J|F|Faux|$P(E_{2})$| +|F|F|J|Faux|$P(E_{2})$| +|F|F|F|Faux|$P(E_{3})$| +Pour la probabilité d'erreur total, on additionne les faux résultats. Soit : +$$\begin{align} +P(E) &= P(E_{2}) + P(E_{2}) + P(E_{2}) +P(E_{3}) \\ +&= 3\cdot P(E_{2})+P(E_{3}) \\ +&= 3\cdot (1-BER)\cdot BER \cdot BER + BER\cdot BER\cdot BER \\ +&= 3\cdot BER^{2}-2\cdot BER^{3} +\end{align}$$ + +### MATLAB (B1-B2) +>[!example] Codage du canal +>![[Pièces jointes/Pasted image 20231114212419.png]] + +>[!example] Décodage du canal +>![[Pièces jointes/Pasted image 20231114212538.png]] + + + + + +# Codage physique + +Bits $\to$ Symbol + +Symbol: +Représentation d'un ou plusieurs bits dans le monde réel + +## BPSK +2 symboles - 1 bit / symbole +![[Pièces jointes/Pasted image 20231114205027.png]] + +## QPSK +4 symboles - 2 bits / symbole +![[Pièces jointes/Pasted image 20231114205105.png]] + +# Transmission Radio +## AM +Modulation de l'Amplitude +![[Pièces jointes/Pasted image 20231114210448.png]] + +## FM +Modulation de la Fréquence +![[Pièces jointes/Pasted image 20231114210510.png]] + +## PM +Modulation de la Phase +![[Pièces jointes/Pasted image 20231114210537.png]]