Kod: Zaznacz cały
IrmiteQi-Liang
//This software shows how to collect data samples in tables
//Input signal should be connected to LINE IN input.
#define n 240
#define LSB (3.3+3.3)/65536 //value of 1 LSB
#include <std.h>
#include "zadanie_codec_odczytcfg.h"
#include "csl.h"
#include "dsk6713.h"
#include "dsk6713_aic23.h"
#include "dsk6713_led.h"
#include "dsk6713_dip.h"
/* Configuration of AIC23 */
DSK6713_AIC23_Config config1 = { // normal mode line in, mic off
0x0017, // 0 DSK6713_AIC23_LEFTINVOL Glosnosc wejscia lewego kanalu
0x0017, // 1 DSK6713_AIC23_RIGHTINVOL Glosnosc wejscia prawego kanalu
0x00F9, // 2 DSK6713_AIC23_LEFTHPVOL Glosnosc lewego kanalu sluchawek
0x00F9, // 3 DSK6713_AIC23_RIGHTHPVOL Glosnosc prawego kanalu sluchawek
0x0012, // 4 DSK6713_AIC23_ANAPATH kontrola analogowej sciezki audio
0x0000, // 5 DSK6713_AIC23_DIGPATH kontrola cyfrowej sciezki audio
0x0002, // 6 DSK6713_AIC23_POWERDOWN kontrola włączonych urządzeń
0x0043, // 7 DSK6713_AIC23_DIGIF format interfejsu cyfrowego dzwieku
0x0023, // 8 DSK6713_AIC23_SAMPLERATE kontrola czestotliwosci probkowania
0x0001 // 9 DSK6713_AIC23_DIGACT aktywacja cyfrowego interfejsu
};
float energia(float tab[], int kk);
float okres(float tab[], int k, int FF);
DSK6713_AIC23_CodecHandle hCodec; //Codec handle
int IN_L,IN_R; //output 32bit data
int i;
float tablica_L[n],tablica_R[n];
float j=0;
float f,z;
int N=0, Fs;
void main()
{
/* Libraries initialisation */
CSL_init();
DSK6713_init();
DSK6713_LED_init();
DSK6713_DIP_init();
//Open codec
hCodec = DSK6713_AIC23_openCodec(0, &config1);
// Let's choose the proper sampling frequency
DSK6713_AIC23_setFreq(hCodec, DSK6713_AIC23_FREQ_44KHZ );
DSK6713_waitusec(1000); //wait 1ms to stabilize sampling frequency
// Default config of DAC
DSK6713_LED_on(0); DSK6713_LED_off(1);
DSK6713_LED_off(2); DSK6713_LED_off(3);
DSK6713_AIC23_outGain(hCodec,0x30); //-73dB - mute DAC
//wait for signal stabilisation
DSK6713_waitusec(1000000);
//clear the tables
for (i=0;i<N;i++) {
tablica_L[i]=sin(j);
tablica_R[i]=sin(j);
j=j+3.6;
}
}
while(1){
DSK6713_AIC23_powerDown(hCodec,0x00); //switch on the codec
DSK6713_waitusec(600000); //wait 0.6s to power on codec
N = 220;
Fs = 44000;
DSK6713_AIC23_setFreq(hCodec, DSK6713_AIC23_FREQ_44KHZ );
DSK6713_waitusec(1000);
for (i=0;i<N;i++) {
// read sample from left channel LINE_IN
while (!DSK6713_AIC23_read(hCodec, &IN_L));
// read sample from right channel LINE_IN
while (!DSK6713_AIC23_read(hCodec, &IN_R));
// because ADC is 16 bit converter, it's necessary to
// extend sign on high 16 bits of each element
if ( IN_L>=0x00008000 ) IN_L |= 0xffff0000;
if ( IN_R>=0x00008000 ) IN_R |= 0xffff0000;
// write samples to the tables after multiplication by
// 1LSB te get values in [V]
tablica_L[i]=IN_L*LSB;
tablica_R[i]=IN_R*LSB;
}
////// moje obliczenia
////energia
f = energia(tablica_L,N);
LOG_printf(&trace, "energia lewego kanalu: %f",f);
f = energia(tablica_R,N);
LOG_printf(&trace, "energia prawego kanalu: %f",f);
/////okres
z = okres(tablica_L,N,Fs);
LOG_printf(&trace, "Okres lewego kanalu: %f",z);
z = okres(tablica_R,N,Fs);
LOG_printf(&trace, "Okres prawego kanalu: %f",z);
_nop();
DSK6713_AIC23_powerDown(hCodec,0x0e); //switch off the codec
}
}
float energia(float tab[], int kk)
{
int i;
float suma = 0;
float energia, delta;
for(i=0; i<kk; i++)
suma = suma + tab[i]*tab[i] ;
delta = 5/kk;
energia = (float)delta*(float)suma;
return (float)energia;
}
float okres(float tab[], int k, int FF)
{
int i;
int przejscie_zero=0;
int liczba_probek=0;
float okres;
for(i=0; i<k; i++)
{
if(tab[i]<=0 && tab[i+1]>=0)
{
if (przejscie_zero == 1)
okres=(float)liczba_probek/FF;
przejscie_zero++;
liczba_probek=0;
}
liczba_probek++;
}
}
Prosze o sprawdzenie tego programu