Be the first to rate this file! 83 downloads (last 30 days) File Size: 4.09 KB File ID: #22665

N-dimensional Fourier interpolation

by Matthias Schabel

 

12 Jan 2009

No BSD License  

Performs N-D FFT interpolation with upsampling, downsampling, or mixed up- and downsampling

Download Now | Watch this File

File Information
Description

Performs N-D FFT interpolation on any data for which fftn works. Will upsample by zero-filling, downsample by truncating high frequencies, or combine both up- and downsampling by dimension to allow arbitrary reshaping.

MATLAB release MATLAB 7 (R14)
Tags for This File  
Everyone's Tags
Tags I've Applied
Add New Tags Please login to tag files.
Comments and Ratings (2)
13 Jan 2009 Matthias Schabel This code is needed as well (append on to end of fftInterpolate.m file): 
 
function subData = subRange(data,rng) 
 
if (isempty(rng))  
    subData = data;  
    return;  
end; 
 
sz = size(data); 
dim = length(sz); 
 
lo = rng(:,1)'; 
hi = rng(:,2)'; 
 
if (length(lo) ~= dim || length(hi) ~= dim) 
    error('subRange :: dimension mismatch'); 
end; 
 
% replace zeros with lower/upper limit  
for i=1:dim 
    if (lo(i) == 0) lo(i) = 1; end; 
    if (hi(i) == 0) hi(i) = sz(i); end; 
end; 
 
if (any(lo<1) | any(hi > sz)) 
    error('subRange :: sub-range out of bounds'); 
end; 
 
switch (dim) 
    case 1, subData = data(lo(1):hi(1));  
    case 2, subData = data(lo(1):hi(1),... 
                    lo(2):hi(2));  
    case 3, subData = data(lo(1):hi(1),... 
                    lo(2):hi(2),... 
                    lo(3):hi(3));  
    case 4, subData = data(lo(1):hi(1),... 
                    lo(2):hi(2),... 
                    lo(3):hi(3),... 
                    lo(4):hi(4));  
    case 5, subData = data(lo(1):hi(1),... 
                    lo(2):hi(2),...[] 
                    lo(3):hi(3),... 
                    lo(4):hi(4),... 
                    lo(5):hi(5));  
    otherwise, 
            % generate string and use eval 
            str = 'subData = data('; 
            for i=1:dim 
                str = [str 'lo(' num2str(i) '):hi(' num2str(i) ')']; 
                if (i~=dim) 
                    str = [str ',']; 
                else 
                    str = [str ');']; 
                end; 
            end; 
            eval(str); 
end; 
         
return; 
 
 
 
24 Apr 2009 Benjamin Matthias, I cannot get this to work. The example image posted seems to interpolate the peaks dataset by a factor of two. But when I run the following code, I don't get the same result: 
>>> figure; subplot(1,2,1); imagesc(peaks); 
>>> subplot(1,2,2); imagesc(fftInterpolate(peaks,2)); 
what's going on?
Please login to add a comment or rating.
Tag Activity for this File
Tag Applied By Date/Time
nd fft Cristina McIntire 13 Jan 2009 15:51:04
interpolation Cristina McIntire 13 Jan 2009 15:51:09
image processing Matthias Schabel 13 Jan 2009 15:51:14
image processing Philipp H 04 Jul 2009 06:34:02

Public Submission Policy

NOTICE: Any content you submit to MATLAB Central, including personal information, is not subject to the protections which may be afforded information collected under other sections of The MathWorks, Inc. Web site. You are entirely responsible for all content that you upload, post, e-mail, transmit or otherwise make available via MATLAB Central. The MathWorks does not control the content posted by visitors to MATLAB Central and, does not guarantee the accuracy, integrity, or quality of such content. Under no circumstances will The MathWorks be liable in any way for any content not authored by The MathWorks, or any loss or damage of any kind incurred as a result of the use of any content posted, e-mailed, transmitted or otherwise made available via MATLAB Central. Read the complete Disclaimer prior to use.

Contact us at files@mathworks.com