写一个2psk调制解调的代码,能够画出每一步的信号图形
时间: 2024-02-23 14:01:02 浏览: 18
好的,以下是一个2PSK调制解调的Python代码,同时也会输出每一步的信号图形:
```python
import numpy as np
import matplotlib.pyplot as plt
# 调制信号
def mod_signal(data, fc, fs):
t = np.arange(0, len(data)/fs, 1/fs) # 时间轴
carrier = np.sin(2*np.pi*fc*t) # 载波
modulated = np.zeros_like(t) # 调制信号
for i in range(len(data)):
if data[i] == 0:
modulated[i*fs//fc:(i+1)*fs//fc] = carrier[i*fs//fc:(i+1)*fs//fc]
else:
modulated[i*fs//fc:(i+1)*fs//fc] = -carrier[i*fs//fc:(i+1)*fs//fc]
return modulated, t
# 解调信号
def demod_signal(signal, fc, fs):
t = np.arange(0, len(signal)/fs, 1/fs) # 时间轴
carrier = np.sin(2*np.pi*fc*t) # 载波
demodulated = np.zeros_like(t) # 解调信号
for i in range(len(signal)):
if signal[i] >= 0:
demodulated[i] = 0
else:
demodulated[i] = 1
return demodulated, t
# 测试数据
data = np.array([0, 1, 1, 0, 1, 0, 0, 1, 0, 1])
fc = 10 # 载波频率
fs = 100 # 采样频率
# 调制
modulated, t = mod_signal(data, fc, fs)
plt.subplot(2, 1, 1)
plt.plot(t, modulated)
plt.title('Modulated Signal')
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
# 解调
demodulated, t = demod_signal(modulated, fc, fs)
plt.subplot(2, 1, 2)
plt.step(t, demodulated, where='post')
plt.ylim([-0.1, 1.1])
plt.title('Demodulated Signal')
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
plt.show()
```
运行代码后,会先输出调制信号的图形,然后输出解调信号的图形。