|
发表于 2023-9-14 20:43:53
|
显示全部楼层
本楼为最佳答案
 在Python中,可以使用NumPy和SciPy库来实现正弦信号的调制和解调。
调制:
调制是将一个低频信号(称为基带信号)转换为高频信号(称为载波信号)的过程。在Python中,我们可以使用NumPy库来生成基带信号和载波信号,然后将它们相乘以进行调制。
以下是一个示例代码,演示如何生成基带信号和载波信号,并将它们相乘以进行调制:
- import numpy as np
- import matplotlib.pyplot as plt
- # 生成基带信号
- Fs = 1000 # 采样率
- t = np.arange(0, 1, 1/Fs) # 时间向量
- f = 10 # 基带信号频率
- baseband_signal = np.sin(2*np.pi*f*t)
- # 生成载波信号
- Fc = 100 # 载波信号频率
- carrier_signal = np.sin(2*np.pi*Fc*t)
- # 进行调制
- modulated_signal = baseband_signal * carrier_signal
- # 绘制信号图形
- plt.subplot(3, 1, 1)
- plt.plot(t, baseband_signal)
- plt.title('Baseband Signal')
- plt.subplot(3, 1, 2)
- plt.plot(t, carrier_signal)
- plt.title('Carrier Signal')
- plt.subplot(3, 1, 3)
- plt.plot(t, modulated_signal)
- plt.title('Modulated Signal')
- plt.tight_layout()
- plt.show()
复制代码
解调:
解调是将调制信号转换回原始基带信号的过程。在Python中,我们可以使用SciPy库中的解调函数来实现解调。
以下是一个示例代码,演示如何使用SciPy库中的解调函数对调制信号进行解调:
- import numpy as np
- import matplotlib.pyplot as plt
- from scipy.signal import hilbert
- # 生成调制信号
- Fs = 1000 # 采样率
- t = np.arange(0, 1, 1/Fs) # 时间向量
- f = 10 # 基带信号频率
- baseband_signal = np.sin(2*np.pi*f*t)
- Fc = 100 # 载波信号频率
- carrier_signal = np.sin(2*np.pi*Fc*t)
- modulated_signal = baseband_signal * carrier_signal
- # 进行解调
- analytic_signal = hilbert(modulated_signal)
- amplitude_envelope = np.abs(analytic_signal)
- demodulated_signal = np.unwrap(np.angle(analytic_signal))
- # 绘制信号图形
- plt.subplot(4, 1, 1)
- plt.plot(t, baseband_signal)
- plt.title('Baseband Signal')
- plt.subplot(4, 1, 2)
- plt.plot(t, carrier_signal)
- plt.title('Carrier Signal')
- plt.subplot(4, 1, 3)
- plt.plot(t, modulated_signal)
- plt.title('Modulated Signal')
- plt.subplot(4, 1, 4)
- plt.plot(t, demodulated_signal)
- plt.title('Demodulated Signal')
- plt.tight_layout()
- plt.show()
复制代码
在上面的代码中,我们使用了SciPy库中的hilbert函数来生成解调信号的解析信号。然后,我们计算解析信号的幅度包络和相位角,并使用unwrap函数来处理相位角,以获得解调信号。 |
|