% !TEX encoding = MacOSRoman
\documentclass[10pt,landscape]{article}
\usepackage{multicol}
\usepackage{calc}
\usepackage{ifthen}
\usepackage[landscape]{geometry}
\usepackage[frenchb]{babel}
\usepackage[applemac]{inputenc}
\usepackage{graphicx}

%------------------------- CONFIGURATION START ----------------------------------

\ifthenelse{\lengthtest { \paperwidth = 11in}}
	{ \geometry{top=.5in,left=.5in,right=.5in,bottom=.5in} }
	{\ifthenelse{ \lengthtest{ \paperwidth = 297mm}}
		{\geometry{top=1cm,left=1cm,right=1cm,bottom=1cm} }
		{\geometry{top=1cm,left=1cm,right=1cm,bottom=1cm} }
	}

% Turn off header and footer
\pagestyle{empty}

% Redefine section commands to use less space
\makeatletter
\renewcommand{\section}{\@startsection{section}{1}{0mm}%
                                {-1ex plus -.5ex minus -.2ex}%
                                {0.5ex plus .2ex}%x
                                {\normalfont\large\bfseries}}
\renewcommand{\subsection}{\@startsection{subsection}{2}{0mm}%
                                {-1explus -.5ex minus -.2ex}%
                                {0.5ex plus .2ex}%
                                {\normalfont\normalsize\bfseries}}
\renewcommand{\subsubsection}{\@startsection{subsubsection}{3}{0mm}%
                                {-1ex plus -.5ex minus -.2ex}%
                                {1ex plus .2ex}%
                                {\normalfont\small\bfseries}}
\makeatother

