0% ont trouvé ce document utile (0 vote)
24 vues6 pages

Rappel sur le TP1: Rééchantillonnage

Le document décrit le rééchantillonnage d'un signal numérique, notamment le sous-échantillonnage et le sur-échantillonnage à l'aide de filtres RIF. Il présente un exemple de rééchantillonnage d'un signal sinusoïdal par décimation et interpolation entre différentes fréquences d'échantillonnage.

Transféré par

linkskil
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
24 vues6 pages

Rappel sur le TP1: Rééchantillonnage

Le document décrit le rééchantillonnage d'un signal numérique, notamment le sous-échantillonnage et le sur-échantillonnage à l'aide de filtres RIF. Il présente un exemple de rééchantillonnage d'un signal sinusoïdal par décimation et interpolation entre différentes fréquences d'échantillonnage.

Transféré par

linkskil
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

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


([Link])
- 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 "[Link]" };

// 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