add some docs

This commit is contained in:
Klagarge committed 2023-11-20 21:38:23 +01:00
1 parent 8c4bdd9e41
commit 01d9d71ff5
10 files changed
+402 -5

No files matched your search

+4
View File
@@ -1,5 +1,9 @@
#Demo #Demo
$$
E=mc^2
$$
[transmission_process.md](transmission_process.md)
## embedding it directly ## embedding it directly
```mermaid ```mermaid
+55
View File
@@ -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
+162
View File
@@ -0,0 +1,162 @@
# Tailles
- Nibble: 4 bits
- Byte: 8 bits
- Halfword: 16 bits
- Word: 32 bits
- Double Word: 64 bits
# Bases
## Decimal
{digits}
<u>Exemple:</u>
ex: 154
## Hexadecimal
0x_{hex_digits}
&{hex_digits}
<u>Exemple:</u>
0x9A
&9A
## Octal
0{octal_digits}
8_{octal_digits}
<u>Exemple:</u>
0232
8_232
## Binary
2_{binary_digits}
0b{binary_digits}
<u>Exemple:</u>
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
```
+4
View File
@@ -1,6 +1,7 @@
# Taille des paquets de bits # Taille des paquets de bits
Nom valable uniquement pour l'architecture ARM, attention certain nom peuvent changer pour d'autres architecture Nom valable uniquement pour l'architecture ARM, attention certain nom peuvent changer pour d'autres architecture
|Nom |Taille | |Nom |Taille |
|-----------|-------| |-----------|-------|
|Nibble | 4 bits| |Nibble | 4 bits|
@@ -8,3 +9,6 @@ Nom valable uniquement pour l'architecture ARM, attention certain nom peuvent ch
|Halfword |16 bits| |Halfword |16 bits|
|Word |32 bits| |Word |32 bits|
|Double word|64 bits| |Double word|64 bits|
[PLA.md](PLA.md)
[ASM.md](ASM.md)
Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

+41 -5
View File
@@ -11,14 +11,36 @@
<body> <body>
<div id="app"></div> <div id="app"></div>
<script> <script>
window.$docsify = { window.$docsify = {
name: '', name: '',
repo: '' repo: '',
}, maxLevel: 3,
} coverpage: false,
autoHeader: true,
loadNavbar: true,
pagination: {
previousText: {
'/en/': 'PREV',
'/' : 'PREC'
},
nextText: {
'/en/': 'NEXT',
'/': 'SUIV'
},
crossChapter: true,
crossChapterText: true,
},
latex: {
inlineMath : [['$', '$'], ['\\(', '\\)']], // default
displayMath : [['$$', '$$']], // default
customOptions: {} // default
}
};
</script> </script>
<!-- Docsify v4 --> <!-- Docsify v4 -->
<script src="//cdn.jsdelivr.net/npm/docsify@4"></script> <script src="//cdn.jsdelivr.net/npm/docsify@4"></script>
<!-- Render graph (UML/Mermaid/... -->
<script src="//unpkg.com/docsify-kroki"> <script src="//unpkg.com/docsify-kroki">
kroki: { kroki: {
langs: [ langs: [
@@ -52,7 +74,21 @@
], ],
serverPath: "//localhost:8000/" serverPath: "//localhost:8000/"
</script> </script>
<!-- Copy code button -->
<script src="//cdn.jsdelivr.net/npm/docsify-copy-code/dist/docsify-copy-code.min.js"></script> <script src="//cdn.jsdelivr.net/npm/docsify-copy-code/dist/docsify-copy-code.min.js"></script>
<!-- Pagination -->
<script src="//unpkg.com/docsify-pagination/dist/docsify-pagination.min.js"></script> <script src="//unpkg.com/docsify-pagination/dist/docsify-pagination.min.js"></script>
<!-- LateX -->
<script src="//cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
<script src="//cdn.jsdelivr.net/npm/docsify-latex@0"></script>
<!-- Flexible alert -->
<script src="https://unpkg.com/docsify-plugin-flexible-alerts"></script>
<!-- Code highlights -->
<script src="//cdn.jsdelivr.net/npm/prismjs@1/components/prism-armasm.js"></script>
</body> </body>
</html> </html>
+136
View File
@@ -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
<u>Automatic Repeat reQuest</u>
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
<u>Forward Error Coding</u>
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]]
<u>Exemple FEC 1/3 (1 bit de donnée pour 3 bit transmit)</u>
$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
<u>Symbol:</u>
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]]