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.
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=amp*sin(frec*2*pi*i/sr);
}
}
void GenerateNoise(int amp_noise)
{
int i;
for(i=0;i<=sr-1;i++)
{
noise=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=sine+noise;/*señal mas ruido*/
*input++=sine_noise;/*llena el buffer de entrada con muestras*/
}
LPFilter(100,2);
}
Gracias!!
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.
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=amp*sin(frec*2*pi*i/sr);
}
}
void GenerateNoise(int amp_noise)
{
int i;
for(i=0;i<=sr-1;i++)
{
noise=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=sine+noise;/*señal mas ruido*/
*input++=sine_noise;/*llena el buffer de entrada con muestras*/
}
LPFilter(100,2);
}
Gracias!!
Última edición: