TODOPIC
Microcontroladores PIC => dsPIC => Mensaje iniciado por: Power_DSP en 19 de Abril de 2006, 19:51:05
-
Saludos nuevamente
Ahora estoy con problemas al muestrear una senhal, obtengo un alias de la senhal de su madre, segun el teorema de muetreo Fs >= 2.fm.
Estoy generando una senhal con la tarjeta de sonido de 4 Khz +- 1V, el ADC del dsPIC esta configurado para darme una interrupcion cada fs = 32Khz, el filtro antialias tiene una frecuencia de corte de apox 4khz.
La fs es mucho mayor que fm, fm es la senhal generada por la tarjeta de soido de 4Khz ??? o fm seria 8 khz........ de ser fm = 8Khz fs seria igual a fs= 16khz.
-
Buenas.
Segúnel famoso teorema de Niquist, la frecuenci de muestreo (fs) debe ser, como mínimo, el doble de la máxima frecuencia que tiene la señal. En tu caso, la señal a digitalizar es de 4KHz máximo, por lo que la fs deberá ser de 8KHz mínimo. Si estás muestreando a 32KHz, vas sobrao.
-
Ya encontre el problema del aliasing , y todo se debe a que estoy usando MATLAB para hacer todo desde generar mis propias ondas y reproducirlas hasta adquirir los datos con usb (usando el CDC emulation) matlab corre muy lento los programas lo probe con C y mejoro mucho.
Para que tengan una idea de como estaba solo estaba adquiriendo la PC 1k muestras approx por segundo cuando debia ser mas de 31K
-
Otro bug encontrado........
El puerto serial tiene diferentes configuraciones para transferencia de bits por ejemplo
bps: 9600, 19200,57600,115200.
Para saber cuantos caracteres por segundo puedo enviar se usa esta formula que puede bariar si usas 2 bits de parada
Caracter/seg = Baud/11 = 9600/11 = 872 caracteres max por seg
Yo estaba usando 19200 bps (max 1745 aprox por seg) !!!!!!!!!!! asi que no va a haber aliasing ???? yo necesito por lo menos 8000 muestras por segundo y estaba muestreando a 32Khz , estaba todo un desastre ;)} .
Como solucion he aumentado a 115200 bps (aprox 10472 caracteres x seg) y he decidido generar una senhal de entrada de 1250hz y muestrearla a 2500hz.
PORQUE TAN BAJA FRECUENCIA ?????????????????
El conversor del dsPIC es de 10bits, y tomo el dato del buffer y lo convierto a ASCII(0h400 ---> "1024") para cada muestra necesito mandar 4('1','0','2','4') caracteres a la PC. De 10000 aprox caracteres por segundo que puedo mandar 10000/4 = 2500 solo representan 2500 muestras por segundo o sea mi frecuencia max de muestreo es Fs = 2500 max por lo que si entra una senhal mas alta a los 1.25 khz habra un aliasing debido al muestreo.
Este muestreo solo para cuando interface a la PC y pruebe los filtros digitales si no necesito analizar o demostrar en la PC puedo llegar hasta el limite 500ksps en el dsPIC que estoy usando.
-
En vez de hacer eso, podrías pasarlos a ASCII en el PC y enviar por RS-232 los dos bytes (10bits) capturados por el dsPIC.
Si es muy critica la frecuencia de muestreo, también puedes muestrear a 8bits.