service.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. import json
  2. import uhd
  3. import numpy as np
  4. from dto.response_dto import ResponseDTO
  5. from model.surveillance_radar import SurveillanceRadar
  6. from model.jammer_radar import JammerRadar
  7. # 初始化侦查雷达
  8. # surveillance_radar = SurveillanceRadar(usrp,rx=CHANNEL_1,tx=CHANNEL_1)
  9. # Jammer_radar = JammerRadar(usrp,rx=CHANNEL_2,tx=CHANNEL_2)
  10. # 定义一组通道常量
  11. CHANNEL_1 = 0
  12. CHANNEL_2 = 1
  13. CHANNEL_3 = 2
  14. CHANNEL_4 = 3
  15. # 定义干扰策略集合,确保集合中的元素为合法的字符串常量
  16. JAMMING_POLICY = {
  17. "噪声调频", "噪声调幅", "噪声直放", "速度多假目标", "距离多假目标"
  18. }
  19. ANTI_JAMMING_POLICY = {
  20. "频率捷变", "波形捷变", "自适应极化滤波"
  21. }
  22. # 定义一个USRP对象
  23. usrp = None
  24. # 初始化USRP设备对象
  25. def initialize_usrp():
  26. # try:
  27. # usrp = uhd.usrp.MultiUSRP()
  28. # usrp.close()
  29. # print('------SDR Devices initialize success!------')
  30. return ResponseDTO.SUCCESS({"status": 1}).to_json()
  31. # except Exception as e:
  32. # print('SDR设备异常', e)
  33. # return ResponseDTO.ERROR_MS_DATA('SDR设备异常',{"status": 0,
  34. # "Error": str(e)}).to_json()
  35. # 获取SDR状态
  36. def getSDRStatus():
  37. # try:
  38. # samples = usrp.recv_num_samps(10000, 100e6, 1e6, [0], 50) # 单位: 需要接收的采样点总数(无单位), Hz, Hz, channel IDs 的列表, dB
  39. return ResponseDTO.SUCCESS({"status": 1}).to_json()
  40. # except Exception as e:
  41. # print('SDR设备异常', e)
  42. # return ResponseDTO.ERROR_MS_DATA('SDR设备异常', {"status": 0,
  43. # "Error": str(e)}).to_json()
  44. # 关闭USRP设备对象
  45. def close_usrp():
  46. try:
  47. usrp.close()
  48. print('------SDR Devices close success!------')
  49. except RuntimeError as e:
  50. print('SDR设备异常', e)
  51. def data(payload):
  52. jamming_policy = payload['jamming_policy']
  53. anti_jamming_policy = payload['anti_jamming_policy']
  54. # 判断策略是否合法
  55. if jamming_policy not in JAMMING_POLICY or anti_jamming_policy not in ANTI_JAMMING_POLICY:
  56. return ResponseDTO.ERROR_MS_DATA('策略不合法', {"status": 0,
  57. "Error": "策略不合法"}).to_json()
  58. #打印对应策略
  59. print(' jamming_policy:', jamming_policy)
  60. print(' anti_jamming_policy:', anti_jamming_policy)
  61. #生成两个长度为一百的浮点数组,代表侦察信号和返回的信号,数组元素随机
  62. surveillance_signal = np.random.randn(100);
  63. surveillance_signal_back = np.random.randn(100);
  64. #返回结果
  65. return ResponseDTO.SUCCESS({"jamming_signal": surveillance_signal.tolist(),
  66. "anti_jamming_signal": surveillance_signal_back.tolist()}).to_json()
  67. def send():
  68. # # 设置中心频率、采样率和增益
  69. # center_freq = 100e6 # 2.4 GHz
  70. # sample_rate = 1e6 # 1 MS/s
  71. # duration = 10 # 以秒为单位
  72. # gain = 20 # [dB] 建议一开始设置小一点,按照实际情况调整
  73. # # 生成发送信号
  74. # num_samples = 1
  75. # tx_signal = np.random.randn(num_samples) + 0.1j * np.random.randn(num_samples) # 修复部分
  76. #
  77. # # 发送信号
  78. # usrp.send_waveform(tx_signal, duration, center_freq, sample_rate, [0], gain)
  79. #
  80. # # 接收信号
  81. # rx_signal = usrp.recv_num_samps(num_samples, center_freq,sample_rate)
  82. # print('信号已发送:')
  83. # print(rx_signal)
  84. # print('信号已接收')
  85. # return {
  86. # "rx_signal": rx_signal.tolist()
  87. # }
  88. return {
  89. "rx_signal": [1,2,3,4,5,6,7,8,9,10]
  90. }
  91. def demo():
  92. # 设置中心频率、采样率和增益
  93. center_freq = 100e6 # 2.4 GHz
  94. sample_rate = 1e6 # 1 MS/s
  95. duration = 10 # 以秒为单位
  96. gain = 20 # [dB] 建议一开始设置小一点,按照实际情况调整
  97. # 生成发送信号
  98. num_samples = 100
  99. tx_signal = np.random.randn(num_samples) + 0.1j * np.random.randn(num_samples) # 修复部分
  100. # 发送信号
  101. usrp.send_waveform(tx_signal, duration, center_freq, sample_rate, [0], gain)
  102. # 接收信号
  103. rx_signal = usrp.recv_num_samps(num_samples, center_freq,sample_rate)
  104. print('信号已发送:')
  105. # 将复数数组转换为字符串数组
  106. rx_signal_str = [str(s) for s in rx_signal]
  107. print(rx_signal_str)
  108. print('信号已接收')
  109. return {
  110. "rx_signal": rx_signal_str
  111. }
  112. # 获取SDR状态,如果状态正常,则返回True,否则返回False
  113. #main方法
  114. if __name__ == '__main__':
  115. demo()