Sinc Interpolation without using predefined function
43 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Radu-Andrei
am 25 Okt. 2023
Kommentiert: Radu-Andrei
am 26 Okt. 2023
I need to write a code that does linear interpolation. (without using interp1) My function has 3 inputs (n,x,n2). Vector n contains the sample points, and x contains the corresponding values, x(n). Vector n2 contains the coordinates of the query points. My code is this:
function y = sinc_interp(n,x,n2)
y = zeros(length(n2),1);
for i=1:length(n2)
y(i) = sum(x.*sinc(n2(i)- n));
end
end
I think the formula is ok (It is the Shannon formula). The problem is that for various input functions, it doesn't look good. For example:
a = 0.7;
N = 10;
n = 0:N;
x = n.*a.^n + 1;
n2 = linspace(0,10,1000);
figure(1)
plot(n2,n2.*a.^n2 + 1)
y3 = sinc_interp(n,x,n2);
figure(2)
plot(n2,y3)

0 Kommentare
Akzeptierte Antwort
Sam Chak
am 25 Okt. 2023
Hi @Radu-Andrei
Not an interpolation expert, but I believe your code didn't work correctly because the sampling frequency (at 1 Hz) is relatively low. Additionally, there appears to be a slight error in the implementation of the Whittaker–Shannon interpolation formula, as indicated on this Wikipedia page. Nevertheless, the code has been fixed, and you can adjust the sampling frequency to observe the interpolation effect.
a = 0.7; % parameter in continuous function
tFinal = 10;
Fs = 20; % sampling frequency
T = 1/Fs;
t = 0:0.01:tFinal; % for continuous function
ts = 0:T:tFinal; % for sinc-interpolated
x = @(t) t.*(a.^t) + 1; % the continuous function
xn = x(ts); % the discrete sequence for sinc-interpolated
% call Whittaker–Shannon interpolation
y = sinc_interp(t, T, ts, xn);
plot(t, x(t), 'linewidth', 4, 'Color', '#0e6ea1'),
hold on, grid on
plot(t, y, '.', 'MarkerSize', 3, 'Color', '#ed9c5a');
xlabel('t')
legend('x(t)', 'sinc')
%% Whittaker–Shannon interpolation Algorithm
function y = sinc_interp(t, T, ts, xn)
y = zeros(length(ts), 1);
for n = 1:length(ts)
y = y + xn(n)*sinc((t - (n-1)*T)/T);
end
end
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Interpolation finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
