You are on page 1of 28

TRANSFORMADA DE FOURIER DISCRETA VENTAJAS Y LIMITACIONES PARA EL PROCESAMIENTO DIGITAL DE SEALES

REALIZADO POR LIANA MARGARITA JULIO GUERRERO GABRIEL EDUARDO MEJA RUIZ

Profesores

NICOLS MUOS JUAN PABLO RIVERA

UNIVERSIDAD DE ANTIOQUIA MAESTRA EN INGENIERA AUTOMATIZACIN Y CONTROL DEPARTAMENTO DE INGENIERA ELCTRICA MEDELLN 2012

CONTENIDO
1. 2. INTRODUCCIN ........................................................................................................................... 3 OBJETIVOS ................................................................................................................................... 4 2.1. 2.2. 3. OBJETIVO GENERAL ............................................................................................................. 4 OBJETIVOS ESPECFICOS ...................................................................................................... 4

MARCO TERICO ......................................................................................................................... 5 3.1. 3.2. 3.3. 3.5. TRANSFORMADA DE FOURIER ............................................................................................ 5 TRANSFORMADA DE FOURIER DISCRETA............................................................................ 5 DERRAMAMIENTO ESPECTRAL (LEAKAGE) ...................................................................... 6 INTERPOLACIN .................................................................................................................. 8

4.

DESARROLLO ............................................................................................................................. 10 4.1. Algoritmo usado para la adquisicin de datos las seales sinusoidales mediante el DSC F2833510 4.2. 4.3. 4.4. Algoritmo usado para calcular la FFT de las seales sinusoidales con el DSC F28335 ...... 12 Algoritmo usado para simular la FFT de una Seal sinusoidal en Matlab......................... 12 Algoritmo de Jain usado para la interpolacin.................................................................. 15

5.

RESULTADOS ............................................................................................................................. 18 5.1. 5.2. 5.3. 5.4. 5.5. 5.6. Anlisis seal sinusoidal pura: ........................................................................................... 19 Anlisis seal sinusoidal con ventana Hanning: ................................................................ 19 Anlisis seal sinusoidal con ventana Hamming: .............................................................. 20 Anlisis seal sinusoidal con ventana Blackman: .............................................................. 21 Anlisis del derramamiento espectral de la seal con diferentes ventanas:.................... 22 Anlisis del algoritmo de interpolacin propuesto por (Jain et al., 1979): ....................... 23

6. 7. 8.

CONCLUSIONES ......................................................................................................................... 25 REFERENCIAS BIBLIOGRFICAS ................................................................................................. 26 ANEXOS ..................................................................................................................................... 27

1. INTRODUCCIN
EL tratamiento digital de seales involucra un extenso conjunto de operaciones matemticas realizadas en tiempo discreto. La transformada de Fourier discreta (DFT, por sus siglas en ingls) es una herramienta matemtica potente que permite analizar las seales en el dominio de la frecuencia. Este tipo de anlisis permiten caracterizar las seales y obtener informacin que no es evidente en el dominio temporal. A pesar de las grandes ventajas que posee la DFT para el anlisis de seales digitales tambin tiene limitaciones de precisin en el espectro resultante como el derramamiento espectral. El derramamiento espectral es una fuga de energa de los componentes espectrales originales de la seal hacia los componentes laterales a estos calculados por la FFT. Este derramamiento o fuga de energa se produce por las discontinuidades en los lmites del bloque de las muestras de la seal a la cual se aplica la DFT o a la eleccin de una frecuencia de muestreo que no es un submltiplo de la frecuencia fundamental de la seal objeto de anlisis (Kadambe, 1992). Existen al menos cuatro mtodos para reducir el problema de derramamiento espectral: 1. El primero de ellos consiste en agregar ceros al final del bloque de datos (mtodo conocido como zero padding). Con este mtodo se aumenta la cantidad de datos usados en el clculo de la FFT y as se aumenta la resolucin frecuencial, lo cual conduce a que los componentes espectrales reales de la seal estn ms cerca de los componentes espectrales calculados por la FFT o DFT. 2. El segundo mtodo consiste en la multiplicacin de una funcin ventana que aproxime a cero la seal muestreada en los lmites del tramo de muestras, en consecuencia se reducen las discontinuidades en los lmites de dicho tramo. 3. El tercer mtodo consiste en aumentar el tiempo de muestreo de tal forma que la resolucin en frecuencia sea un submltiplo de todas las frecuencias contenidas en la seal. 4. El cuarto mtodo consiste en estimar los componentes espectrales correctos de la seal y la magnitud de estos mediante la interpolacin de los componentes espectrales cercanos a la frecuencia real de la seal. En este documento se hace un anlisis comparativo de la aplicacin de ventanas (Hanning, Hamming y Blackman) e interpolacin (Jain) para reducir el derramamiento espectral en la DFT. La implementacin de los algoritmos usado en el anlisis se hace en el Controlador digital de seales (DSC, por sus siglas en ingles) F28335 fabricado por Texas instruments y en el software de modelamiento y simulacin Matlab.

2. OBJETIVOS

2.1.

OBJETIVO GENERAL

Analizar el desempeo del DSC F28335 para la implementacin de la DFT y diferentes mtodos para reducir el derramamiento espectral. 2.2. OBJETIVOS ESPECFICOS

1. Obtener el espectro de frecuencia de varias seales en el DSC F28335 obtenidas desde el generador de seales AFG3021B de marca tektronicx. 2. Hacer un anlisis comparativo de las transformadas de Fourier calculadas en el DSC y las obtenidas mediante simulacin en Matlab. 3. Identificar los fenmenos de derramamiento espectral (leakage) y corrimiento del pico de la frecuencia fundamental de la seal analizada. 4. Comparar diferentes ventanas para corregir el derramamiento espectral en las seales analizadas. 5. Implementar la interpolacin Jain para corregir el corrimiento de la frecuencia fundamental en la seal analizada y el derramamiento espectral.

3. MARCO TERICO
3.1. TRANSFORMADA DE FOURIER

