plotting.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import numpy as np
  2. def plot_time_domain(axis, time_axis_ns, data, channels) -> None:
  3. """
  4. Построение временной зависимости.
  5. axis : matplotlib.axes.Axes
  6. time_axis_ns: numpy.ndarray (в наносекундах)
  7. data : 2D-массив [N, num_channels]
  8. channels : список названий каналов, например ["Channel A", "Channel B"]
  9. """
  10. axis.clear()
  11. for idx, label in enumerate(channels):
  12. y = data[:, idx]
  13. axis.plot(time_axis_ns, y, label=label)
  14. axis.set_xlabel("Time (ns)")
  15. axis.set_ylabel("Amplitude (V)")
  16. axis.legend(loc="best")
  17. axis.grid(True)
  18. axis.figure.canvas.draw()
  19. def plot_spectrum(axis, frequency, data, channels, middle_frequency) -> None:
  20. """
  21. Построение спектра.
  22. frequency (MHz), data.shape = (N, num_channels)
  23. channels — список названий каналов (["Channel A", "Channel B", ...])
  24. middle_frequency (MHz) — центральная частота для отметки
  25. """
  26. axis.clear()
  27. for idx, label in enumerate(channels):
  28. y = data[:, idx]
  29. Y = np.fft.fft(y)
  30. spectrum = np.abs(Y)
  31. axis.plot(frequency, spectrum, label=label)
  32. if middle_frequency != 0.0:
  33. axis.axvline(x=middle_frequency, color='red', linestyle='--', label="Center Freq")
  34. axis.set_xlabel("Frequency (MHz)")
  35. axis.set_ylabel("Magnitude (r.u.)")
  36. axis.legend(loc="best")
  37. axis.grid(True)
  38. axis.figure.canvas.draw()
  39. def plot_demodulated_time_domain(ax, time_ns, demod_data, selected_channels) -> None:
  40. """
  41. Отрисовка демодулированного сигнала (I-компонент).
  42. ax : matplotlib.axes.Axes
  43. time_ns : вектор времени (нс) после децимации
  44. demod_data : комплексный массив [N, num_channels], где каждая колонка — выбранный канал
  45. selected_channels : список названий каналов, например ["Channel A", "Channel C", ...]
  46. """
  47. ax.clear()
  48. for idx, ch_label in enumerate(selected_channels):
  49. y_i = np.real(demod_data[:, idx])
  50. ax.plot(time_ns, y_i, label=f"{ch_label} (I)")
  51. ax.set_xlabel("Time after decimation (ns)")
  52. ax.set_ylabel("Amplitude (V)")
  53. ax.legend(loc="best")
  54. ax.grid(True)
  55. ax.figure.canvas.draw()