Chip_Case_Generator/4ch-Z_Generator/env_gen/flattop.py

75 lines
1.7 KiB
Python
Raw Permalink Normal View History

2026-07-28 17:57:28 +08:00
import numpy as np
from scipy.special import erf
def flattop(A, edge, length, fsn):
'''
生成平顶包络函数 (Python版本)
Parameters:
-----------
A : float
幅度
edge : float
边沿时间参数
length : int
长度采样点数
fsn : float
采样频率
Returns:
--------
numpy.ndarray
平顶包络波形
'''
Ts = 0
r_sigma = 0.21230
T = length / fsn
t = np.arange(0, length + 2) / fsn
mu = 0.5 * edge
sigma = r_sigma * (edge - 1)
p = T - 1 - edge
x1 = (t - mu - Ts) / (np.sqrt(2) * sigma)
x2 = (t - mu - p + Ts) / (np.sqrt(2) * sigma)
f = A / 2 * (erf(x1) - erf(x2))
# f_padded = np.pad(f, (1, 1), mode='constant', constant_values=0)
return f
"""
# 使用示例
if __name__ == "__main__":
# 测试参数
A = 1.0 # 幅度
edge = 0.1 # 边沿时间
length = 1000 # 长度
fsn = 10000 # 采样频率
# 生成平顶包络
envelope = flattop(A, edge, length, fsn)
print(f"生成的包络长度: {len(envelope)}")
print(f"最大值: {np.max(envelope):.6f}")
print(f"最小值: {np.min(envelope):.6f}")
# 可选:绘图显示
try:
import matplotlib.pyplot as plt
plt.figure(figsize=(10, 6))
time_axis = np.arange(len(envelope)) / fsn
plt.plot(time_axis, envelope, 'b-', linewidth=2)
plt.xlabel('时间 (s)')
plt.ylabel('幅度')
plt.title('平顶包络波形')
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
except ImportError:
print("matplotlib 未安装,跳过绘图")
"""