Haz una pregunta
  Foros de Electrónica » Diseño digital » Interfaces y Programación
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

01/06/2011 #1


Ayuda DSP TMS320C5416
Hola a todos,
Estoy aprendiendo a usar el DSP de texas (TMS320c5416), y estoy tratando de
hacer un filtro simple para empezar, pero me quedé estancada en el codigo, ya que no
soy tan buena en eso. Quisiera que me ayudaran a revisarlo, yo no veo cual es el error aun.

La primera fincion, genera una onda seno y la muestrea. La guarda en el vector sine[i].

La segunda, genera ruido randomico.

La tercera funcion realiza el filtro. Es un filtro basico de medias moviles. Toma una cantidad de muestras y las divide por el numero total de muestras (en este caso 255)

El primer problema, es cuando grafico la onda seno. Al principio tiene unos valores muy pequeños y desde la muestra numero 78 se se comporta normal.

El otro problema, es que al cambiar el valor NSamples en mi filtro (fincion LPFilter), afecta a la onda sine... esto es muy extraño ya que una funcion no tiene nada que ver con la otra.

Les adjunto el codigo.



#include "senoconruidocfg.h"
#include "math.h"

/* Constantes */

#define BUFSIZE 0x64/*100 decimal*/
#define sr 255

/* Variables globales*/
int inp_buffer[BUFSIZE];
int out_buffer[BUFSIZE];
float sine[sr];
int noise[sr];
float sine_noise[sr];
float FilteredSignal[sr];
float pi=3.14;

/* Funciones */

void GenerateSine(int amp, int frec)
{
int i;
for(i=0;i<=sr-1;i++)
{
sine[i]=amp*sin(frec*2*pi*i/sr);
}
}

void GenerateNoise(int amp_noise)
{
int i;
for(i=0;i<=sr-1;i++)
{
noise[i]=rand()%amp_noise;
}
}

void LPFilter(int NSamples,float Gain)/* NSamples es el numero muestras incluidas en el filtro*/
{
int i,k,step;
int *output=&out_buffer[0];
float aux1,aux2;
aux2 = 0;
step = 0;
for(k=0;k<=sr-1;k++)
{
for(i=0;i<=NSamples-1;i++)
{
aux1=sine_noise[i+step];
aux2=aux1+aux2;
}
step++;
FilteredSignal[k]=aux2/NSamples;
aux2=0;
*output++=Gain*FilteredSignal[k];
}
}

/* Principal */
void main(void)
{
int i;
int *input=&inp_buffer[0];
GenerateSine(100,10);
GenerateNoise(50);
for(i=0;i<=sr-1;i++)
{
sine_noise[i]=sine[i]+noise[i];/*señal mas ruido*/
*input++=sine_noise[i];/*llena el buffer de entrada con muestras*/
}
LPFilter(100,2);

}



Gracias!!
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Interfaces y Programación

Lenguajes de programación, gestión y manejo de puertos

Cerrar
Foros de Electrónica » Diseño digital » Interfaces y Programación

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.