我是靠谱客的博主 闪闪羽毛,最近开发中收集的这篇文章主要介绍【 MATLAB 】MATLAB 实现模拟信号采样后的重建(三)应用三次样条函数spline实现内插,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
前三篇博文讲了三种方法进行内插重建信号:
sinc函数内插重建
零阶保持(ZOH)内插重建
一阶保持内插(FOH)重建
这篇文章使用三次样条函数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
这个情况下误差较大,这是由于采样间隔过大,也就是采样率过低造成的频谱混叠造成的,不能恢复原始信号了。
最后
以上就是闪闪羽毛为你收集整理的【 MATLAB 】MATLAB 实现模拟信号采样后的重建(三)应用三次样条函数spline实现内插的全部内容,希望文章能够帮你解决【 MATLAB 】MATLAB 实现模拟信号采样后的重建(三)应用三次样条函数spline实现内插所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复