La transformada de Fourier (FT, por sus siglas en ingls) es una potente herramienta matemtica que es utilizada con frecuencia en ingeniera para pasar al dominio de la frecuencia una seal que esta en el dominio del tiempo. La FT es una herramienta esencial para el procesamiento de seales puesto que permite obtener informacin que no es evidente en el dominio temporal. Por ejemplo, la energa que se concentra en un ancho de banda determinado. La FT tambin sirve para resolver ecuaciones diferenciales con mayor facilidad, razn por la cual se usa para el diseo de controladores clsicos de sistemas realimentados. El conocimiento de la densidad espectral y la entrada de un sistema permiten conocer la densidad espectral de la salida. La anterior es una caracterstica muy til para el diseo de filtros y sistemas de control. La definicin de la transformada de Fourier parte de la base de que toda seal, por compleja que sea, se puede descomponer en una suma de funciones peridicas simples de distinta frecuencia. Es decir, la FT permite conocer las frecuencias individuales de las funciones sinusoidales que forman la seal original. En (PROAKIS, MANOLAKIS, Rio, & Castro, 1998) se define la Transformada de Fourier como: ( ) ( )

La FT debe aplicarse de - a +, lo que constituye una limitacin importante debido a que el procesamiento de las seales se realiza en un ordenador o sistema de computo digital, para lo cual las seales deben tener una duracin finita en el tiempo. Para solventar esta limitacin se toman tramos de la seal original. En la mayora de los casos este proceso consiste en multiplicar la seal por una ventana rectangular que asle el tramo de la seal a analizar. Este proceso provoca la distorsin del espectro obtenido, ya que en los lmites del tramo se producen discontinuidades que alteran el espectro original de la seal. Matemticamente se representa como la convolucin de la transformada de la seal con la transformada de la ventana. Actualmente los clculos de la transformada de Fourier son realizados en ordenadores o en dispositivos de procesamiento digital como microcontroladores o DSP. Por consiguiente la operacin matemtica de la FT se realiza en tiempo discreto y con una cantidad finita de muestras de la seal objeto de estudio. 3.2. TRANSFORMADA DE FOURIER DISCRETA

El anlisis en frecuencia de las seales discretas en el tiempo suele realizarse en un dispositivo de procesamiento digital, que puede ser un ordenador de propsito general, un arreglo de compuertas programables (FPGA por sus siglas en ingls) o un procesador digitales de seales (DSP por sus siglas en ingls). El anlisis en frecuencia de la seal discreta en el tiempo requiere que se convierta la secuencia en el dominio del tiempo ( ) en una representacin equivalente en el dominio de la frecuencia mediante la transformada de Fourier ( ). Sin embargo ( ).es una funcin continua de la frecuencia y por lo tanto no es adecuada para su calculo de forma digital. Para el tratamiento digital del espectro de una seal obtenido a travs de la transformada de Fourier, la representacin matemtica siguiente es la ms adecuada (Albert, 2010). ( ) ( )

Esta relacin permite transformar una secuencia finita de muestras de una seal muestreada en la secuencia de muestras de los componentes espectrales. El clculo de la transformada discreta de Fourier implica una alta carga computacional para el procesador en el cual se ejecute, ya que la aplicacin de la transformada para una seal de N muestras requiere del calculo de N2 multiplicaciones complejas y N2-N sumas complejas. Sin embargo existen algoritmos eficientes que permiten calcular la transformada discreta de Fourier con una carga menor de clculos computacionales. Estos algoritmos son conocidos como algoritmos de la transformada rpida de Fourier (FFT, por sus siglas en ingls). 3.3. DERRAMAMIENTO ESPECTRAL (LEAKAGE)

En el clculo de la Transformada Discreta de Fourier se asume que la seal es peridica en cada tramo o bloque de muestras, es decir, que el bloque de muestras de la seal original que se utiliza para el clculo de la transformada contiene exactamente uno o varios periodos de la seal original y que el bloque comienza en el cruce por cero de la seal. Sin embargo, stos supuestos no se cumplen siempre. El resultado es una fuga de energa de los componentes espectrales originales de la seal hacia los componentes laterales. Este derramamiento o fuga de energa se produce por las discontinuidades en los lmites del bloque de las muestras de la seal a la cual se aplica la transformada discreta de Fourier o a la eleccin de una frecuencia de muestreo que no es un mltiplo de la frecuencia fundamental de la seal objeto de anlisis (Kadambe, 1992). Existen al menos cuatro mtodos para reducir el problema de derramamiento espectral: 1) El primero de ellos consiste en agregar ceros al final del bloque de datos. Con este mtodo se aumenta la cantidad de datos usados en el clculo de la FFT y as se aumenta la resolucin frecuencial, lo cual conduce a que los componentes espectrales reales de la seal estn mas cerca de los componentes espectrales calculados por la FFT o DFT.

2) El segundo mtodo consiste en la multiplicacin de una funcin ventana que aproxime a cero la seal muestreada en los lmites del tramo de muestras, en consecuencia se reducen las discontinuidades en los lmites de dicho tramo. 3) El tercer mtodo consiste en aumentar el tiempo de muestreo de tal forma que la resolucin en frecuencia sea un submltiplo de todas las frecuencias contenidas en la seal. 4) El cuarto mtodo consiste en estimar los componentes espectrales correctos de la seal y la magnitud de estos mediante la interpolacin de los componentes espectrales cercanos a la frecuencia real de la seal. Las discontinuidades en los lmites de la ventana no son el nico problema en el calculo de la FFT o de la DFT. En la mayora de los casos la frecuencia de muestreo seleccionada no es un submltiplo de la frecuencia fundamental de la seal que se pretende analizar. Esto conduce a que la frecuencia fundamental real de la seal se ubique entre dos componentes espectrales calculados por la FFT. Sobre estos componentes y sus iguales ms cercanos se derrama la energa contenida en el componente frecuencia real de la seal. Diferentes mtodos de interpolacin se constituyen como una herramienta practica para corregir este fenmeno. La interpolacin busca corregir la ubicacin real de la frecuencia de la seal en el espectro, su magnitud y fase. 3.4. VENTANAS

