我使用下面的代码(第一个代码)进行sin函数的线性逼近 . 我对连续函数进行了采样,并尝试通过连接样本点之间的直线来“重建”原始函数 . 当然,记录的信号并不完全是原始的,我需要测量这种近似的误差 . 第二个是我想要做的确切示例,但它是sinc的近似值 . 我的问题是:如何将第二个代码更改为线性近似而不是sinc近似?

第一个代码由“连续”信号x组成,它将以1 / Ts(xb)的速率进行采样,然后由线性插值器重建为信号xr . 问题是插值 - 下面的代码和函数“interp1” - 都不返回连续大小的矢量,而是返回样本的大小 .

% Time domain
t0 = 0;
tr  = 1e-3;
tf  = 1;

t = t0:tr:tf;

f = 10;
fs = 50;

% Original signal
x = @(t)(sin( 2 * pi * f * t));

% Sampling period
Ts = 1/fs;

% n
nf = tf/Ts; 
n  = 0 : nf;

% Sampled signal
xb = zeros(1,length(t));
xb(1:Ts/tr:end) = x(n*Ts);

% iterpolador linear - return a xr discrete (also interp1)

for j = 2: nf    
  for i = 2:length(t)
    xr = x((n-1)*Ts)+(1/(2 * Ts))*((x(n*Ts)-x((n-1)*Ts))*(t(i) - n(j-1)*Ts));
  end
end

% Plot

我已经找到了理想的插值器(sinc方法),它以连续的时间尺度给出信号,但在线性方法中不能做到这样的事情 . 码:

% Time
t0 = 0;
tr = 1e-3;
tf = 1;

% frequency
f=10; 
fs= 50;
Ts = 1 / fs;

% continuous time
t = t0: tr : tf; 

% continuous signal
x = sin(2 * pi * f * t);

% discret time
n = (t0 : Ts : tf);

% sampled signal
xb = sin(2 * pi * f * n); 

% recorvered signal
xr = zeros(length(t));

% workin sinc
for k = 1 : length(t)
  for p = 1 : length(xb)
    xr(k) = xr(k) + xb(p) * sinc(((k-1)* tr -(p-1) * Ts)/Ts );
  end
 end


% cant do error in linear aprox because xr is sampled, but here works 
% because it is in t time
for k = 1 : length(t)
  e(k) = x(k) - xr(k);
end

for k = 1 : length(t)
  em(k)= sqrt((e(k))^2);
end

mean(em)

% Plot

我将如何(线性地)接近信号而不是使用理想的重构器(sinc)?