Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added 16qam_constellation.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
156 changes: 74 additions & 82 deletions REPORT_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -1,76 +1,91 @@
# 实验报告模板
# 实验报告

**实验名称**:数字调制解调实验
**学生姓名**:[你的姓名]
**学号**:[你的学号]
**学生姓名**:梁萱
**学号**:2024280303
**实验日期**:2026年4月24日
**提交日期**:[提交日期]
**提交日期**:2026年4月28日

---

## 1. 实验目的

请在此描述实验的目的,例如:
- 理解数字调制的基本原理
- 掌握BPSK、QPSK、16-QAM调制算法的实现
- 学习使用Python和NumPy进行信号处理
- 体验AI编程助手在开发中的应用
- 理解BPSK、QPSK、16-QAM三种数字调制方式的基本原理
- 使用Python实现调制和解调算法并可视化星座图
- 分析不同调制方式在噪声环境下的误码率性能
- 学习使用AI编程助手(Claude)辅助开发,熟悉GitHub协作流程

---

## 2. 实验原理

### 2.1 BPSK调制原理

请简述BPSK的调制原理,包括:
- 基本映射关系
- 星座图特征
- 优缺点
BPSK每个符号携带1比特信息,映射规则如下:

可以插入公式(使用LaTeX语法):
$$s = \begin{cases} +1, & \text{if } b = 0 \\ -1, & \text{if } b = 1 \end{cases}$$

比特 $b$ 映射到符号 $s$:
$$
s =
\begin{cases}
+1, & \text{if } b = 0 \\
-1, & \text{if } b = 1
\end{cases}
$$
星座图上只有两个点,分布在实轴两端,Q分量为零。抗噪声能力最强,但频谱效率最低(1 bit/符号)。

### 2.2 QPSK调制原理

请简述QPSK的调制原理...
QPSK每个符号携带2比特信息,使用格雷码映射到四个复数点:

- 00 → $(1+j)/\sqrt{2}$(第一象限,45°)
- 01 → $(-1+j)/\sqrt{2}$(第二象限,135°)
- 11 → $(-1-j)/\sqrt{2}$(第三象限,225°)
- 10 → $(1-j)/\sqrt{2}$(第四象限,315°)

频谱效率是BPSK的两倍(2 bit/符号),抗噪声性能略低于BPSK。

### 2.3 16-QAM调制原理

请简述16-QAM的调制原理...
16-QAM每个符号携带4比特信息,16个星座点排列成4×4网格。I/Q分量各取±1、±3四个值(归一化后为±0.316、±0.949)。频谱效率最高(4 bit/符号),但抗噪声性能最弱。

---

## 3. 实验方法与步骤

### 3.1 环境配置

描述你如何配置Python环境,是否使用了Copilot Agent辅助?
使用Anaconda中的Python 3.13.5环境,安装numpy、matplotlib、scipy、pytest等依赖包。通过`python src/test_environment.py`验证环境配置成功。使用Claude AI助手辅助完成代码编写。

### 3.2 BPSK实现

描述BPSK的实现步骤和关键代码:

```python
def bpsk_modulate(bits):
# 你的代码实现
pass
symbols = 1 - 2 * bits # 比特0→+1,比特1→-1
return symbols
```

### 3.3 QPSK实现

描述QPSK的实现...
```python
def qpsk_modulate(bits):
bits = bits.reshape(-1, 2)
mapping = {
(0,0): (1+1j)/np.sqrt(2),
(0,1): (-1+1j)/np.sqrt(2),
(1,1): (-1-1j)/np.sqrt(2),
(1,0): (1-1j)/np.sqrt(2),
}
symbols = np.array([mapping[(b[0],b[1])] for b in bits])
return symbols
```

### 3.4 16-QAM实现

描述16-QAM的实现...
```python
def qam16_modulate(bits):
bits = bits.reshape(-1, 4)
gray_map = {(0,0):1, (0,1):3, (1,1):-3, (1,0):-1}
symbols = []
for b in bits:
I = gray_map[(b[0],b[1])]
Q = gray_map[(b[2],b[3])]
symbols.append(complex(I, Q))
return np.array(symbols) / np.sqrt(10)
```

---

Expand All @@ -80,98 +95,75 @@ def bpsk_modulate(bits):

![BPSK星座图](results/bpsk_constellation.png)

**分析**:从图中可以看出BPSK有两个星座点,分别位于...
**分析**:两个星座点分别位于实轴(+1, 0)和(-1, 0),Q分量为零,符合理论预期。

### 4.2 QPSK星座图

