用Python编写一个信号发生器软件 (1)可以产生正弦/三角波/方波波形 (2)有横纵坐标(坐标可自适应屏幕大小) (3)可预置波形、幅度、频率、直流偏置(相位可选作)(4)运行结果有简单的用户软件界面
如下代码已经能实现信号发生,现在需要增加一个用户界面,并且实现坐标可自适应屏幕大小
import numpy as np
import matplotlib.pyplot as plt
# 生成正弦波信号
def generate_sine_wave(frequency, amplitude, phase, dc_offset, sample_rate, duration):
time = np.arange(0, duration, 1/sample_rate)
signal = amplitude * np.sin(2*np.pi*frequency*time + phase) + dc_offset
return time, signal
# 生成三角波信号
def generate_triangle_wave(frequency, amplitude, phase, dc_offset, sample_rate, duration):
time = np.arange(0, duration, 1/sample_rate)
signal = amplitude * np.arcsin(np.sin(2*np.pi*frequency*time + phase)) * (2/np.pi) + dc_offset
return time, signal
# 生成方波信号
def generate_square_wave(frequency, amplitude, phase, dc_offset, sample_rate, duration):
time = np.arange(0, duration, 1/sample_rate)
signal = amplitude * np.sign(np.sin(2*np.pi*frequency*time + phase)) + dc_offset
return time, signal
# 主程序
def main():
# 获取输入
waveform = input("请输入波形类型(正弦/三角/方波):")
amplitude = float(input("请输入幅度:"))
frequency = float(input("请输入频率(Hz):"))
dc_offset = float(input("请输入直流偏置:"))
duration = float(input("请输入持续时间(秒):"))
phase = float(input("请输入相位:"))
if waveform == '正弦':
time, signal = generate_sine_wave(frequency, amplitude, phase, dc_offset, sample_rate=50000, duration=duration)
elif waveform == '三角':
time, signal = generate_triangle_wave(frequency, amplitude, phase, dc_offset, sample_rate=50000, duration=duration)
elif waveform == '方波':
time, signal = generate_square_wave(frequency, amplitude, phase, dc_offset, sample_rate=50000, duration=duration)
# 绘制信号图形
plt.plot(time, signal)
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
plt.show()
if __name__ == '__main__':
main()