东方耀AI技术分享

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 1439|回复: 1
打印 上一主题 下一主题

[通信原理] LFM信号经过中放的匹配滤波(时域卷积计算方式)的仿真

[复制链接]

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14449
QQ
跳转到指定楼层
楼主
发表于 2021-3-12 16:11:35 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式


  1. import numpy as np
  2. from scipy.fftpack import fft, ifft, fftshift
  3. import scipy.signal
  4. from matplotlib.pylab import mpl
  5. import matplotlib.pyplot as plt

  6. mpl.rcParams['font.sans-serif'] = ['SimHei']  # 显示中文
  7. mpl.rcParams['axes.unicode_minus'] = False  # 显示负号

  8. # LFM信号经过中放的匹配滤波(时域卷积计算方式)的仿真

  9. T = 10e-6    # 脉宽
  10. B = 25e6     # 带宽
  11. K = B/T      # 调频斜率

  12. Fs = 200e6   # 采样频率
  13. Ts = 1/Fs
  14. N = int(T/Ts)
  15. print("脉宽内采样的周期数=", N)

  16. t = np.linspace(-T/2, T/2, N)
  17. # St = np.exp(j*np.pi*K*t**2)  用欧拉公式展开
  18. St = np.exp(1j * np.pi * K * t**2)
  19. print("成功构建了复数回波LFM信号:", type(St), St.shape, St.dtype, St[:5])
  20. # a.real, a.imag, a.conjugate()
  21. print("复数的共轭:", St.conjugate())

  22. # Ht = np.exp(-j*np.pi*K*t**2)  匹配滤波器 冲击响应函数
  23. # 欧拉公式展开 exp(jx) = cos(x) + sin(x)j
  24. Ht = np.exp(-1j * np.pi * K * t**2)
  25. # Ht = St.conjugate()
  26. print("构建了匹配滤波器信号(设t0=0 共轭):是否相等=", any(Ht == St.conjugate()))

  27. # 匹配滤波后的线性调频信号   为什么是做一维卷积操作?
  28. # scipy的signal模块经常用于信号处理,卷积、傅里叶变换、各种滤波、差值算法等
  29. # 卷积定理:时域卷积 相当于 频域相乘
  30. # 脉冲压缩的DSP处理方法有时域卷积或频域相乘。
  31. # 对于点数较多的回波信号,采用频域相乘方法可以获得较快的运算速度
  32. Sot = scipy.signal.convolve(St, Ht)
  33. # scipy.signal.convolve2d()
  34. # 卷积运算大致可以分成3步,首先先翻转 然后作平移  作乘积求和
  35. # 卷积运算可以用来做大整数的乘法(数组表示数的乘法)
  36. '''
  37. 两个一维信号卷积
  38. >>> import numpy as np
  39. >>> x=np.array([1,2,3])
  40. >>> h=np.array([4,5,6])
  41. >>> import scipy.signal
  42. >>> scipy.signal.convolve(x,h) #卷积运算
  43. array([ 4, 13, 28, 27, 18])
  44. '''


  45. # 画图
  46. plt.figure(figsize=(16, 12))

  47. plt.subplot(211)
  48. # 为何乘以1e6  时间的单位变了(由秒 变 U秒)
  49. plt.plot(t*1e6, St, linestyle='-', color='blue')
  50. plt.xlabel('Time [u sec]', fontsize=16)
  51. plt.xticks()
  52. # Amplitude 振幅
  53. plt.ylabel('Amplitude', fontsize=16)
  54. plt.title("线性调频信号(LFM Chirp)", fontsize=16)

  55. plt.subplot(212)
  56. # 这里为什么要2*N-1 是因为前面做了一维卷积 数组长度变长了
  57. t1 = np.linspace(-T, T, 2*N-1)
  58. t1 = t1 * B      # 时间×带宽  统一扩大了B倍
  59. Z = np.abs(Sot)    # 振幅
  60. Z = Z / np.max(Z)   # 归一化
  61. # 真值与分贝值的转换  20log10() 电流 电压 幅值
  62. # 功率=电流×电压  只有功率是10log10()
  63. Z = 20 * np.log10(Z + 1e-6)

  64. # sinc函数也做到了 和 匹配滤波后的线性调频信号 类似的东东 不完全一样
  65. Z1 = np.abs(np.sinc(t1))    # sinc函数 与 Sot的对比
  66. # 辛克(sinc)函数
  67. Z1 = 20 * np.log10(Z1 + 1e-6)


  68. plt.plot(t1, Z, linestyle='-', color='blue', label='仿真', linewidth=1)
  69. # 将'o'代替'-'的示例  画点  散点图
  70. # plot()的markersize设为4.0,和scatter()的s设为16.0,画出的点大小相同
  71. plt.plot(t1, Z1, "o", markersize=4., color='red', label='sinc')
  72. # plt.scatter(t1, Z1, s=16., color='red', label='sinc')
  73. # 限定坐标轴的范围
  74. plt.axis([-15, 15, -50, 1])
  75. plt.xlabel('Time [sec] * B', fontsize=16)
  76. plt.ylabel('幅值是20倍,db', fontsize=16)
  77. plt.title("匹配滤波后的线性调频信号", fontsize=16)
  78. plt.legend()
  79. plt.show()




复制代码


lfm经过匹配滤波后sinc函数.png (173.26 KB, 下载次数: 150)

lfm经过匹配滤波后sinc函数.png
让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

0

主题

98

帖子

200

积分

中级会员

Rank: 3Rank: 3

积分
200
沙发
发表于 2021-11-23 19:49:49 | 只看该作者
让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|人工智能工程师的摇篮 ( 湘ICP备2020019608号-1 )

GMT+8, 2024-6-16 07:55 , Processed in 0.194138 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表