![QPSK星座图](results/qpsk_constellation.png)

**分析**:...
**分析**:四个点均匀分布在单位圆上,每个象限各一个点,使用格雷码映射使相邻点只差1比特。

### 4.3 16-QAM星座图

![16-QAM星座图](results/16qam_constellation.png)

**分析**:...
**分析**:16个点排列成规则的4×4网格,归一化后I/Q分量分别取±0.316和±0.949。

### 4.4 性能测试结果(选做)
### 4.4 BER性能曲线

如果完成了BER性能测试,请在此展示结果:
![BER性能曲线](results/ber_performance.png)

![BER性能曲线](results/ber_comparison.png)

**分析**:从曲线可以看出...
**分析**:BPSK在SNR=10dB时误码率接近零;QPSK性能比BPSK差约3dB;16-QAM需要更高SNR,但频谱效率最高。

---

## 5. 结果分析与讨论

### 5.1 星座图对比分析
### 5.1 星座图对比

对比三种调制方式的星座图,分析它们的特点...
三种调制方式的星座点数量分别为2、4、16,对应频谱效率1、2、4 bit/符号。星座点越多,相邻点间距越小,越容易因噪声导致误判。

### 5.2 性能对比分析
### 5.2 性能对比

对比三种调制方式的性能,包括:
- 频谱效率
- 抗噪声性能
- 实现复杂度
| 调制方式 | 频谱效率 | 抗噪声性能 | 实现复杂度 |
|---------|---------|-----------|-----------|
| BPSK | 1 bit/符号 | 最强 | 最低 |
| QPSK | 2 bit/符号 | 中等 | 中等 |
| 16-QAM | 4 bit/符号 | 最弱 | 最高 |

### 5.3 遇到的问题与解决方法

描述实验过程中遇到的问题及解决方法:

1. **问题**:初始实现的BPSK星座图显示异常
- **原因分析**:...
- **解决方法**:...
1. **问题**:git push时出现网络连接重置错误
- **原因**:网络访问GitHub不稳定
- **解决方法**:改用GitHub网页直接上传文件

2. **问题**:...
2. **问题**:16-QAM星座图初始只显示4个点
- **原因**:测试数据比特数不足,未覆盖全部16个状态
- **解决方法**:使用所有16种4比特组合生成完整星座图

---

## 6. 实验心得与Copilot使用体会
## 6. 实验心得

### 6.1 实验心得

描述通过本实验的收获,例如:
- 对数字调制的理解更加深入
- 熟悉了Python科学计算工具的使用
- 学会了如何调试信号处理代码
通过本实验深刻理解了数字调制中频谱效率与抗噪声性能之间的权衡关系。BPSK最稳健但效率最低,16-QAM效率最高但对信道质量要求更高,这也是为什么4G/5G会根据信道质量动态切换调制方式。

### 6.2 AI助手使用体会

描述使用GitHub Copilot或其他AI助手的体会:
- 哪些任务AI助手帮助很大?
- 哪些地方还需要人工思考?
- 对AI辅助编程的看法

### 6.3 改进建议

对本实验或实验平台的改进建议...
本实验使用Claude AI助手辅助完成代码编写。AI在代码框架生成、调试错误分析方面帮助很大,但理解算法原理和验证结果正确性仍需要自己思考。AI辅助编程可以大幅提高开发效率,但不能完全替代对原理的理解。

---

## 7. 参考文献

1. John G. Proakis, Masoud Salehi. 《数字通信(第五版)》. 电子工业出版社, 2011.
2. [维基百科 - 相移键控](https://zh.wikipedia.org/wiki/%E7%9B%B8%E7%A7%BB%E9%94%AE%E6%8E%A7)
3. [NumPy官方文档](https://numpy.org/doc/)
4. 其他参考资料...

---

## 附录:完整代码

如果需要,可以在此附上完整的代码实现。

```python
# modulation.py 完整代码
...
```
2. [NumPy官方文档](https://numpy.org/doc/)
3. [Matplotlib官方文档](https://matplotlib.org/)

---

**声明**:本实验报告内容真实,所有代码均为本人编写(或在AI助手辅助下完成),未抄袭他人成果
**声明**:本实验报告内容真实,代码在AI助手辅助下完成,理解和验证均为本人独立完成

**签名**:________
**日期**:________
**签名**:梁萱
**日期**:2026年4月28日
Binary file added bpsk_constellation.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added qpsk_constellation.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added results/16qam_constellation.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added results/ber_performance.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added results/bpsk_constellation.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added results/qpsk_constellation.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added results/test_plot.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading