【 MATLAB 】MATLAB 实现模拟信号采样后的重建(三)应用三次样条函数spline实现内插

举报
李锐博恩 发表于 2021/07/15 05:04:57 2021/07/15
【摘要】 前三篇博文讲了三种方法进行内插重建信号: sinc函数内插重建 零阶保持(ZOH)内插重建 一阶保持内插(FOH)重建 这篇文章使用三次样条函数spline来实现内插重建,并分析重建误差。 采用的案例依然是上篇博文中的案例: 模拟信号: 对该信号使用两种不同的采样频率采样。 a. 在 fs = 5000 对信号进行采样 b. 在 fs = 1000 对...

前三篇博文讲了三种方法进行内插重建信号:

sinc函数内插重建

零阶保持(ZOH)内插重建

一阶保持内插(FOH)重建

这篇文章使用三次样条函数spline来实现内插重建,并分析重建误差。


采用的案例依然是上篇博文中的案例:

模拟信号:

x_a(t) = e^{-1000\left |t \right |}

对该信号使用两种不同的采样频率采样。

a. 在 fs = 5000 对信号进行采样

b. 在 fs = 1000 对信号采样


前面太多的文章作为铺垫,这里直接给出MATLAB脚本:


  
  1. clc
  2. clear
  3. close all
  4. % Analog signal
  5. Dt = 0.00005;
  6. t = - 0.005:Dt:0.005;
  7. xa = exp(-1000 * abs(t));
  8. subplot(3,1,1);
  9. plot(1000*t,xa);
  10. title('Analog signal');
  11. xlabel('t in msec');
  12. ylabel('xa');
  13. %Fs = 5000,Ts = 0.0002
  14. % Discrete-time signal
  15. Ts = 0.0002;
  16. Fs = 1/Ts;
  17. n = -25:25;
  18. nTs = n*Ts;
  19. x = exp(-1000*abs(nTs));
  20. subplot(3,1,2)
  21. plot(1000*t,xa);
  22. hold on
  23. stem(n*Ts*1000,x);
  24. title('Discrete-time signal');
  25. hold off
  26. % Analog signal reconstruction
  27. subplot(3,1,3);
  28. xa_r = spline(nTs,x,t);
  29. plot(t*1000,xa_r);
  30. title('Analog signal reconstruction');
  31. xlabel('t in msec');
  32. ylabel('xa after reconstruction');
  33. hold on
  34. stem(n*Ts*1000,x)
  35. hold off
  36. error1 = max(abs(xa_r - xa))
  37. % Fs = 1000, Ts = 1ms
  38. % Discrete-time signal
  39. Ts = 0.001;
  40. Fs = 1/Ts;
  41. n = -5:5;
  42. nTs = n*Ts;
  43. x = exp(-1000*abs(nTs));
  44. figure
  45. subplot(3,1,1);
  46. plot(1000*t,xa);
  47. title('Analog signal');
  48. xlabel('t in msec');
  49. ylabel('xa');
  50. subplot(3,1,2)
  51. plot(1000*t,xa);
  52. hold on
  53. stem(n*Ts*1000,x);
  54. title('Discrete-time signal');
  55. hold off
  56. % Analog signal reconstruction
  57. subplot(3,1,3);
  58. xa_r = spline(nTs,x,t);
  59. plot(1000*t,xa_r);
  60. title('Analog signal reconstruction');
  61. xlabel('t in msec');
  62. ylabel('xa after reconstruction');
  63. hold on
  64. stem(n*Ts*1000,x)
  65. hold off
  66. error2 = max(abs(xa_r - xa))

当采样率Fs为5000 样本/s时,重建结果:

误差:


error1 =

    0.0317

重建和真正的模拟信号之间的误差是0.0317,这是由于非理想内插和非带限造成的。将这个误差与sinc函数内插比较(理想),这个误差还比较小。从重构图上看,重建还是不错的。


当采样率Fs为1000样本/s时,重构结果:

error2 =

    0.1679

这个情况下误差较大,这是由于采样间隔过大,也就是采样率过低造成的频谱混叠造成的,不能恢复原始信号了。

 

文章来源: reborn.blog.csdn.net,作者:李锐博恩,版权归原作者所有,如需转载,请联系作者。

原文链接:reborn.blog.csdn.net/article/details/83418799

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。