Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Zertyui

Télécharger au format docx, pdf ou txt
Télécharger au format docx, pdf ou txt
Vous êtes sur la page 1sur 6

Rappel sur TP1

Format (2.14)

R0.H = 0x2000; //0.5 in 2.14 format 00.10000000000000 = 2000

R1.H = 0x2ccd; //0.7 in 2.14 format

0.7*2 1

04*20

0.8*21

0.6*21

0.2*20

04*20

0.8*21

0.6*21

0.2*20

04*20

0.8*21

0.6*21

0.2*20

04*20

00.10110011001100 = 2CCC Après arrondissement  2CCD

Format (1.15)

0.5=0.10000..00 = 4000

0.7=599A

0.5+0.7

-0.3-0.7

#include "defBF533.h"

.global _main;

.section program;

.align 2;

_main:

R0.L= D99A;//-0.3
R0.H=4000;//0.5

R1.L= 599A;//0.7

R1.H=599A;//0.7

R2.L = 0000;//0

R2.H = 0000;//0

R2=R0+|-R1 (s);

_main.end:

TP2 : Ré-echantillonnage (Sous et le sur-échantillonnage)

Signal avec Fe1 = 48 kHz  Sous-échantillonnage avec le facteur Q = 6 donc Fe2 = 48000/6 = 8 kHz

On utilise le Ré-echantillonnage par exemple pour : -acquérir un signal de parole en éliminant des
informations car l’intervalle d’ouïe est [20 Hz , 20 kHz] pour la parole Fe2 = 8 kHz c’est largement
suffisant. Fe2/Fe1 =1/Q 8/48= 1/68 kHz = 48kHz/6 (on a gardé 1 échantillon sur 6).

Par contre pour l’audio si on a effectué une acquisition de musique à Fe1= 8 kHz il faut sur-
échantillonner le signal audio pour arriver à Fe2 = 48 kHz. ==> Interpolation afin d’augmenter la
qualité. Fe2/Fe1 =P 48/8= 6 =P (on intercale 6 zéros entre l’échantillon original).

Pour le cas d’interpolation, on répète le signal original P fois donc on doit appliquer un filtre passe-
bas qui a comme fréquence de coupure Fe1/2 afin d’éliminer la répétition.

Aussi il faut faire de Ré-echantillonnage pour additionner deux signaux de Fe différente afin
d’analyser le signal composite.

Sous-échantillonnage : Décimation par facteur Q (division)

Sur-échantillonnage : Interpolation par facteur P (multiplication)


On va effectuer :

- Input : Un signal sinusoïdal de fréquence fondamentale F0 = 1 kHz et de Fe )= 48 kHz


(sine1k.dat)
- Un filtre RIF de décimation avec Q = 6 (de 48 kHz à 8 KHz)
- Un filtre d’interpolation avec P= 2 (de 8 kHz à 16 KHz)
- Un filtre d’interpolation avec P= 2 (de 16 kHz à 32 KHz)
- Un filtre d’interpolation avec P= 3 (de 16 kHz à 48 KHz)

#include <cdefBF533.h>

#include <filter.h>

#include <fract.h>

//Appel aux bibliothèques de dsp BF5333, au filter et au mode fractionnaire

#define INPUTSIZE 480 //taille de sinusoide est 480 échantillons

fract16 inp_arr[INPUTSIZE] =

{#include "sine1k.dat" };

// c’est le signal d’entrée de taille 480 qui se trouve dans un tableau intitulé inp_arr

fir_state_fr16 filter_state_dec;

fract16 delay_dec[128];

fract16 coeff_dec[128] = { #include "fir_dec.dat" };


/* Pour faire la decimation, j’ai besoin des parametres suivants :

- Les coefficients du filtre (128 coefficients) RIF de type fract 16


- Etat de filtre intitulé « filter_state” de type fir_state_fr16
- Retard de décimation intitulé « delay_dec” de type fract 16 avec format (1.15)
- Nbre de coeff 128 coeffs
- decimation index   c’est l’indice de décimation 48000/8000 = 6
- */

fir_state_fr16 filter_state_interp_8to16;

fract16 delay_interp_8to16[64];

fract16 coeff_interp_8to16[64] = {

#include "interp_8kto16k_64taps.dat"

};

/* Pour faire l’interpolation, j’ai besoin des parametres suivants :

- Les coefficients du filtre intitulé coeff_interp_8to16 (64 coefficients) RIF de type fract 16
- Etat de filtre intitulé « filter_state_interp_8to16” de type fir_state_fr16
- Retard de décimation intitulé « delay_interp_8to16 ” de type fract 16 avec format (1.15)
- Nbre de coeff 128 coeffs (64taps) c’est un fichier à appeler interp_8kto16k_64taps.dat
- Interpolation index   c’est l’indice d’ Interpolation 2

*/

fir_state_fr16 filter_state_interp_16to32;

fract16 delay_interp_16to32[64];

fract16 coeff_interp_16to32[64] = {#include "interp_16kto32k_64taps.dat"};

/* Pour faire l’interpolation, j’ai besoin des parametres suivants :

- Les coefficients du filtre intitulé coeff_interp_16to32 (64 coefficients) RIF de type fract 16
- Etat de filtre intitulé « filter_state_interp_16to32” de type fir_state_fr16
- Retard de décimation intitulé « delay_interp_16to32 ” de type fract 16 avec format (1.15)
- Nbre de coeff 64 coeffs (64taps) c’est un fichier à appeler interp_16kto32k_64taps.dat
- Interpolation index   c’est l’indice d’ Interpolation 2

*/

fir_state_fr16 filter_state_interp_16to48;

fract16 delay_interp_16to48[96];

fract16 coeff_interp_16to48[96] = {
#include "interp_16kto48k_96taps.dat"

};

/* Pour faire l’interpolation, j’ai besoin des parametres suivants :

- Les coefficients du filtre intitulé coeff_interp_16to48 (96coefficients) RIF de type fract 16


- Etat de filtre intitulé « filter_state_interp_16to48” de type fir_state_fr16
- Retard de décimation intitulé « delay_interp_16to48 ” de type fract 16 avec format (1.15)
- Nbre de coeff 96 coeffs (96taps) c’est un fichier à appeler interp_16kto48k_96taps.dat
- Interpolation index   c’est l’indice d’ Interpolation 3

*/

fract16 out8k[INPUTSIZE/6];

fract16 out16k[2*INPUTSIZE/6];

fract16 out32k[2*2*INPUTSIZE/6];

fract16 out48k[3*2*INPUTSIZE/6];

/on obtient quatre sortie out8k de taille 480/6, out16k de taille2*[480/6], out32k 2*2*[480/6] et
out48k 3*2*[480/6] et toutes les sorties sont de type fract16 */

int main()

fir_init(filter_state_dec, coeff_dec, delay_dec, 128, 6);

fir_init(filter_state_interp_8to16, coeff_interp_8to16,

delay_interp_8to16,64/2,2);

fir_init(filter_state_interp_16to32, coeff_interp_16to32,

delay_interp_16to32,64/2,2);

fir_init(filter_state_interp_16to48, coeff_interp_16to48,

delay_interp_16to48,96/3,3);

fir_decima_fr16(inp_arr, out8k, INPUTSIZE, &filter_state_dec);

fir_interp_fr16(out8k, out16k, INPUTSIZE/6, &filter_state_interp_8to16);

fir_interp_fr16(out16k, out32k, 2*INPUTSIZE/6, &filter_state_interp_16to32);

fir_interp_fr16(out16k, out48k, 2*INPUTSIZE/6, &filter_state_interp_16to48);

Vous aimerez peut-être aussi