我想评估来自通信设备的离散随机信号I样本的拉普拉斯变换。
作为一个简单的测试案例,我试图使用ilaplace
来获取原始信号,但我不确定我的方法是否合情合理。
x = sym('x','real');
y = sym('y','real');
t=linspace(0,1000,1000);
f=sin(t);
s = x+i*y;
F_s=sum(f.*exp(-s*t));
ilaplace(F_s)
以上可能看起来很愚蠢,但在我真正的问题中,我正在尝试估算ilaplace(2*F_s/(-s*F_s +f(0)))
形式的中Green's function。
我还尝试使用信号符号变量s
,它给了我一系列的增量,我不确定它是否正确以及错误估计是什么。
syms s;
F_s = symfun(sum(sin(t).*exp(-s*t)), s);
ilaplace(F_s)
答案 0 :(得分:2)
尝试增加t
中的元素数量,以更准确地采样正弦函数,或在计算前平滑信号。您面临的另一个问题是逆拉普拉斯变换需要为s>0
定义一个函数,即高达无穷大。您在t=1000
处截断信号,因此拉普拉斯变换也不会无穷大。
判断documentation of ilaplace
尝试转换数组F_s
中的每个单词。这具有一些常数的千个条目的总和exp(-s*t)
形式的指数,其逆变换是增量脉冲,参见this Wikipedia page, second entry of the table。因此,F_s
的逆变换是一系列的一千个增量脉冲,可能正好是您使用sin(t)
生成的千个输入点,直到前进和出现的一些数值误差。向后拉普拉斯变换。
最后:如文档中所述,MATLAB期望单个符号变量s
。您使s
由两个符号变量组成。虽然在数学上是正确的,但MATLAB只将第一个符号变量作为变换变量,因此您可以得到delta脉冲乘以某个exp(1i*y)
函数的答案。使用下面的代码,你至少可以摆脱这个问题(但显然保持delta脉冲的总和):
t=linspace(0,1000,1000);
f=sin(t);
syms s
F_s=sum(f.*exp(-s*t));
ilaplace(F_s)
答案 1 :(得分:1)
好的,这就是我使用matlab对离散信号进行拉普拉斯变换并使用ilaplace将其恢复以进行验证的方式:
t=linspace(0,10,500);
f=exp(-t/0.2);
syms s;
F_s = sum(f.*exp(-s*t));
f_t = (ilaplace(F_s));
F_t = (int(f_t));
y=subs(F_t,t);
Ft_recovered = diff(double(y));
subplot(2,2,1)
plot(t,f)
title('numerical input exp(-t/0.2)')
subplot(2,2,2)
ezplot(F_s)
title('numerical laplace')
subplot(2,2,3)
plot(t(1:end-1), Ft_recovered)
title('recovered signal')
subplot(2,2,4)
syms x;
fx = symfun(exp(-x/0.2),x);
ezplot(laplace(fx))
title('symbolic laplace transform')
这里最大的困难是让matlab评估狄拉克三角洲列车的总和,所以我做了这个技巧:整合表达式将其转换为重力函数列,评估它然后绘制导数:
F_t = (int(f_t));
y=subs(F_t,t);
Ft_recovered = diff(double(y));