文章目录
- 题目
- 效果
- 梯形波100个点产生方法
- 锯齿波100个点产生方法
- c代码和proteus仿真
题目
114
波形发生器的制作
设计要求
设计一个能产生正弦波、方波、三角波、梯形波、锯齿波的波形发生器。设置5个开关K1~K5(从
上到下),分别对应正弦波、方波、三角波、梯形波、锯齿波,按一下其中一个开关,则选择出所要
产生的波形。
效果
梯形波100个点产生方法
python:
import numpy as np
import matplotlib.pyplot as plt
# 定义梯形波参数
total_points = 100
min_value = 0
max_value = 255
# 假设每个部分的点数相等,因此每部分25个点
points_per_section = total_points // 4
# 生成梯形波的各个部分
rising_edge = np.linspace(min_value, max_value, points_per_section, endpoint=False)
top = np.full(points_per_section, max_value)
falling_edge = np.linspace(max_value, min_value, points_per_section, endpoint=False)
bottom = np.full(total_points - 3 * points_per_section, min_value)
# 合并生成完整的梯形波
trapezoidal_wave = np.concatenate((rising_edge, top, falling_edge, bottom))
# int 化
trapezoidal_wave = trapezoidal_wave.astype(int)
print(trapezoidal_wave.tolist())
# 绘制梯形波形
plt.plot(trapezoidal_wave)
plt.title('Trapezoidal Wave')
plt.ylim(min_value - 10, max_value + 10)
plt.show()
锯齿波100个点产生方法
python
import numpy as np
import matplotlib.pyplot as plt
# 定义锯齿波参数
total_points = 100 # 一个周期的总点数
max_value = 255
num_teeth = 2 # 一个周期内锯齿波的数量
# 计算单个锯齿波的点数
points_per_tooth = total_points // num_teeth
# 生成单个锯齿波
single_tooth = np.linspace(0, max_value, points_per_tooth, endpoint=False)
# 生成完整的锯齿波,由两个单个锯齿波拼接而成
sawtooth_wave = np.tile(single_tooth, num_teeth)
sawtooth_wave = sawtooth_wave.astype(int)
sawtooth_wave = sawtooth_wave.tolist()
# sawtooth_wave = sawtooth_wave[::-1]
print(sawtooth_wave)
# 绘制锯齿波形
plt.plot(sawtooth_wave)
plt.title('Sawtooth Wave')
plt.ylim(-10, max_value + 10) # 设置y轴范围以略微超出最小和最大值
plt.show()
c代码和proteus仿真
https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2