% Define BibTeX command
\def\BibTeX{{\rm B\kern-.05em{\sc i\kern-.025em b}\kern-.08em
    T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}

% Don't print section numbers
\setcounter{secnumdepth}{0}


\setlength{\parindent}{0pt}
\setlength{\parskip}{0pt plus 0.5ex}

%------------------------- CONFIGURATION END ----------------------------------

\begin{document}

\raggedright
\footnotesize
\begin{multicols}{3}


% multicol parameters
% These lengths are set only within the two main columns
%\setlength{\columnseprule}{0.25pt}
\setlength{\premulticols}{1pt}
\setlength{\postmulticols}{1pt}
\setlength{\multicolsep}{1pt}
\setlength{\columnsep}{2pt}



\begin{center}
  \Large{\textbf{Memo intro telecom}} \\
\end{center}


\section{Traitement signaux}
Intérêt de la numérisation d'un signal:
\begin{itemize}
\item tolérant au bruit \\
\item facile à régénérer \\
\item facile à implanter électroniquement \\
\item formalisme identique pour la parole, l'image et les données
\end{itemize}

\subsection{PCM \texttt{Pulse Code Modulation}}
\newlength{\MyLen}
\settowidth{\MyLen}{\texttt{letterpaper}/\texttt{a4paper} \ }
\begin{enumerate}
\item échantillonnage (Sampling) \\
\item quantification (Quantizing) \\
\item encodage (Encoding) \\
\end{enumerate}

\section{Représentation d'un signal analogique}

\subsection{Représentation temporelle}
\begin{itemize}
\item le signal analogique devient un signal numérique discretisé en temps \\
\item caractérisé par une \textbf{amplitude} et une \textbf{fréquence}\\
\item modélisé par une sinusoïde
\end{itemize}
\begin{equation}
s(t)=Asin(\omega t+\phi)
\end{equation}
\begin{itemize}
\item A l'amplitude (ou valeur crête)\\
\item $\omega$ la pulsation (aussi: $\omega = 2 \pi f = \frac{2 \pi}{T}$, avec f la fréquence d'échantillonnage et T la période) \\
\item t la période d'échantillonnage \\
\item $\phi$ la phase à l'origine
\end{itemize}

\subsection{Représentation fréquentielle (spectre)}
\begin{itemize}
\item somme infinie de fonctions sinusoïdales \\
\item ces fonctions sinusoïdales sont les harmoniques du signal
\item permet de représenter tout signal périodique
\end{itemize}
Autrement:
\begin{equation}
s(t) = a_{0} + \sum_{n=1}^\infty (a_{n} cos(2 \pi n F_{0} t) + b_{n} sin(2 \pi n F_{0} t))
\end{equation}
où $a_{n}$ et $b_{n}$ sont les \textbf{coefficients de la série de Fourier}.\\

On peut aussi écrire cette relation sous la forme d'un développement en \textbf{harmoniques} (composante dont la fréquence est un multiple de la fréquence fondamentale $F_{0}$: \\
\begin{equation}
s(t)=a_{0} + \sum_{n=1}^\infty c_{n} cos(2 \pi F_{0} t + \phi_{n})
\end{equation}
avec
\begin{equation}
c_{n} = \sqrt{a_{n}^{2} + b_{n}^{2}} \ et \ \phi_{n} = arctg(-\frac{b_{n}}{a_{n}})
\end{equation}
ou encore
\begin{equation}
s(t) = \sum_{n = -\infty}^{\infty} S(nF_{0})e^{j 2 \pi n F_{0} t}
\end{equation}
avec
\begin{equation}
S(nF_{0}) = \frac{1}{2} (a_{n} - jb_{n})
\end{equation}
Les valeurs négatives de \textit{n} sont introduites dans un but de simplification, mais, étant donnée que \textit{s(t)} est réel, nous avons:
\begin{equation}
a_{-n} = a_{n} \ et \ b_{-n} = - b_{n}
\end{equation}

\subsection{Spectre}
Le \textbf{spectre} en fréquence du signal représente l'amplitude du fondamentale $F_{0}$ et des différentes harmoniques en fonction de la fréquence $f = nF_{0}$. \\
\textbf{ATTENTION}: le spectre d'une fonction périodique est discontinu et composé de raies dont l'écart minimum est, sur l'axe des fréquences, $F_{0}$. \\
$S(nF_{0})$ représente les composantes du spectre en fréquence de $s(t)$, grandeur en général complexe, qui a donc pour module: \\
\begin{equation}
|S(nF_{0})| = \frac{1}{2} \sqrt{a^2_{n} + b^2_{n}} = \frac{c_{n}}{2}
\end{equation}
et pour phase:
\begin{equation}
\phi (nF_{0}) = arctg(- \frac{b_{n}}{a_{n}})
\end{equation}
En conclusion, le spectre $S(f)$ du signal périodique $s(t)$ est alors représenté par l'expression suivante:
\begin{equation}
S(f) = \sum_{n = - \infty}^{\infty} S(nF_{0}).\delta (f - nF_{0})
\end{equation}
avec:
\begin{equation}
S(nF_{0}) = |S(nF_{0})|e^{- j \phi (nF_{0})}
\end{equation}
où $\delta$ représente un pic de Dirac. \\

\subsection{exemple}
on a le signal temporel suivant:
\begin{center}
$s(t) = cos(2 \pi F_{0} t)$
\end{center}
On va représenter le spectre bilatéral de $s(t)$ sachant que la décomposition en série de Fourier est définie par:
\begin{center}
$a_{0} = 0 \ , \ a_{1} = 1 \ , \ et \ a_{n} = 0 \ \forall n > 1$ \\
$b_{n} = 0 \ \forall n \geq 0$
\end{center}
Il s'agit d'un spectre réel puisque la partie imaginaire est nulle $\forall$ n.\\
D'après (6),
\begin{center}
$S(F_{0}) = \frac{1}{2} (a_{1} - jb_{1}) = \frac{1}{2} \ et \ S(-F_{0}) = \frac{1}{2} (a_{-1} - jb_{-1}) = \frac{1}{2}$
\end{center}
Donc d'après (10),
\begin{center}
$S(f) = \frac{1}{2}.\delta (f - F_{0}) + \frac{1}{2}.\delta ( f + F_{0})$
\end{center}
Ce qui se dessine: \\
\includegraphics[width=4cm]{exemple_temporel.png}
\includegraphics[width=4cm]{exemple_frequentiel.png}

\subsection{application}
A partir de la série:
\begin{itemize}
\item il est possible à partir de sa série de Fourier, de retrouver un signal \\
\item en identifiant les valeurs $a_n$ et $b_n$ il est possible de représenter son spectre (on choisit arbitrairement un nombre d'harmoniques). \\
\item astuce: rammener l'expression de la série à une des formes vu plus haut
\end{itemize}
A partir du spectre:
\begin{itemize}
\item on peut en déduire la série de Fourier \\
\item c'est un peu plus compliqué de déduire la série de Fourier
\end{itemize}

\subsection{exemple}
Si on a les paramètres suivant:
\begin{itemize}
\item le nombre de points $N=32$ \\
\item la fréquence d'échantillonnage $F_{s}=8000$ \\
\item la période d'échantillonnage $T_{s}= \frac{1}{F_{s}}$ \\
\item la résolution fréquentielle $freqStep=\frac{F_{s}}{N}$ \\
\item la fréquence du signal $f=3*freqStep$ \\
\item et $t \in N*T_{s}$
\end{itemize}
Aussi, on a le signal suivant:
\begin{equation}
s(t)=cos(2 \pi f t)
\end{equation}
Il faut remarque que plus $N$ est grand, plus le signal serra précis \\
\includegraphics[width=4cm]{exemple_sinusoide.png}
\includegraphics[width=4cm]{exemple_magnitude.png} \\
L'harmonique remarquable, par son amplitude, est celle située en 3, on peut donc en déduire que le signal $s(t)$ est composé \textit{exclusivement} d'un cosinus de fréquence
\begin{equation}
3\Delta=3\frac{F_{s}}{N}=3*\frac{8000}{32}=750 Hz
\end{equation}

\subsection{Transformée de Fourier}
La transformation de Fourier est un analogue de la théorie des séries de Fourier pour les fonctions non périodiques, et permet de leur associer un spectre en fréquences.
\begin{itemize}
\item il faut travailler sur une discrétisation du signal $s(t)$, donc il faudra nécessairement tronquer le support temporel \\
\item comme le signal est discret, la transformée de Fourier est dite \textit{discrète}
\end{itemize}
La DFT réalise la correspondance entre 2 suites de $N$ termes: \\
\includegraphics[width=8cm]{dft.png} \\
La \textit{représentation fréquentielle} entre les points de la représentation fréquentielle est:
\begin{equation}
\Delta f = \frac{F_{e}}{N}
\end{equation}
Elle dépend donc:
\begin{itemize}
\item de la période d'échantillonnage temporelle $T_{e}$ \\
\item \textbf{ET} du nombre de points fournis à la DFT
\end{itemize}

\section{Echantillonnage}
\begin{itemize}
\item pour quoi faire ? discrétiser un signal analogique (et ainsi le numériser) \\
\item comment ? en utilisant Dirac sur une période d'échantillonnage $T_{e} = t_{i+1} - t_{i} \forall i$ \\
\item \textbf{ATTENTION}: le nombre de valeurs possibles est fini
\end{itemize}
Il faudra retenir que:
\begin{itemize}
\item Si on sur-échantillonne, le signal numérique deviendra trop lourd à transporter \\
\item Si on sous-échantillonne, le signal numérique ne pourra pas être reconstruit en signal analogique
\end{itemize}
Fréquence d'échantillonnage idéale de \textit{Shannon}:
\begin{equation}
F_{e} \geq 2.F_{max}
\end{equation}
avec $F_{max}$ la plus haute fréquence présente dans le spectre du signal. \\

\section{Quantification}
\textit{"Sur combien de niveaux va t-on représenter l'information ?"} \\
\begin{itemize}
\item on essaye de prendre un ensemble de valeurs discrètes, qu'on va séparer en niveaux \\
\item ça compresse l'information (mais avec pertes :/) \\
\item peut être [non] uniforme (l'erreur est constante) \\
\item s'il y a du bruit, on préfère utiliser des quantificateurs non uniformes (logarithmique)
\end{itemize}

\section{Encodage}
\textit{"J'ai X niveaux, de combien de bits ai-je besoin pour coder un échantillon ?"} \\

\section{La bande passante}
\begin{itemize}
\item c'est une \textit{taille} \\
\item le \textit{canal} par lequel on fait transiter l'information \\
\item l'intervalle des fréquences (des harmoniques) admissibles forme la bande passante \\
\item téléphone: $300 Hz - 3400 Hz \Rightarrow f_{e} = 6800 Hz$, on prend $8 kHz$ \  [$64 kbps $(8000 échantillons par seconde x 8 bits par échantillon)] \\
\item haute fidélité: $20 kHz \Rightarrow f_{e} = 40 kHz$, on prend $44,1 kHz$ \ [$0,7 Mbps$ (16 bits par échantillon, quantification linéaire)] \\
\item télé numérique: $5 MHz \Rightarrow f_{e} = 10 kHz$, on prend $10 MHz$ \ [$80 Mbps$ (8 bits par échantillon)]
\end{itemize}

\section{Modulation}
Transformation d'un signal source en une forme adaptée au canal de transmission (en faisant varier l'amplitude ou la \textit{phase/fréquence} d'une onde sinusoïdale appelée porteuse) \\
\includegraphics[width=8cm]{modulation.png}
\textbf{ATTENTION}: $\Rightarrow$ sinon on peut émettre en \textbf{bande de base} si le signal et le canal sont sur les mêmes fréquences. \\
\subsection{FM}
Il existe 2 types de modulation de fréquence:
\begin{itemize}
\item VHF (Very High Frequency) avec une bande de fréquence de 30 MHz à 300 MHz \\
\item UHF (Ultra Hight Frequency) avec une bande de fréquence de 300 MHz à 3 GHz
\end{itemize}
Le soucis: la portée est limitée par l'horizon, il faut donc mettre des antennes relais sur les points hauts \\
On utilise les \textbf{ondes courtes} ($<$ 30 MHz) qui utilise le phénomène de \textit{propagation ionosphérique}.

\section{Commutation}
Il n'est pas possible de relier tout le monde, fil par fil. A la place on a mis en place le système de commutation ! La connexion d'une personne à une autre est faite \textbf{dynamiquement}. (comme le téléphone, ou RTC Réseau Téléphonique Commuté)
\subsection{Commutation spaciale}
C'est le système avec la standardiste qui met en connexion manuellement 2 personnes qui pourraient être éloignée géographiquement.
\subsection{Commutation de circuit}
C'est le système automatisé, ou le numéro de téléphone va indiquer le \textit{chemin} à prendre pour établir la connexion, ce qui prend quelques secondes. \\
désavantage: sous utilisation de la ligne. \\
avantages:
\begin{itemize}
\item simple à implanter aussi bien sur un réseau analogique que numérique \\
\item capacité du lien et débit de transmission garanti
\end{itemize}

\section{Multiplexage/Démultiplexage}
\begin{itemize}
\item permettre à plusieurs utilisateurs de se partager un même support physique de transmission \\
\item avoir l'impression d'être le seul à l'utiliser \\
\item parce qu'une communication (audio par exemple) est constituée à 90\% de blanc, on chercher à optimiser l'utilisation du médium de transmission \\
\item le coût élevé du montage des liaisons de transmissions sur de longues distances et/ou de grandes capacité
\end{itemize}
\subsection{Multiplexage temporel}
par exemple l'ordonnancement des tâches dans un ordinateur. C'est en fait la possibilité de faire transiter sur un même canal plusieurs signaux en accordant une tranche de temps fixe à chacun.
\subsection{Multiplexage fréquentiel}
chaque entrée possède sa plage de fréquences en sortie. \\
Les spectres de fréquences en entrée sont mis dans la sortie du multiplexeur fréquentiel grâce à la \textbf{modulation}.

\section{Le medium}

\subsection{Attenuation et affaiblissement}
\begin{itemize}
\item L'attenuation d'un signal est le coefficient d'extinction en décibel par km \\
\item le retard de conduction dans une paire de conducteurs en métal:
\end{itemize}
\begin{equation}
T(secondes) = C * R
\end{equation}
avec C la capacité et R la résistance. \\
\begin{itemize}
\item affaiblissement
\end{itemize}
\begin{equation}
\alpha = \sqrt{\pi f C R}
\end{equation}

La rapidité de modulation est le nombre de symboles par seconde:
\begin{equation}
R = \frac{1}{\Delta} Bauds
\end{equation}
avec $\Delta$ la durée d'un symbole. \\
Dans notre cas, Bauds = Nombre de bits par seconde. \\
On a $RMAX=2W$ avec W la bande passante du support. \\
Par exemple sur le RTC la bande passante est comprise entre 300Hz et 3400Hz, donc W=3400, d'où $R_{max}$=6800 Bauds. \\
\textbf{ATTENTION}:
\begin{itemize}
\item la bande passante limite le nombre de bauds \\
\item un symbole peut représenter plus qu'un bit ! (par exemple la Modulation QAM
\end{itemize}

\subsection{La valence}
Le nombre d'états (ou symboles) significatifs que peut prendre le signal.\\
\begin{equation}
D = R*log_{2}(V)
\end{equation}
avec D le débit en ligne, et V la valence. \\
Par exemple:
\begin{center}
modulation de phase à 8 états ($2^3$), à 1600 Bauds, on obtient: \\
$D = 1600 * 3 = 4800 bits/s$
\end{center}

\subsection{Modulation QAM (Quadrature Amplitude Modulation}
C'est l'association d'une modulation d'amplitude et d'une modulation de phase. \\
Avec une constellation à 64 points, on peut transférer 6 bits par Baud.

\subsection{xDSL}
Modulation de la phase pour multiplexer plusieurs canaux à la foisn donc si on dispose de:
\begin{itemize}
\item bande de fréquence de 1 MHz \\
\item on veut des canaux de 4 Hz \\
\item $\frac{1000}{4} = 250$ canaux possibles
\end{itemize}
Si de base le canal permettait de faire passer 33,6 Kbps, on dispose d'un débit total de:
\begin{center}
$\frac{250*33,6}{1000} = 8,4$ Mbps
\end{center}

\subsection{La fibre optique}
\begin{itemize}
\item énorme bande passante \\
\item indifférent au bruit \\
\item de petite taille \\
\item faible rayon de courbure
\end{itemize}

\section{Les réseaux}

\subsection{Topologies de réseaux}
\includegraphics[width=8cm]{topologies.png}

\subsection{Protocoles}
\textbf{définition}: Les protocoles sont les régles et les formats définissants les caractéristiques d’une communication entre entités de \textit{même niveau}. \\
Le protocole peut devoir gérer l’échange en présence d’incidents :
\begin{itemize}
\item Pannes matérielles\\
\item Congestion du réseau\\
\item Retard ou perte d’unité de données\\
\item Altération de données\\
\item Duplication ou déséquencement d’unité de données.
\end{itemize}

\subsection{La couche Application}
\begin{itemize}
\item protocoles user applications\\
\item protocoles support applications
\end{itemize}

\subsection{La couche Transport}
\begin{itemize}
\item fournit des services de communication \textit{end to end} aux applications\\
\item TCP\\
\item UDP
\end{itemize}

\subsection{La couche Internet}
\begin{itemize}
\item controle et gestion de la connexion \\
\item par exemple IP
\end{itemize}

\subsection{La couche Liaison}
\begin{itemize}
\item s'occupe de l'adressage MAC \\
\item découpe les données a transporter en trames de [72-1526] octets \\
\item la détection d'erreur (pas la réparation !) \\
\item en fait si, avec la FCE (Forward Correction Error) \\
\item la contention (évitage de collision)
\end{itemize}

\subsection{Switch et Hub}
Un \textbf{hub} va re-émettre sur tout le réseau (en étoile) qu'il interconnecte. \\Le \textbf{switch} va \textit{router} en regardant les informations relatives à l'IP, dans le but de ne pas monopoliser le réseau en entier.

\subsection{Architecture d'internet}
\includegraphics[width=8cm]{arch_internet.png}

\subsection{Port}
Un \textbf{port} est une destination abstraite sur une machine identifiée par un numéro (dit de port) qui sert d’interface a l’application (et éventuellement aux processus sous-jacents) pour recevoir et émettre des données, son rôle est donc de permettre a plusieurs programmes d’application de communiquer. \\Il demultiplexe les infos reçues vers différents programmes d’application en utilisant les numéros de port(Ceci étant, il est possible que sur un même ordinateur plusieurs connexions partagent un même numero de port) . \\Bien qu’UDP ne fragmente pas ses messages, IP le fera si le MTU du réseau physique ne permet pas d’acheminer le message sans modifier sa taille. 

\subsection{UDP}
UDP fournit deux services supplémentaires par rapport à IP :
\begin{enumerate}
\item Il introduit la notion de port, ceci permet de distinguer plusieurs applications destinatrices sur la meme machine par l’intermediaire de ports différents. C’est la notion de multiplexage- demultiplexage appliquée à une pile de protocoles.\\
\item Il fournit (de façon optionnelle) un checksum qui permet de vérifier l’integrité des données. Motivation : Le service proposé est \textit{grosso modo} une \textit{interface transport} pour IP\\
\item permet le multicast
\end{enumerate}

\subsection{TCP}
Le protocole TCP (Transmission Control Protocol) procure un service de flux d’octets oriente connexion et fiable. Il dispose de 5 particularités :
\begin{enumerate}
\item Orientation Connexion (une machine client et l'autre serveur. Connexion requise avant tout dialogue)\\
\item Circuits virtuels\\
\item Transferts tamponnes\\
\item Connexions non structurées\\
\item Connexions bidirectionnelles simultanées (full duplex).Motivation :Ce service était nécessaire, sous peine de voir chaque programme d’application développer ses propres mécanismes de contrôle.\\
\item ne permet pas le multicast
\end{enumerate}

\subsection{Fenêtre glissante}
son but est d'améliorer l'efficacité de la transmission du flux, elle permet aussi de réguler le trafic en fonction de la charge des routeurs et du débit des réseaux traverses.

\subsection{Algorithme de Nagle} : plus les ACK reviennent vite plus les données sont envoyés plus vite. Transmettre un message signifie donc un transfert de haut en bas a travers les couches logicielles, puis un transfert de bas en haut. 

\subsection{ARP}
Déroulement du protocole ARP dans Ethernet:
\includegraphics[width=8cm]{arp.png}

\subsection{MTU}
Maximum Transmit Unit.\\
C'est la taille maximale d'une trame sur un réseau, la trame en question est réajustée dans le cas ou elle doit transiter sur un réseau intermédiaire ou le MTU est plus petit.\\
\textbf{ATTENTION}: la réciproque est fausse

\section{Mémo Code Python}

\subsection{génération d'un signal sinusoïdal}
\begin{verbatim}
def make_sin(a=1, ph=0, freq=440.0, N=100, n=30):
    T = 1.0/freq
    omega = (2*math.pi)/T
    te= T/n       # Sampling period
    print te      
    print 1.0/te  # Sampling frequency
    sig_t = [] 
    sig_s = []
    for i in range(N):
        t = i*te
        sig_t.append(t)
        sig_s.append(a*math.sin((omega*t)+ph))
    # Faire un tableau a partir d'une liste    
    x = numpy.array(sig_t)
    y = numpy.array(sig_s)
    return x, y
\end{verbatim}

\subsection{génération d'un signal carré}
\begin{verbatim}
def make_square(a=2, freq=440.0, r=0.5, N=100, n=30):
    sig_t = []
    sig_s = []
    T = 1.0/freq
    te= T/n       # Sampling period
    for i in range(N): 
        t = i*te
        sig_t.append(t)
        if ((i%n)<(n*r)):
            sig_s.append(+a)
        else:
            sig_s.append(-a)
    # Faire un tableau a partir d'une liste    
    x = numpy.array(sig_t)
    y = numpy.array(sig_s) 
    return x, y
\end{verbatim}

\subsection{génération d'un signal en scie}
\begin{verbatim}
def make_saw(a=1, freq=440.0, N=100, n=30):
    x = numpy.zeros(N,dtype=numpy.float32)
    y = numpy.zeros(N,dtype=numpy.float32)
    T = 1.0/freq
    te= T/n       # Sampling period
    for i in range(N): 
        t = i*te
        x[i] = t
        y[i] =  2*a*(t/T - math.floor((t/T)) -0.5)
    return x, y
\end{verbatim}

\subsection{additionner deux signaux}
Je considère que $s1$,$s2$ et $s3$ sont des signaux existants.\\
$s4$ serra le signal \textit{somme}.
\begin{verbatim}
s4 = []
  for i in range(len(s1[0])):
    s4.append(s1[1][i] + s2[1][i] + s3[1][i])
\end{verbatim}

\subsection{afficher un signal}
On affiche le signal res en bleu pointillé:
\begin{verbatim}
pylab.plot(res[0], res[1], 'b.')
pylab.ylim([-3, 3])
pylab.xlim([0, 1])
pylab.show()
\end{verbatim}

\subsection{afficher une image et utilisation de la FFT}
\begin{verbatim}
im = Image.open('train.png').convert('I')
im = im.rotate(90)
SZ = im.size[0]
print "debug de l'image:",im.format, im.size, im.mode
plt.figure(1)
plt.clf()
plt.imshow(im,
		  cmap=plt.cm.gray_r,
		  interpolation="Nearest",
		  origin="lower")
F1 = np.fft.fft2(im)
F2 = np.fft.fftshift(F1)
# Inverse fft
imm = np.fft.ifft2(F1)
plt.figure(5)
plt.clf()    
#print imm
plt.imshow(imm.real, cmap=cm.gray)
plt.show()
\end{verbatim}

\subsection{ecouter au micro}
Retourne les données vers le fd donné en paramètre.
\begin{verbatim}
def ecouteur(nbSecondes=5,fd=1):
    inp = alsaaudio.PCM(alsaaudio.PCM_CAPTURE,
    				      alsaaudio.PCM_NORMAL)
    inp.setchannels(1)
    inp.setrate(8000)
    inp.setformat(alsaaudio.PCM_FORMAT_S16_LE)
    inp.setperiodsize(512)
    fini = False
    startFlag1 = time.time()
    while not fini:
            l,data = inp.read()
            if l:
                tailleDonneesEcrites = os.write(fd, data)
            endFlag1 = time.time()
            if (endFlag1 - startFlag1) >= nbSecondes:
                fini = True
    os.close(fd)
\end{verbatim}

\subsection{vers le haut parleur}
Lit depuis le fd donné en paramètre vers le haut parleur.
\begin{verbatim}
def toSpeakers(nbSecondes=5,fd=1):
    out = alsaaudio.PCM(alsaaudio.PCM_PLAYBACK,
    				      alsaaudio.PCM_NORMAL)
    out.setchannels(1)
    out.setrate(8000)
    out.setformat(alsaaudio.PCM_FORMAT_S16_LE)
    out.setperiodsize(512)
    fini = False
    startFlag2 = time.time()
    data = os.read(fd, 512*2)
    while not fini:
        while data <> "":
            out.write(data)
            endFlag2 = time.time()
            if (endFlag2-startFlag2) >= (nbSecondes):
                fini = True
            data = os.read(fd, 512*2)
    os.close(fd)
\end{verbatim}

\subsection{serveur}
\begin{verbatim}
def serveur(p):
    s = socket.socket(socket.AF_INET,
    			        socket.SOCK_DGRAM)
    s.bind(("",p))
    sortie = False
    while not sortie:
        datagrm, addr = s.recvfrom(1024)
        if datagrm:
            print datagrm
        if datagrm == "fini":
            sortie = True
    s.close()
\end{verbatim}

\subsection{client}
\begin{verbatim}
def stresseur(addr,p,limite):
    s = socket.socket(socket.AF_INET,
    			        socket.SOCK_DGRAM)
    i = 0
    while i < limite:
        s.sendto("des données"), (addr, p))
        i += 1
    s.sendto("fini", (addr, p))
    s.close()
\end{verbatim}

\subsection{Serveurs UDP et TCP}
\includegraphics[width=4cm]{srv_udp.png}
\includegraphics[width=4cm]{srv_tcp.png}


\end{multicols}
\end{document}































