簡體   English   中英

如何使用python為簡單的正弦波繪制死區

[英]How to plot a deadband for a simple sine wave using python

我正在使用下面的代碼來繪制正弦波的死區,以便死區出現在 x 軸上為 y=0。 輸出通過上限[y-0.5]和下限的值最小化。這里需要顯示死區。任何人都可以幫我解決這個問題。

import matplotlib.pyplot as plt
import numpy as np

UpperLimit = 0.5;
LowerLimit = -0.5;

x=np.linspace(-20,20,100);
y=np.sin(x);

if y < 0:
   y=np.sin(x)-LowerLimit
if y > 0:
   y=np.sin(x)-UpperLimit
else:
   y=0

plt.plot(x,y)
plt.grid()
plt.show()

我想你應該使用矢量化值,所以試試這個

import matplotlib.pyplot as plt
import numpy as np

LL = -0.5
UL = 0.5

x=np.linspace(-20,20,100)
y=np.sin(x)

# plot original sine
plt.plot(x,y)


# zero output value for the dead zone
y[(y>=LL) & (y<=UL)] = 0

y[y>UL] -= UL
y[y<LL] -= LL

# plot "simulinked" ....
plt.plot(x,y)

plt.grid()
plt.show()

在此處輸入圖片說明

PS,如果您提供指向“死區”算法的鏈接,則更容易理解您想要什么,因為並非所有人都知道這一點

您需要遍歷y值數組並修改每個值,而不是讓if語句作用於您的數組。 此外,使用y > 0y < 0if語句將無法實現您正在尋找的死區結果。 相反,您應該使用y > UpperLimity < LowerLimit

這應該有效:

import matplotlib.pyplot as plt
import numpy as np

UpperLimit = 0.5;
LowerLimit = -0.5;

x=np.linspace(-20,20,100);
y=np.sin(x);

for y_point in np.nditer(y, op_flags=['readwrite']):
    if y_point > UpperLimit:
        y_point[...] -= UpperLimit
    elif y_point < LowerLimit:
        y_point[...] -= LowerLimit
    else:
        y_point[...] = 0

plt.plot(x,y)
plt.grid()
plt.show()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM