我有以下Matlab表达式(传递函数):
H(w) = 0.1/(1 - 0.9exp(-jw))
其中w是符号变量(omega)。
我试图为w:
解决以下表达式|H(w)| == 1/sqrt(2)
手动解决这个问题我相信答案应该是0.105,但我无法得到这个答案。我尝试过为w添加假设是真实的并且w> 0
我已尝试过以下命令:
solve(abs(H)==1/sqrt(2),w)
和
solve(H^2==1/2,w)
没有运气。非常感谢任何帮助。
谢谢!
答案 0 :(得分:1)
首先,w
为真实的假设很重要,在复杂域中,等式具有无限多个解。对于实际w
,有两个,因为H(-w) = conj(H(w))
因此abs(H(-w))=H(w)
(实际上超过两个,因为H(w)
是2pi周期,请参阅回复末尾的编辑) 。
这是有趣的地方。如果你只说w是真的,它就可以了:
>> syms w real;
>> H = 0.1/(1-0.9*exp(-j*w));
>> solve(abs(H)==1/sqrt(2),w)
ans =
-atan(359^(1/2)/179)
>> eval(ans)
ans =
-0.1055
从上面我们知道+0.1055也是一个解决方案。
但是,如果我们另外要求w
为正(例如,assumeAlso(w>=0)
),则会发生奇怪的事情并且我们得到一个带有两个参数的结果,一个整数k
(给出2 pi k倍数)和标量z
上有一些条件(z上的至少一个条件确实给出正确的值0.1055,但我真的很想知道2 pi k倍数)。我不确定为什么会这样。也许其他人可以澄清。
编辑:正如Jonathan所指出的,自exp(-j*(w+2*pi)) = exp(-j*w)
以来实际预期的2 pi k倍数,因此H(w)
是2pi周期性的。当我们假设w
实数和多个解时我们另外假设w
非负数时,Matlab返回一个解决方案仍然很奇怪。
答案 1 :(得分:0)
我对此问题的第一次尝试似乎给了我一个与你提供的值不同的值。使用MATLAB的符号求解器,我找到了一个想象的解决方案。
H = 0.1/(1 - 0.9*exp(-j*w))
solve(abs(H)==1/sqrt(2),w)
% ans = log(2^(1/2)/9 + 10/9)*i
eval(ans)
% ans = 0.2376i
将其替换为abs(H)
的表达式,可以看出它实际上等于1/sqrt(2)
,因此它是一个有效的解决方案。
测试您的手牌计算也会在abs(H)
附近产生1/sqrt(2)
的值,因此它也可能是一个有效的解决方案。
为了证实这一点,我尝试了MATLAB的数值求解器fsolve
。
fsolve(@(w) abs(0.1/(1 - 0.9*exp(-j*w)))-1/sqrt(2), 0.1)
% ans = 0.1055
您的等式似乎有多种解决方案。这两个值似乎都满足等式。