Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#1 |
高级会员
注册日期: 2019-11-21
帖子: 3,006
声望力: 66 ![]() |
![]()
我具有以下功能和一组值:
z(t): {R 鈫?[-2,3] | z(t) = sin(0.5脳蟺脳t) + cos(2脳蟺脳t) + 1 t = [-1 : 0.001 : 1] 我需要使用采样周期Ts=0.01确定z(n脳Ts) = z(n) ,因此离散化了函数。 我尝试使用d2d,但据我所知只能应用于zpk函数。 还有其他方法吗? 回答: 如果您希望信号的零阶保持近似,则可以通过以下代码完成: Ts = 0.01; t = -1:0.001:1; n = t./Ts; nSampled = nan(size(t)); nSampled(1:10:end) = n(1:10:end); zCont = @(t)(sin(pi*t/2)+cos(2*pi*t)+1); zZOH = @(n,Ts)(zCont(floor(n).*Ts)); zDisc = @(n,Ts)(zCont(n.*Ts)); figure; plot(t,zCont(t),'b','DisplayName','Continuous'); hold on; plot(t,zZOH(n,Ts),'r','DisplayName','ZOH'); stem(t,zDisc(nSampled,Ts),'k','DisplayName','Discrete'); legend('show'); 如图所示,这将为您提供输出。 ![]() 您可以尝试使用ceil()或round()而不是floor()来获得稍微不同的行为。如果您只需要整数n的样本,那是完全不同的,并且在一般情况下是非常不同的(由于float中的舍入误差)。但是:对于您的情况,它将通过对子采样进行简单采样(如nSampled那样),因为子采样因子为10。对于非整数子采样因子,这将无法正常工作。 更多&回答... |
![]() |
![]() |