Generating Interpolation Correction Look-up tableΒΆ

The following Matlab function can be used to generate the look-up table coefficients.

function [ LUT_STRING ] = getLUT( adcSampleFreq, transducerFreq, resLUT, filename )
%getLUT Generates Interpolation Look-up table
samplesPerCycle = adcSampleFreq/transducerFreq;
% Generate lookup table
correctionLUT = zeros(resLUT*2,1);

for i=0:resLUT-1
    delay = 2*pi/samplesPerCycle;
    offset = i/resLUT - 0.5;
    if(offset ~= 0)
        x = -atan((offset*2*(cos(delay)-1))/sin(delay));
        correctionLUT(1+i*2) = (x*samplesPerCycle/(2*pi))/offset - 1;
    else
        correctionLUT(1+i*2) = correctionLUT(i*2-1);
    end
    interpOffset = offset + offset*correctionLUT(2*mod(round(resLUT*(offset+0.5)),resLUT)+1);
    correctionLUT(2+i*2) = (1 / cos(2*pi*interpOffset/samplesPerCycle)) - 1;
end

LUT_STRING = '';

sample_count = length(correctionLUT);
fileID = fopen(filename,'w');
j = 1;
while j<=sample_count
    if(j<sample_count)
        LUT_STRING = [LUT_STRING sprintf('{_Q15(%.6f), _Q15(%.6f)},\n',correctionLUT(j),correctionLUT(j+1))];
        fprintf(fileID,'{_Q15(%.6f), _Q15(%.6f)},\n',correctionLUT(j),correctionLUT(j+1));
        j=j+2;
    elseif j==sample_count
        LUT_STRING = [LUT_STRING sprintf('{_Q15(%.6f), _Q15(%.6f)}\n',correctionLUT(j),correctionLUT(j+1))];
        fprintf(fileID,'{_Q15(%.6f), _Q15(%.6f)}\n',correctionLUT(j),correctionLUT(j+1));
        j=j+2;
    else
        break
    end
end
fclose(fileID);
end