在MatLab中创建离散阶跃函数

pb3skfrl  于 2022-11-15  发布在  Matlab
关注(0)|答案(3)|浏览(816)

我正在使用下面的代码在matlab中创建一个标准的离散单位阶跃函数。

>> n = -5 : 5;
>> y = heaviside(n);
>> stem(n,y);

然而,这会打印

我尝试了许多不同的变体,并试图扰乱代码。但我无法创建该函数。最好是把函数放在一个变量中,这样我就可以做更复杂的信号处理了。你知道我做错了什么吗?

u4vypkhs

u4vypkhs1#

这是来自MatLab文档的Heaveside阶跃函数的定义。
如果x<0,则Heaviside(X)返回值0,如果x>0,则返回值1,如果x=0,则返回值1/2。
请注意此积分的结果,以确定实施是否正确:

syms x
int(exp(-x)*heaviside(x), x, -Inf, Inf)
sulc1iza

sulc1iza2#

请注意,heaviside是在符号库中定义的,它主要用于符号积分、傅里叶变换等连续计算。您也可以在离散设置中使用它,但x=0的行为是否符合您的需要取决于应用程序。
创建阶跃函数(不带任何工具箱)的更简单方法是:

step1 = @(x) x>=0;
step2 = @(x) (sign(x)+1)/2;

figure(1);clf;
stem(-5:5,step1(-5:5)); 
hold on;
stem(-5:5,step2(-5:5),'rx');

而第一个在x=0处从0跳到1,第二个类似于heaviside

8cdiaqws

8cdiaqws3#

我希望这些功能会有帮助,你正在寻找的是最后一个!

%% Functions

function y=us(t) % continuous time unit step function

 y=(sign(t)+1)/2;

end

function y=rect(t) % continuous time unit rectangle function

 y=us(t+0.5) - us(t-0.5);

end

function y=tri(t) % continuous time unit triangle function

 y = (t+1).*rect(t+0.5) + (-t+1).*rect(t-0.5);

end

function y=usD(n) % Discrete time unit step, n must be an integer! 

y = 1.*(n>=0);

end

相关问题