%consumes some samples in a sample data structure (See ProjectD) and upsamples them to twice their original sampling frequency function out = upSampleSamples2(samples, factor) out = samples; for i = 1:length(samples) out(i) = struct('note',samples(i).note,'sample',upSample(samples(i).sample,factor)); end %doubles the sampling rate of a sample function upSampledSample = upSample(sample, factor) upSampledSample = zeros(1,factor*length(sample)); for k = 1:length(sample) upSampledSample((k-1)*factor + 1) = sample(k); %insert the original signal into every other position of our new signal end upSampledSample = fft(upSampledSample); upSampledSample = [upSampledSample(1:ceil(length(upSampledSample)/4)) , zeros(1,floor(length(upSampledSample)/2) - 1), upSampledSample(floor(3*length(upSampledSample)/4):end)]; %cut out the middle of the spectrum upSampledSample = real(ifft(upSampledSample))'; %take the inverse fft (have to take real to remove some imaginary part due to rounding errors)