【 MATLAB 】MATLAB 實現模擬訊號取樣後的重建(三)應用三次樣條函式spline實現內插
阿新 • • 發佈:2018-12-17
前三篇博文講了三種方法進行內插重建訊號:
這篇文章使用三次樣條函式spline來實現內插重建,並分析重建誤差。
採用的案例依然是上篇博文中的案例:
模擬訊號:
對該訊號使用兩種不同的取樣頻率取樣。
a. 在 fs = 5000 對訊號進行取樣
b. 在 fs = 1000 對訊號取樣
前面太多的文章作為鋪墊,這裡直接給出MATLAB指令碼:
clc clear close all % Analog signal Dt = 0.00005; t = - 0.005:Dt:0.005; xa = exp(-1000 * abs(t)); subplot(3,1,1); plot(1000*t,xa); title('Analog signal'); xlabel('t in msec'); ylabel('xa'); %Fs = 5000,Ts = 0.0002 % Discrete-time signal Ts = 0.0002; Fs = 1/Ts; n = -25:25; nTs = n*Ts; x = exp(-1000*abs(nTs)); subplot(3,1,2) plot(1000*t,xa); hold on stem(n*Ts*1000,x); title('Discrete-time signal'); hold off % Analog signal reconstruction subplot(3,1,3); xa_r = spline(nTs,x,t); plot(t*1000,xa_r); title('Analog signal reconstruction'); xlabel('t in msec'); ylabel('xa after reconstruction'); hold on stem(n*Ts*1000,x) hold off error1 = max(abs(xa_r - xa)) % Fs = 1000, Ts = 1ms % Discrete-time signal Ts = 0.001; Fs = 1/Ts; n = -5:5; nTs = n*Ts; x = exp(-1000*abs(nTs)); figure subplot(3,1,1); plot(1000*t,xa); title('Analog signal'); xlabel('t in msec'); ylabel('xa'); subplot(3,1,2) plot(1000*t,xa); hold on stem(n*Ts*1000,x); title('Discrete-time signal'); hold off % Analog signal reconstruction subplot(3,1,3); xa_r = spline(nTs,x,t); plot(1000*t,xa_r); title('Analog signal reconstruction'); xlabel('t in msec'); ylabel('xa after reconstruction'); hold on stem(n*Ts*1000,x) hold off error2 = max(abs(xa_r - xa))
當取樣率Fs為5000 樣本/s時,重建結果:
誤差:
error1 =
0.0317
重建和真正的模擬訊號之間的誤差是0.0317,這是由於非理想內插和非帶限造成的。將這個誤差與sinc函式內插比較(理想),這個誤差還比較小。從重構圖上看,重建還是不錯的。
當取樣率Fs為1000樣本/s時,重構結果:
error2 =
0.1679
這個情況下誤差較大,這是由於取樣間隔過大,也就是取樣率過低造成的頻譜混疊造成的,不能恢復原始訊號了。