% usage: [Amplitude, Phase] = inter(amp_tracks, frequency_tracks, phase_tracks, alpha, % beta, winspace) % % This function interpolates the amplitude and phase of the signal. % It takes the matrices calculated by freqmat2.m and uses the along with the % alpha and beta parameters to interpolate linearly for the amplitude and % cubically for the phase. function [Amps, Phase]=inter(data, frek, faze, alpha, beta, winspace); [row, col] = size(data); % an array of zeros to fill into the output arrays as appropriate temp = zeros(winspace+1,1); % T, the time between windows = # samples between windows * original sampling rate T = winspace * 0.000125; % n is a discrete time measurement starting at 0 and going up to the amount of time % between consecutive frames n = 0 : 0.000125 : T; N = n'; for i = 1:col, % the row index into the new array r_index = 1; for j = 1:row-1, % check to see if the two endpoints are 0, in which case insert more 0's into output arrays if data(j,i) == 0 & data(j+1,i) == 0 Amps(r_index:r_index+winspace,i) = temp; Phase(r_index:r_index+winspace,i) = temp; % check to see if neither endpoint is 0, in which case interpolate normally % the interpolation equation is being implemented as described in the paper referenced % earlier in this report. elseif data(j,i)~=0 & data(j+1,i)~=0 t = data(j,i) : (data(j+1,i)-data(j,i))/(winspace) : data(j+1,i); Amps(r_index : r_index+winspace, i) = t(:); fz = zeros(winspace+1,1)+faze(j,i); Phase(r_index : r_index+winspace, i) = (fz + N.*frek(j,i) + N.^2*alpha(j,i) + N.^3*beta(j,i)); % check for the death of a track, in which case maintain the old frequency and reduce % amplitude to 0 elseif data(j,i)~=0 & data(j+1,i)==0 t = data(j,i) : (data(j+1,i)-data(j,i))/(winspace) : data(j+1,i); Amps(r_index : r_index+winspace, i) = t(:); fz = zeros(winspace+1,1)+faze(j,i); Phase(r_index : r_index+winspace, i) = fz; % check for the birth of a track, in which case start with the next frequency (the first % measured for the track) and increase the amplitude up to the first measured value elseif data(j,i)==0 & data(j+1,i)~=0 t = data(j,i) : (data(j+1,i)-data(j,i))/(winspace) : data(j+1,i); Amps(r_index : r_index+winspace, i) = t(:); fz = zeros(winspace+1,1)+faze(j+1,i); Phase(r_index : r_index+winspace, i) = fz; end % of if data() statements r_index = r_index + winspace; end % of for j loop end % of for i loop