Las ventanas son funciones matemticas usadas en el anlisis y el procesamiento de seales para evitar las discontinuidades al principio y al final de los bloques de datos de la seal que se pretende analizar mediante la FFT (Shum & Yu, 1996). Las ventanas eliminan las discontinuidades de la seal en los lmites del tramo de muestras mediante la aproximacin de la seal a cero en dichos lmites. La funcin ventana se multiplican por el bloque de datos que representa la seal objeto de estudio obligando a la seal a ser peridica. Existen diferentes tipos de ventanas dentro de estas la ventana rectangular es la ms simple. Sin embargo es la ventana que produce mayor derramamiento espectral. La ventana rectangular se define como:

As, cuando se multiplica una seal ( ) por esta ventana, se obtiene nicamente los primeros segundos de la seal. En lugar de analizar la seal ( ), se analiza la seal ( ) ( ). Cuando se pasa al dominio de la frecuencia mediante la truncada: ( ) ( ) ( ) ( ). Lo anterior implica que la ventana transformada de Fourier se obtiene puede ser aplicada antes o despus de calcular la transformada de Fourier de la seal. Las ventanas reducen el efecto del derramamiento pero no pueden eliminarlo completamente. En realidad, las ventanas cambian la forma del derramamiento. Cada 7

ventana afecta el espectro de la seal de forma diferente y tiene ventajas y desventajas comparativas respecto a las dems. La seleccin apropiada del tipo de ventana depende del objetivo que se busque alcanzar al reducir el derramamiento. En la tabla siguiente se hace una descripcin de las caractersticas de diferentes tipos de ventanas. Ventana Barlett Blackman Flat top Hanning Hamming Kaiser-Bessel None (boxcar) Tukey Welch Mejor para este tipo de seal Aleatoria Aleatoria o mixta Sinusoidal Aleatoria Aleatoria Aleatoria Transiente o muestreo sncrono Aleatoria Aleatoria Resolucin en frecuencia Buena Malo Malo Bueno Buena Equitativo Mejor Bueno Bueno Derramamiento espectral Equitativo Mejor Bueno Bueno Equitativo Bueno Malo Malo Bueno Precisin en amplitud Equitativo Bueno Mejor Equitativo Equitativo Bueno Malo Malo Equitativo

Tabla 1. Desempeo de las ventanas para seales aleatorias, sinusoidales, transientes y mixtas. 3.5. INTERPOLACIN

En muchas aplicaciones que incluyen el procesamiento de seales es indispensable discriminar con precisin el contenido en frecuencia de una seal. El calculo de la DFT o FFT es el mtodo ms comn para hacer estimaciones de frecuencia. Sin embargo, las limitaciones computacionales restringen el nmero de muestras que pueden ser procesadas por la DFT o por la FFT, por consiguiente se afecta la resolucin en frecuencia del espectro proporcionado por la DFT. Si la frecuencia real de la seal no cae en alguno de los componentes frecuenciales de la DFT se produce un derramamiento de la energa en los componentes aledaos a la frecuencia real de la seal. La magnitud de estos componentes se puede usar para determinar la frecuencia real de la seal. (Quinn, 1994) desarrollo un mtodo simple y eficaz para calcular la frecuencia correcta de la seal analizada con base en los tres componentes espectrales aledaos al pico de mayor magnitud en la salida de la DFT. Un mtodo similar se muestra en (Grandke, 1983) quien utiliza el pico de mayor magnitud en la salida de la DFT y el componente adyacente. Ambos mtodos proporcionan algoritmos eficientes para la ubicacin correcta del componente espectral. Aunque no proveen una correccin de la magnitud del componente. En (Jain, Collins, & Davis, 1979) se propone un algoritmo similar. La desventaja de los tres mtodos anteriormente planteados es la necesidad inevitable de usar divisiones para el clculo de los algoritmos pero los DSP y DSC no poseen

instrucciones especializadas para el clculo de divisiones, de hay que estas deben ser evitadas al mximo. Existen dos algoritmos que poseen ventajas respecto de los algoritmos mencionados anteriormente. El primero es la interpolacin por ajuste de la curva cuadrtica, cuyo desempeo es similar al presentado por el mtodo de Quinn, pero solo requiere de una divisin y adems proporciona una estimacin de la magnitud del componente espectral. El segundo mtodo no requiere divisiones, pero solo proporciona la estimacin de la magnitud de una sola frecuencia predeterminada. Este mtodo se usa regularmente para estimar la magnitud del componente espectral ubicado en el medio de los componentes espectrales calculados por la DFT o la FFT. A continuacin se presenta un resumen de algunos de los algoritmos usados para la interpolacin en la DFT y FFT. k = ndice del componente de mxima magnitud en la DFT. X[i] = magnitud del i-eximo componente de la DFT. K= Ubicacin calculada del componente frecuencial de la seal real. Mtodo Algoritmo
ap = (X [k + 1]. r * X [k]. r + X [k + 1]. i * X [k]. i) / (X [k]. r * X [k]. r + X [k]. i * X [k]. i) dp =-ap / (1,0 - ap) am = (X [k - 1] r * X [k] r + X [k - 1].... i * X [k] i).. / (X [k] r * X [k] r + X [k]. i * X [k]. i) dm = am / (1,0 - am) si (dp> 0) y (dm> 0) entonces d = dp ms d = dm final = k 'k + d tau (x) = 1/4 * log (3x ^ 2 + 6x + 1) - sqrt (6) / 24 * log ((x + 1 - sqrt (2/3)) / (x + 1 sqrt + (2 / 3))) ap = (X [k + 1]. r * X [k]. r + X [k +1]. i * X [k]. i) / (X [k]. r * X [k]. r + X [k]. i * X [k]. i) dp =-p / (1 - p) am = (X [k - 1] r * X [k] r + X [k - 1].... i * X [k] i).. / (X [k] r * X [k] r + X [k]. i * X [k]. i) dm = am / (1 - am) d = (dp + dm) / 2 + tau (dp * dp) - tau (dm * dm) = k 'k + d y1 = | X [k-1] | y2 = | X [k] | y3 = | X [k +1] | si y1> y3 entonces a = y2 / y1 d = a / (1 + a) k '= k - 1 + d ms a = y3 / y2 d = a / (1 + a) = k 'k + d final

