使用numpy绘制一个星座图,给出代码
时间: 2024-01-31 11:04:34 浏览: 143
以下是使用numpy绘制星座图的代码示例:
```python
import numpy as np
import matplotlib.pyplot as plt
# 星座点坐标
points = np.array([
[0.2, 0.4],
[0.1, 0.5],
[0.3, 0.6],
[0.4, 0.7],
[0.5, 0.8],
[0.6, 0.9],
[0.7, 0.8],
[0.8, 0.6],
[0.9, 0.5],
[0.7, 0.4],
[0.6, 0.3],
[0.4, 0.2]
])
# 绘制星座图
fig, ax = plt.subplots()
ax.scatter(points[:,0], points[:,1], marker='*', s=100, c='black')
# 设置坐标轴范围
plt.xlim(0, 1)
plt.ylim(0, 1)
# 设置坐标轴标签
plt.xlabel('X')
plt.ylabel('Y')
# 显示图像
plt.show()
```
运行以上代码后,将会绘制出一个包含12个星座点的星座图。您可以根据需要修改点的坐标、样式、颜色等参数,来绘制您自己的星座图。
相关问题
QPSK调制信号星座图生成代码
QPSK(Quadrature Phase Shift Keying,正交相移键控)是一种常用的数字调制技术,它通过将两个位(通常是I和Q分量)映射到一个二维坐标系统中的四个点来传输数据。为了生成QPSK信号的星座图,我们可以使用Python的matplotlib库来可视化。
以下是一个简单的Python代码示例,用于生成QPSK星座图:
```python
import numpy as np
import matplotlib.pyplot as plt
# 定义QPSK调制函数
def qpsk_symbols(I, Q):
symbols = [np.exp(1j * (0 * np.pi / 4, 1 * np.pi / 2, 0 * np.pi / 4, 1 * np.pi / 2)[i]) for i in range(len(I))]
return symbols[I + len(I) * Q]
# 创建随机I和Q数据
I = np.random.randint(0, 2, size=100)
Q = np.random.randint(0, 2, size=100)
# 调制并计算复数点
symbols = qpsk_symbols(I, Q)
# 绘制星座图
plt.scatter(np.real(symbols), np.imag(symbols), c='red', s=50, alpha=0.5)
plt.xlabel('In-phase (I)')
plt.ylabel('Quadrature (Q)')
plt.title('QPSK Constellation Diagram')
plt.grid(True)
plt.show()
(1)产生信源符号序列:生成40000bit的二进制符号序列,采样率为100kHz,信息速率4Kbps (2)串并转换、星座映射:把(1)的比特序列,转换为16进制符号,并按16QAM调制映射为星座(注意:先表示为10进制数,再利用qammod做星座映射),得到复基带符号。画出发送端的星座图,注意,用scatterplot函数绘制星座图。 (3)脉冲成形:平方根升余弦脉冲成形,滚降系数为0.5; 绘制脉冲成形滤波器的传输函数,标出其带宽。对(2)产生的复基带符号上采样,过脉冲成形滤波器得到复基带信号。绘制复基带信号的功率谱,标出带宽,对比基带信号带宽和符号速率。 (4)上变频:做正交调制,载波为10KHz(即,将(3)的基带信号调制到10KHz载波上)。
好的,让我来回答你的问题。
首先,根据你的要求,我可以为你生成一个40000bit的二进制符号序列,采样率为100kHz,信息速率为4Kbps。
代码如下:
```python
import numpy as np
# 生成二进制符号序列
bit_seq = np.random.randint(2, size=40000)
# 按4Kbps采样率进行采样
sample_rate = 100000
symbol_rate = 4000
num_samples_per_symbol = int(sample_rate / symbol_rate)
sampled_seq = np.repeat(bit_seq, num_samples_per_symbol)
print("生成的二进制符号序列为:", bit_seq)
```
接下来,我们将二进制符号序列转换为16进制符号,并进行16QAM调制映射,得到复基带符号,并画出发送端的星座图。
代码如下:
```python
import matplotlib.pyplot as plt
import scipy.signal as signal
# 把二进制符号序列转换为16进制符号
hex_seq = np.zeros((int(len(bit_seq) / 4),), dtype=np.int32)
for i in range(len(hex_seq)):
hex_seq[i] = bit_seq[i*4]*8 + bit_seq[i*4+1]*4 + bit_seq[i*4+2]*2 + bit_seq[i*4+3]
# 利用qammod函数进行星座映射
qam_order = 16
constellation = signal.qammod(hex_seq, qam_order)
# 绘制星座图
plt.figure()
plt.scatter(constellation.real, constellation.imag)
plt.xlabel('Real')
plt.ylabel('Imag')
plt.title('发送端星座图')
plt.show()
```
接下来,我们需要进行脉冲成形,使用平方根升余弦脉冲成形,滚降系数为0.5,并绘制脉冲成形滤波器的传输函数,标出其带宽。然后对复基带符号进行上采样,过脉冲成形滤波器得到复基带信号,并绘制复基带信号的功率谱,标出带宽,对比基带信号带宽和符号速率。
代码如下:
```python
# 平方根升余弦脉冲成形
alpha = 0.5
num_taps = 101
baudrate = symbol_rate
beta = alpha
taps = signal.firrcos(num_taps, baudrate, beta, sample_rate, window='sqrt')
# 绘制脉冲成形滤波器的传输函数
w, h = signal.freqz(taps)
plt.figure()
plt.plot(w / np.pi * sample_rate / 2, abs(h))
plt.xlabel('频率(Hz)')
plt.ylabel('幅度')
plt.title('脉冲成形滤波器传输函数')
plt.show()
# 对复基带符号进行上采样
upsampled_constellation = np.zeros((len(constellation)*num_samples_per_symbol,), dtype=complex)
upsampled_constellation[::num_samples_per_symbol] = constellation
# 过脉冲成形滤波器
tx_signal = signal.lfilter(taps, 1, upsampled_constellation)
# 绘制复基带信号的功率谱
frequencies, psd = signal.periodogram(tx_signal, sample_rate)
plt.figure()
plt.plot(frequencies, 10*np.log10(psd))
plt.xlabel('频率(Hz)')
plt.ylabel('功率谱密度(dB/Hz)')
plt.title('复基带信号功率谱密度')
plt.show()
# 计算复基带信号带宽和符号速率
_, _, _, _, bandwidth = signal.istft(taps, fs=sample_rate)
print("复基带信号带宽为:{:.2f}kHz".format(bandwidth/1000))
print("符号速率为:{}Kbps".format(symbol_rate/1000))
```
最后,我们需要对复基带信号进行正交调制,并将其上变频到10kHz载波上。
代码如下:
```python
# 正交调制
t = np.arange(len(tx_signal)) / sample_rate
i_signal = np.real(tx_signal * np.exp(1j * 2*np.pi*symbol_rate*t))
q_signal = np.imag(tx_signal * np.exp(1j * 2*np.pi*symbol_rate*t))
# 上变频到10kHz载波上
carrier_freq = 10000
tx_signal = i_signal * np.cos(2*np.pi*carrier_freq*t) - q_signal * np.sin(2*np.pi*carrier_freq*t)
```
这就是我对你提出的问题的回答。希望能对你有所帮助。
阅读全文