resample.c : C program used to resample 48 kHz experimental data to 44.1 kHz RAYNOISE impulse response sampling frequency for correlation analysis
#include#include #include #include #include #include void interpolatedata(char filename[], char outfilename[]); void main() { /* ACS597D - PROJECT Interpolate a 48 kHz Impluse response from the TEF down to a 44.1 kHz impulse response from RAYNOISE */ char infilename[80]; /*inputfilename*/ char outfilename[80]; printf("\n\nInterpolation of a 48 kHz data series to a 44.1 kHz data series.\n\n"); printf("\n\n Input file? >>> "); scanf("%s",&infilename); printf("\n\n Output file? >>> "); scanf("%s",&outfilename); printf("\n\ninput filename = %s outputfilename = %s\n\n",infilename,outfilename); interpolatedata(infilename,outfilename); } /*Close Main*/ void interpolatedata(char infilename[], char outfilename[]) { int fd; int status; int i=0; int displaycounter=0; int sample=1; int datasample=1; int leftsample=1; int rightsample=0; int found=0; int samplesTEF; int samplesRAY; float myfloat; float temp; float fsTEF=48000.0; float TsTEF=0.0; float fsRAY=41000.0; float TsRAY=0.0; float durationTEF; float durationRAY; float slope=0.0; float arg=0.0; /* Temporary float */ float time=0.0; float newtime=0.0; float sampletime=0.0; float datatime=0.0; float data[288000]; float newdata[288000]; double intsamplesRAY; /* A Capture argument for the modf function */ double floatsamplesRAY; /* A Capture argument fo the modf function */ char outfilename2[80]; FILE *input; FILE *output; printf("\nEntering subroutine..."); TsTEF=1/fsTEF; TsRAY=1/fsRAY; /* INITIALIZE DATA ARRAYS */ i=0; while(i<288000){ data[i]=0.0; newdata[i]=0.0; i++; } /* OPEN THE INPUT FILE */ printf("\nOpening data file..."); input = fopen(infilename, "r"); if (input == NULL) { printf("\nERROR - cannot open %s\n",infilename); } printf("\n\nData file open. Proceeding with calculations..."); /*READ DATA INTO ARRAY*/ i=0; sample=0; while(!feof(input)){ fscanf(input,"\n%e",&data[i]); /*printf("\nsample = %i data = %e ",sample,data[i]);*/ i++; sample++; } fclose(input); printf("\nData read into array - proceeding with interpolation\n"); /*DETERMINE SAMPLES IN 44100 Hz ARRAY*/ samplesTEF=sample-1; /* KLUDGE! Somehow the program come out with one more than wc -l */ durationTEF=samplesTEF*TsTEF; arg=durationTEF/TsRAY; floatsamplesRAY=modf(arg,&intsamplesRAY); samplesRAY=(int)intsamplesRAY; durationRAY=samplesRAY*TsRAY; if (durationTEF-durationRAY>TsTEF){ printf("\n\nWARNING: The duration of the new data is of by more than one Ts of the data...\n"); } printf("\ndata samples = %i new data samples = %i",samplesTEF,samplesRAY); printf("\nfirst data point value = %e last data point value = %e",data[0],data[samplesTEF]); /*PROCESS DATA*/ displaycounter=0; sample=1; datasample=1; leftsample=1; rightsample=0; found=0; newdata[0]=data[0]; printf("\n\nsamplesTEF = %i samplesRAY = %i",samplesTEF,samplesRAY); printf("\ndurationTEF = %f durationRAY = %f",durationTEF,durationRAY); printf("\nTsTEF = %f TsRAY = %f",TsTEF,TsRAY); printf("\nsample = %i datasample = %i leftsample = %i rightsample = %i\n",sample,datasample,leftsample,rightsample); printf("\nInterpolating sampled data..."); while (sample =sampletime){ found=1; /*[found sample sampletime datasample datatime];*/ /*printf("\nfound interpolation point");*/ leftsample=datasample-1; rightsample=datasample; slope=(data[rightsample]-data[leftsample])*fsTEF; newdata[sample]=(-1)*((sampletime-(leftsample*TsTEF))*slope-data[leftsample]); /*printf("\n sample = %i new data = %e",sample,newdata[sample]);*/ } if (found==1){ datasample=samplesTEF+1; /*Moves new sample index up by one by jumping out of while loop*/ } datasample=datasample+1; /*Insurance*/ } sample++; displaycounter++; arg=((float) displaycounter/10000.0); arg=modf((double) arg,&intsamplesRAY); if (arg==0.0){ /*printf("\nCalculation proceeding sample = %i",sample);*/ } } /*OUTPUTDATA - File contains times and amplitudes of the origonal data and new data*/ output = fopen(outfilename, "w"); if (output == NULL) { printf("\nERROR - cannot open %s\n",outfilename); } printf("\n\nData file open. Proceeding with output...\n"); i=0; while (i