Primer estimador de Quinn

Segundo estimador Quinn:

de

Mtodo de Jain:

Tabla 2: Algoritmos de interpolacin para la DFT o la FFT 9

4. DESARROLLO
Se pretende hacer un anlisis comparativo de la aplicacin de ventanas (Hanning, Hamming y Blackman) e interpolacin (Jain) para reducir el derramamiento espectral en la DFT. La implementacin de los algoritmos usado en el anlisis se hace en el Controlador digital de seales (DSC, por sus siglas en ingles) F28335 fabricado por Texas instruments y en el software de modelamiento y simulacin Matlab. Para lograr la comparacin, primero se muestrean en el DSC cada una de dos seales sinusoidales, a continuacin se multiplica el vector que almacena las muestras de la seal por cada una de cuatro ventanas (Hanning, Hamming, Blackman y rectangular), posteriormente se calcula el algoritmo de la FFT para cada una de los productos resultantes. En el software de simulacin Matlab se reproducen las seales y clculos de la FFT. Luego los resultados son analizados y comparados. A continuacin se describe detalladamente cada una de las etapas de implementacin de los algoritmos usados en la prctica 4.1. Algoritmo usado para el muestreo de las seales sinusoidales con el DSC F28335

A partir del generador de seales AFG3021B de la marca Tektronix se generan dos seales sinusoidales de 1kHz y 2 kHz respectivamente. Dichas seales son usadas para experimentar con los diferentes algoritmos que se exponen en este documento y que son programados en el DSC de referencia F28335. A las seales sinusoidales se les realiza el proceso de conversin anlogo a digital a travs del perifrico ADC del DCS. Este perifrico se caracteriza por tener una resolucin de 12 bits, de hay que los niveles de cuantizacin de la seal estn comprendidos entre 0 y , es decir, entre 0 y 4095. El algoritmo usado para la configuracin del perifrico ADC del DSC es el siguiente:

10

void InitAdc(void) { extern void DSP28x_usDelay(Uint32 Count); EALLOW; SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;//habilita velocidad alta para el reloj ADC_cal();//Calibra las entradas analogas. EDIS; AdcRegs.ADCTRL3.all = 0x00E0; // Power up bandgap/reference/ADC circuits DELAY_US(ADC_usDELAY); // Delay before converting ADC channels

//del ADC.

AdcRegs.ADCTRL1.all = 0; //Inicializa a cero el registro de control AdcRegs.ADCTRL1.bit.ACQ_PS = 7; // 7 = 8 x ADCCLK; define la longitud de la ventana de muestreo AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; // 1 = modo secuenciador en cascada (maquina de 16 estados) AdcRegs.ADCTRL1.bit.CPS = 0; // Divide la frecuencia del reloj del adc por 1 AdcRegs.ADCTRL1.bit.CONT_RUN = 0; // Detiene el periferico despues de hacer la secuencia de lectura AdcRegs.ADCTRL2.all = 0; //inicializa a cero todo el registro AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1; // 1=habilita la interrupcion AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1; // 1= Secuencia por software AdcRegs.ADCTRL2.bit.INT_MOD_SEQ1 = 0; // 0= interrupcion despues de AdcRegs.ADCTRL2.bit.INT_ENA_SEQ2 = 1; // 1=habilita la interrupcion AdcRegs.ADCTRL2.bit.SOC_SEQ2 = 1; // 1= Secuencia por software AdcRegs.ADCTRL2.bit.INT_MOD_SEQ2 = 0; // 0= interrupcion despues de

de la secuencia 1 cada fin de la secuencia de la secuencia 1 cada fin de la secuencia

AdcRegs.ADCTRL3.bit.ADCCLKPS = 6; // ADC clock: FCLK = HSPCLK / (2 * ADCCLKPS) // HSPCLK = 150MHz // FCLK = 12.5 MHz AdcRegs.ADCMAXCONV.all = 0x0007; // 8 conversiones en esta secuencia, CONV00, CONV01 AdcRegs.ADCCHSELSEQ1.bit.CONV00 AdcRegs.ADCCHSELSEQ1.bit.CONV01 AdcRegs.ADCCHSELSEQ1.bit.CONV02 AdcRegs.ADCCHSELSEQ1.bit.CONV03 AdcRegs.ADCCHSELSEQ2.bit.CONV04 AdcRegs.ADCCHSELSEQ2.bit.CONV05 AdcRegs.ADCCHSELSEQ2.bit.CONV06 AdcRegs.ADCCHSELSEQ2.bit.CONV07 } = = = = = = = = 0; 1; 2; 3; 4; 5; 6; 7; // // // // // // // // Setup Setup Setup Setup Setup Setup Setup Setup ADCINA0 ADCINA1 ADCINA0 ADCINA1 ADCINA0 ADCINA1 ADCINA0 ADCINA1 as as as as as as as as 1st 2nd 1st 2nd 1st 2nd 1st 2nd SEQ1 SEQ1 SEQ1 SEQ1 SEQ1 SEQ1 SEQ1 SEQ1 conv. conv. conv. conv. conv. conv. conv. conv.

11

4.2.

Algoritmo usado para calcular la FFT de las seales sinusoidales con el DSC F28335

Para la implementacin de la FFT de 256 puntos se crean tres vectores que almacenan los valores de las ventanas Hanning, Hamming y blackman. Posteriormente cada una de estas ventanas es multiplicada por el vector que almacena los datos de las muestras de la seal sinusoidal y se calcula FFT al resultado del anterior producto. La seal senusoidales son muestreadas cada 100uS. El resultado de la FFT se almacena en el vector RFFTmagbuff. El calculo de la FFT se hace gracias a las funciones contenidas en la librera FPU. El cdigo implementado se presenta a continuacin:
#define RFFT_STAGES 8//Cantidad de mariposas usadas en la transformada rpida Log2(tamao de fft). #define RFFT_SIZE (1 << RFFT_STAGES) float32 RFFTinBuff[RFFT_SIZE]; float32 RFFToutBuff[RFFT_SIZE]; float32 RFFTF32Coef[RFFT_SIZE]; // buffer de los Twiddles float32 RFFTmagBuff[RFFT_SIZE / 2 + 1]; unsigned int senal_adc_0[RFFT_SIZE]; buffer con la seal muestreada unsigned char fft_enable = 0; float hanning[RFFT_SIZE]; float hamming[RFFT_SIZE]; float blackman[RFFT_SIZE]; float omega; RFFT_F32_STRUCT rfft; omega = 2 * PI / (RFFT_SIZE - 1); for (i = 0; i < RFFT_SIZE; i++) { hanning[i] = (0.5 - 0.5 * cos(omega * i)); //Ventana hanning hamming[i] = (0.54 - 0.46 * cos(omega * i)); //Ventana Hamming blackman[i] = (0.42 - 0.5 * cos(omega * i) + 0.08 * cos(2 * omega * i)); //Ventana blackman }

while (1) { if (fft_enable) { fft_enable = 0; for (i = 0; i < RFFT_SIZE; i++) { RFFTinBuff[i] = (float) (senal_adc_0[i] * 3) / 4095; //Clean up output //buffer RFFTinBuff[i] = RFFTinBuff[i] * hanning[i]; } rfft.FFTSize = RFFT_SIZE; rfft.FFTStages = RFFT_STAGES; rfft.InBuf = &RFFTinBuff[0]; // buffer de entrada rfft.OutBuf = &RFFToutBuff[0]; // buffer de salida rfft.CosSinBuf = &RFFTF32Coef[0]; // buffer con los Twiddle factor rfft.MagBuf = &RFFTmagBuff[0]; // buffer con las magnitudes RFFT_f32_sincostable(&rfft); //Calcula los twiddle factor RFFT_f32u(&rfft); //Calcula la FFT real RFFT_f32_mag(&rfft); //Calcula la magnitud }

4.3.

Algoritmo usado para simular la FFT de una Seal sinusoidal en Matlab

El clculo de la Transformada de Fourier de un vector de datos en Matlab se realiza con el comando FFT(X). Las ventanas Hamming, Hanning y Blackman de una longitud

12

determinada se calculan con los comandos hamming(L), hann(L) y blackman(L) respectivamente. ( ) La seal en el dominio del tiempo continuo a tratar es , la cual se convierte al dominio discreto. El procedimiento para la conversin es el siguiente: ( ) ( )

Por lo cual la seal en el dominio del tiempo contino se rescribe en el dominio del tiempo discreto como: ( ( ) )

Para el clculo de la transformada de Fourier de esta seal en Matlab primero se crea un vector n de 256 valores. ( ) Se calcula la seal seno discreta como a la cual se aplica la transformada de Fourier con el comando FFT. Luego se recalcula el eje x de la transformada para solo tomar los N/2 puntos de la FFT ya que con solo estos es posible tener toda la informacin del espectro debido a la simetra de la transformada cuando se aplica a una seal real. Posteriormente se obtiene la funcin ventana del mismo tamao que la FFT con los comandos hamming(L), hann(L) o blackman(L), funcin que se multiplica con la seal seno para finalmente obtener el espectro de esta nueva seal. El cdigo en Matlab para la FT de 256 puntos de una seal seno de 1k empleando una ventana Hamming se muestra a continuacin:

13

n=0:1:255; fs=10000; % frecuencia de muestreo N=256; % nmero de puntos de la DTF x=1.5*sin(0.2*pi*n)+ 1.5;% seal seno discreta fd=0:0.0001:0.0255;% eje x para la seal seno discreta figure(1) plot(fd,1.5*sin(2000*pi*fd)+1.5,'g'); % grfica la seal tiempo xlabel('Tiempo (ms)') ylabel('Amplitud') title('1.5*Sin(2000*pi*t)+1.5 y 1.5*Sin(0.2*pi*n)+1.5') grid on

seno

en

el

Trans=fft(x); % calcula la transformada de Fourier figure (2) Axe=0:fs/N:(fs-1)/2; % Clculo del eje x para la transformada for i=1:128 Trans2(i)= Trans(i);% se calcula solo N/2 puntos de la transformada % de Fourier debido a la simetria de esta. end plot(Axe,abs(Trans2)) % se grafica la magnitud de la DTF xlabel('Frecuencia (Hz)') ylabel('Amplitud') title('Espectro de la seal original') grid on L=256; % longitud de la ventana w = hamming(L);% calculo de la ventana hamming wHamming=x.*w';% se multiplica la seal seno discreta por la ventana figure(3) plot(n,wHamming)% grafica la seal seno despus de ser multiplicada % por la ventana xlabel('Muestras') ylabel('Amplitud') title('Seal multiplicada por Ventana Hamming') grid on fftHamming=fft(wHamming);% calcula la DFT de la seal multiplicada % por la ventana figure (4) for j=1:128 fftH2(j)= fftHamming(j); %se calcula solo N/2 puntos transformada end plot(Axe,abs(fftH2)) % se grafica la magnitud de la DTF xlabel('Frecuencia (Hz)') ylabel('Amplitud') title('Espectro de la seal con ventana Hamming') grid on de la

14

4.4.

Algoritmo de Jain usado para la interpolacin

El algoritmo de Jain es un mtodo simple que permite estimar la frecuencia fundamental real de una seal a partir de los componentes espectrales calculados por la FFT o la DFT. Su simpleza permite que se logren buenos resultados con un bajo costo computacional. Para la implementacin del algoritmo de Jain se creo la funcin mximo. Esta permite determinar el valor mximo del vector de magnitud de la FFT de 32 puntos y el ndice del vector correspondiente a este valor. Conociendo este ndice se identifican los ndices y valores de magnitud de los dos componentes aledaos. Posteriormente se determina si el componente aledao de mayor amplitud est a la derecha o la izquierda para poder conocer cual es el respectivo valor del desplazamiento a realizar en frecuencia. Este desplazamiento en frecuencia se calcula y almacena en la variable kprima (k). Conociendo este desplazamiento se recalcula la transformada de Fourier siguiendo la siguiente ecuacin: ( ) | ( )
( )

El algoritmo implementado en el DSC F28335 es el siguiente:

15

#define RFFT_STAGES 5//Cantidad de mariposas usadas en la transformada rpida Log2(tamao de fft). #define RFFT_SIZE (1 << RFFT_STAGES) float32 RFFTinBuff[RFFT_SIZE]; float32 RFFToutBuff[RFFT_SIZE]; float32 RFFTF32Coef[RFFT_SIZE]; // buffer de los Twiddles float32 RFFTmagBuff[RFFT_SIZE / 2 + 1]; unsigned int senal_adc_0[RFFT_SIZE]; buffer con la seal muestreada unsigned char fft_enable = 0; float hanning[RFFT_SIZE]; float hamming[RFFT_SIZE]; float blackman[RFFT_SIZE]; float omega; RFFT_F32_STRUCT rfft; float32 max; float32 index; float32 alfa; float32 delta; float32 kprima; float32 A = 0, B = 0; float32 Xfundamental; unsigned char n; omega = 2 * PI / (RFFT_SIZE - 1); for (i = 0; i < RFFT_SIZE; i++) { hanning[i] = (0.5 - 0.5 * cos(omega * i)); //Ventana hanning hamming[i] = (0.54 - 0.46 * cos(omega * i)); //Ventana Hamming blackman[i] = (0.42 - 0.5 * cos(omega * i) + 0.08 * cos(2 * omega * i)); //Ventana blackman

}
void maximo(float32 *pvector, float32 *pmax, float32 *pindex, int tamano_vector) { int i = 0; float32 max; //variable que contiene el valor del mximo del vector de magnitud de la FFT float32 index; // variable con el ndice correspondiente al valor mximo for (i = 0; i < tamano_vector / 2; i++) { if (pvector[i] > max) { max = pvector[i]; index = i; } } *pmax = max; while (1) { if (fft_enable) { fft_enable = 0; for (i = 0; i < RFFT_SIZE; i++) { RFFTinBuff[i] = (float) ((senal_adc_0[i]-1.5) * 3) / 4095; RFFTinBuff[i] = RFFTinBuff[i] * hanning[i]; } rfft.FFTSize = RFFT_SIZE; rfft.FFTStages = RFFT_STAGES; rfft.InBuf = &RFFTinBuff[0]; // buffer de entrada rfft.OutBuf = &RFFToutBuff[0]; // buffer de salida rfft.CosSinBuf = &RFFTF32Coef[0]; // buffer con los Twiddle factor rfft.MagBuf = &RFFTmagBuff[0]; // buffer con las magnitudes RFFT_f32_sincostable(&rfft); //Calcula los twiddle factor RFFT_f32u(&rfft); //Calcula la FFT real RFFT_f32_mag(&rfft); //Calcula la magnitud

16

maximo(RFFTmagBuff, &max, &index, RFFT_SIZE); if (RFFTmagBuff[(int) index - 1] > RFFTmagBuff[(int) index + 1]) { alfa = RFFTmagBuff[(int) index] / RFFTmagBuff[(int) index + 1]; delta = alfa / (alfa + 1); kprima = index - 1 + delta; } else if (RFFTmagBuff[(int) index + 1] > RFFTmagBuff[(int) index - 1]) { alfa = RFFTmagBuff[(int) index + 1] / RFFTmagBuff[(int) index]; delta = alfa / (alfa + 1); kprima = index + delta; } A = 0; B = 0; Xfundamental = 0; for (n = 0; n < RFFT_SIZE; n++) { A += RFFTinBuff[n] * cos(2 * PI * kprima * n / RFFT_SIZE); B += RFFTinBuff[n] * sin(2 * PI * kprima * n / RFFT_SIZE); } Xfundamental = sqrt(pow((double)A, 2) + pow((double)B, 2));

*pindex = index; }

17

5. RESULTADOS
Las figuras y tablas siguientes permiten hacer anlisis comparativo entre la FFT implementada en el DSC F28335 y la simulacin de la FFT realizada con el software Matlab, adicionalmente se hace un anlisis comparativo de las ventanas Hanning, Hamming y Blackman y como mejora el derramamiento espectral al usar estas ventanas y la interpolacin Jain. El programa Code Composer Studio (CCS, por sus siglas en ingles) permite obtener las grficas de las seales adquiridas por el DSC y su transformada de Fourier mediante una conexin en tiempo real que se tiene entre un ordenador y el DSC. Las figuras 1, 5, 9 y 13 muestran la seal sinusoidal con 3Vpp de amplitud, con un offset de 1.5Vdc y la frecuencia de 1KHz y la multiplicacin de esta seal con las ventanas Rectangular, Hanning, Hamming y Blackman respectivamente. La figura 2, 6, 10, 14 muestra el espectro de frecuencia de las seales mostradas en las figura 1, 5, 9 y 13 respectivamente y permite identificar el pico mximo de magnitud de la FFT calculada con el DSC F28335. El componente frecuencial numero 26 corresponde al pico mximo en las figuras y nos permite identificar la frecuencia fundamental de la seal sinusoidal mediante el siguiente clculo: ( )

Adicionalmente en estas figuras se aprecia el componente DC en el espectro producido por el offset de 1,5V de la seal sinusoidal. La figuras 3, 7, 11 y 15 muestran las seales sinusoidales generadas mediante simulacin en Matlab y la multiplicacin de estas con las ventanas Rectangular, Hanning, Hamming y ( ) Blackman respectivamente. Se implemento la funcin , y en tiempo ( ) discreto mediante la funcin . La figura 4, 8, 12, 16 muestra el espectro de frecuencia de las seales mostradas en las figura 1, 5, 9 y 13 respectivamente y permite identificar el pico mximo de magnitud de la FFT calculada con Matlab.

18

5.1.

Seal sinusoidal pura, ventana rectangular:

Fig 1. seal sinusoidal pura de 1kHz (DSC)

Fig 2. FFT de la seal sinusoidal pura de 1kHz (DSC)


Espectro de la seal original 400

1.5*Sin(2000*pi*t)+1.5 3

350 300 250

2.5

Amplitud

Amplitud

X: 0.001 Y: 1.5

1.5

200
X: 1016 Y: 144.1

150 100 50
0 0.005 0.01 0.015 Tiempo (ms) 0.02 0.025 0.03

0.5

500

1000

1500

2000 2500 3000 Frecuencia (Hz)

3500

4000

4500

5000

Fig 3. seal sinusoidal pura de 1kHz (Matlab)

Fig 4. FFT de la seal sinusoidal pura de 1kHz (Matlab)

5.2.

Seal sinusoidal con ventana Hanning:

Fig 5. seal sinusoidal 1kHz multiplicada por la ventana de Hanning (DSC)

Fig 6. FFT de la seal sinusoidal de 1kHz multiplicada por la ventana de Hanning (DSC)

19

Seal seno multiplicada por Ventana Hanning 3


200 180

Espectro de la seal seno con ventana Hanning

2.5
160

140 120

Amplitud

Amplitud

1.5

100 80

X: 1016 Y: 86.23

60 40

0.5
20

50

100

150 Muestras

200

250

300

500

1000

1500

2000 2500 3000 Frecuencia (Hz)

3500

4000

4500

5000

Fig 7. seal sinusoidal de 1kHz multiplicada por la ventana de Hanning (Matlab)

Fig 8. FFT de la seal sinusoidal de 1kHz multiplicada por la ventana de Hanning (Matlab)

En la figura 5 se observan algunos saltos irregulares debido a que no hay sincronizacin del cruce por cero de la seal con el inicio del proceso de muestreo.

5.3.

Seal sinusoidal con ventana Hamming:

Fig 9. seal sinusoidal 1kHz multiplicada por la ventana de Hamming (DSC)


Seal seno multiplicada por Ventana Hamming 3

Fig 10. FFT de la seal sinusoidal de 1kHz multiplicada por la ventana de Hamming (DSC)
Espectro de la seal seno con ventana Hamming 250

2.5
200

Amplitud

150

1.5

Amplitud

100

X: 1016 Y: 90.86

1
50

0.5
0

500

1000

1500

50

100

150 Muestras

200

250

300

2000 2500 3000 Frecuencia (Hz)

3500

4000

4500

5000

Fig 11. seal sinusoidal de 1kHz multiplicada por la ventana de Hamming (Matlab)

Fig 12. FFT de la seal sinusoidal de 1kHz multiplicada por la ventana de Hamming (Matlab)

20

5.4.

Seal sinusoidal con ventana Blackman:

Fig 13. seal sinusoidal 1kHz multiplicada por la ventana de Blackman (DSC)
Seal seno multiplicada por Ventana Blackman 3

Fig 14. FFT de la seal sinusoidal de 1kHz multiplicada por la ventana de Blackman (DSC)
Espectro de la seal con ventana Blackman 180 160

2.5

140
2

120

Amplitud

Amplitud

100 80 60 40
X: 1016 Y: 74.14

1.5

0.5

20
0

0
0 50 100 150 Muestras 200 250 300

500

1000

1500

2000 2500 3000 Frecuencia (Hz)

3500

4000

4500

5000

Fig 15. seal sinusoidal de 1kHz multiplicada por la ventana de Blackman (Matlab)

Fig 16. FFT de la seal sinusoidal de 1kHz multiplicada por la ventana de Blackman (Matlab)

FFT (sin ventana) FFT (Ventana Hanning) FFT (Ventana Hamming) FFT (Ventana Blackman)

Frecuencia en el DSC [Hz] 1015.6 1015.6 1015.6 1015.6

Frecuencia en el Matlab[Hz] 1016 1016 1016 1016

Magnitud en el DSC 149 88.5 93.7 75.6

Magnitud en el Matlab 144.1 86.23 90.86 74.14

Tabla 3. Comparacin de la implementacin de la la FFT en el DSC F28335 y la simulacin en Matlab. La tabla 3 resume los resultados obtenidos al simular en Matlab e implementar en el DSC F28335 la FFT de una seal sinusoidal con diferentes ventanas. En este cuadro se puede apreciar que FFT calculada con el DSC y con Matlab son semejantes. La frecuencia fundamental de la seal encontrada es similar en las dos implementaciones. La magnitud del componente espectral de la frecuencia fundamental difiere levemente entre las dos implementaciones. Por consiguiente el clculo de la FFT usando el DSC F28335 produce resultados excelentes, que confirman que el DSC es un candidato idneo para aplicaciones de procesamiento de seales donde se requiera calcular la FFT. Por otra parte se observa la gran diferencia que existe entre las magnitudes del espectro fundamental calculado con las diferentes ventanas. Estos resultados se deben a que la ventana modifica considerablemente la forma de onda de la seal a la cual se le calcula la FFT.

21

5.5.

Derramamiento espectral de la seal con diferentes ventanas:

Fig 17. FFT de la seal sinusoidal pura de 1kHz (DSC)

Fig 18. FFT de la seal sinusoidal con ventana Hanning de 1kHz (DSC)

Fig 19. FFT de la seal sinusoidal con ventana Hamming de 1kHz (DSC)

Fig 20. FFT de la seal sinusoidal con ventana Blackman de 1kHz (DSC)

Al comparar los espectros de las seales ventaneadas mediante Hanning, Hamming y Blackman se observa que la ventana que causa la mayor disminucin del derramamiento espectral es la ventana Hamming. La aplicacin de esta ventana tambin brinda la magnitud del componente fundamental ms cercano a la magnitud del componente fundamental de la seal seno con la ventana rectangular. En concordancia esta ventana se recomienda cuando sea necesario mejorar el derramamiento espectral al calcular la FFT de una seal sinusoidal.

22

5.6.

Anlisis del algoritmo de interpolacin propuesto por (Jain et al., 1979):

Fig 21 Espectro obtenido mediante la implementacin de una FFT de 32 puntos en el DSC para una seal seno de 2kHz. La figura 21 muestra el espectro de la seal seno de 2kHz, El espectro permite identificar el componente de la frecuencia fundamental como el pico de mxima magnitud. De la figura se observa que la frecuencia fundamental calculada de esta forma corresponde a:

Esta frecuencia fundamental calculada difiere considerablemente con la frecuencia real de la seal sinusoidal muestreada. El error en el clculo se debe a la pobre resolucin espectral usada en el clculo de la FFT. Debido a que la frecuencia fundamental de la seal no se ubica en ninguno de los 32 componentes espectrales de la FFT, la energa contenida en espectro se distribuye en los componentes ms cercanos. El algoritmo de interpolacin propuesto por Jain, ayuda a resolver esta limitacin del clculo de la FFT.

Fig 22. Resultados obtenidos mediante implementacin en el DSC F28335 del algoritmo de Jain. La figura 22 muestra los resultados al ejecutar el algoritmo en el DSC. Delta corresponde a la distancia que debe existir entre la frecuencia real del componente fundamental y el componente aledao de mayor amplitud calculado por la FFT. Tambin se muestra el valor de kprima que es el valor del desplazamiento a realizar en frecuencia y que corresponde al valor real de la frecuencia de la seal sinusoidal y Xfundamental que corresponde a la magnitud del componente fundamental real de la seal obtenida mediante la interpolacin.

23

De acuerdo a los resultados de la interpolacin la frecuencia fundamental real de la seal corresponde a: ( )

Este resultado se aproxima ms a la frecuencia de la seal sinusoidal real. La magnitud calculada por la interpolacin es de 12.653. este resultado muestra una disminucin del derramamiento espectral, ya que la magnitud calculada luego de la interpolacin es mayor que la magnitud calculada por la FFT de 32 puntos.

24

6. CONCLUSIONES
De los resultados obtenidos al simular en Matlab e implementar en el DSC F28335 la FFT de una seal sinusoidal con diferentes ventanas se puede apreciar que la FFT calculada con el DSC y con Matlab son similares. La frecuencia fundamental encontrada con ambas implementaciones es de 1016 Hz aproximadamente. La magnitud del componente espectral de la frecuencia fundamental difiere levemente entre las dos implementaciones. Lo anterior permite concluir que el DSC F28335 y las funciones contenidas en la librera FPU constituyen una excelente herramienta para el clculo de la FFT y la aplicacin de ventanas a seales anlogas de forma sinusoidal. Los resultados permiten observa la gran diferencia que existe entre las magnitudes del espectro fundamental de la seal sinusoidal calculadas al aplicar diferentes ventanas. Estos resultados se deben a que la ventana modifica considerablemente la forma de onda, principalmente la amplitud de la seal a la cual se le calcula la FFT. Al comparar los espectros de las seales ventaneadas mediante Hanning, Hamming y Blackman se observa que la ventana que causa la mayor disminucin del derramamiento espectral es la ventana Hamming. La aplicacin de esta ventana tambin brinda la magnitud del componente fundamental ms cercano a la magnitud del componente fundamental de la seal seno con la ventana rectangular. En concordancia esta ventana se recomienda cuando sea necesario mejorar el derramamiento espectral al calcular la FFT de una seal sinusoidal. La FFT es una herramienta adecuada para el clculo del espectro de seales. Sin embargo al disminuir la cantidad de puntos de la FFT se disminuye la resolucin frecuencial y se introduce un error que puede llegar a ser considerable dependiendo de la precisin requerida en la aplicacin. En estas ocasiones los algoritmos de interpolacin son en una excelente alternativa. Dentro de estos algoritmos el de Jain es un mtodo simple y eficiente que permite estimar la frecuencia fundamental real de una seal a partir de los componentes espectrales calculados por la FFT o la DFT. Su simpleza permite que se logren buenos resultados con un bajo costo computacional.

25

7. REFERENCIAS BIBLIOGRFICAS
Albert, E. B. (2010). Procesado digital de seales - 2: Fundamentos para comunicaciones y control. Universitat Politcnica de Catalunya. Retrieved from http://books.google.com.co/books?id=p7BmrPIX1scC Grandke, T. (1983). Interpolation Algorithms for Discrete Fourier Transforms of Weighted Signals. Instrumentation and Measurement, IEEE Transactions on. doi:10.1109/TIM.1983.4315077 Jain, V. K., Collins, W. L., & Davis, D. C. (1979). High-Accuracy Analog Measurements via Interpolated FFT. Instrumentation and Measurement, IEEE Transactions on. doi:10.1109/TIM.1979.4314779 Kadambe, S. (1992). On the window selection and the cross terms that exist in the magnitude squared distribution of the short time Fourier transform. Statistical Signal and Array Processing, 1992. Conference Proceedings., IEEE Sixth SP Workshop on. doi:10.1109/SSAP.1992.246839 PROAKIS, J. G. A., MANOLAKIS, D. G. A., Rio, V. S., & Castro, J. L. A. (1998). Tratamiento digital de seales: problemas y ejercicios resueltos. Prentice-Hall. Retrieved from http://books.google.com.co/books?id=xWXCQgAACAAJ Quinn, B. G. (1994). Estimating frequency by interpolation using Fourier coefficients . Signal Processing, IEEE Transactions on. doi:10.1109/78.295186 Shum, P., & Yu, S. F. (1996). Improvement of Fourier series analysis technique by timedomain window function. Photonics Technology Letters, IEEE. doi:10.1109/68.536656

26

8. ANEXOS

Anexo 1: Entorno de desarrollo del CCS usado en la programacin del DSC

Anexo 2: Generador y osciloscopio usados en la practica

27

Anexo 3. DSC F28335 usado en la practica

Anexo 4. Conexiones entre el sistema de desarrollo, el generador de seales, el osciloscopio y el ordenador para programacin.

28

You might also like