From 496d26455bd37d3f7ba4282bda134e68889b8b05 Mon Sep 17 00:00:00 2001 From: LIORA1010 <1146898735@qq.com> Date: Tue, 28 Apr 2026 15:07:06 +0800 Subject: [PATCH 1/7] Implement BPSK, QPSK, and 16-QAM modulation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 梁萱 2024280303 完成任务1-3 --- src/modulation.py | 286 ++++++++++++---------------------------------- 1 file changed, 72 insertions(+), 214 deletions(-) diff --git a/src/modulation.py b/src/modulation.py index a8b5581..3c4311f 100644 --- a/src/modulation.py +++ b/src/modulation.py @@ -1,231 +1,89 @@ -""" -数字调制模块 -实现BPSK、QPSK、16-QAM调制算法 -""" - import numpy as np -from utils import plot_constellation - +import matplotlib.pyplot as plt +import os def bpsk_modulate(bits): """ - BPSK (Binary Phase Shift Keying) 调制 - - 任务要求: - - 输入:二进制比特序列(NumPy数组),元素为0或1 - - 输出:调制后的复数符号序列 - - 映射规则: - 比特 0 → 符号 +1 - 比特 1 → 符号 -1 - - 参数: - bits: 二进制比特数组,例如 np.array([0, 1, 0, 1, 1, 0]) - - 返回: - symbols: 复数符号数组,例如 np.array([1, -1, 1, -1, -1, 1]) - - 提示: - - 使用NumPy的数组运算可以很简洁地实现映射 - - 可以使用条件表达式或数学运算来完成转换 - - BPSK符号实际上是实数,但为了统一接口返回复数类型 - - 示例: - >>> bits = np.array([0, 1, 0, 1]) - >>> symbols = bpsk_modulate(bits) - >>> print(symbols) - [ 1.+0.j -1.+0.j 1.+0.j -1.+0.j] + BPSK 调制 + 参数: bits: numpy.ndarray, 二进制序列 [0, 1, 0, 1, ...] + 返回: symbols: numpy.ndarray, 调制符号 [+1, -1, +1, -1, ...] """ - - # TODO: 在这里实现BPSK调制 - # 提示:可以尝试以下方式之一: - # 方法1: 使用 np.where() - # 方法2: 使用数学运算 1 - 2*bits - # 方法3: 使用字典映射 - - # 你的代码: - raise NotImplementedError("请实现BPSK调制函数") - - # return symbols - + symbols = 1 - 2 * bits # 比特0→+1,比特1→-1 + return symbols def qpsk_modulate(bits): """ - QPSK (Quadrature Phase Shift Keying) 调制 - - 任务要求: - - 输入:二进制比特序列(长度必须是2的倍数) - - 输出:调制后的复数符号序列 - - 每2个比特映射到1个符号(格雷码映射): - 00 → (1+1j)/√2 (第一象限,45°) - 01 → (-1+1j)/√2 (第二象限,135°) - 11 → (-1-1j)/√2 (第三象限,225°) - 10 → (1-1j)/√2 (第四象限,315°) - - 参数: - bits: 二进制比特数组,长度必须是偶数 - - 返回: - symbols: 复数符号数组,长度是bits的一半 - - 提示: - - 先将比特序列按2个一组进行分组 - - 可以使用reshape: bits.reshape(-1, 2) - - 符号的幅度应该归一化到单位功率:除以√2 - - 格雷码可以避免相邻星座点之间有多个比特差异 - - 示例: - >>> bits = np.array([0, 0, 0, 1, 1, 1, 1, 0]) - >>> symbols = qpsk_modulate(bits) - >>> print(symbols) - [ 0.707+0.707j -0.707+0.707j -0.707-0.707j 0.707-0.707j] + QPSK 调制 + 参数: bits: numpy.ndarray, 二进制序列(长度为偶数) + 返回: symbols: numpy.ndarray, 复数符号序列 """ - - # 检查输入长度 - if len(bits) % 2 != 0: - raise ValueError("QPSK要求比特序列长度为偶数") - - # TODO: 在这里实现QPSK调制 - # 提示步骤: - # 1. 将比特序列reshape成(N/2, 2)的形状 - # 2. 对每一对比特,根据格雷码映射生成对应的复数符号 - # 3. 别忘了归一化:除以√2使符号功率为1 - - # 你的代码: - raise NotImplementedError("请实现QPSK调制函数") - - # return symbols - + bits = bits.reshape(-1, 2) # 每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 def qam16_modulate(bits): """ - 16-QAM (16-Quadrature Amplitude Modulation) 调制 - - 任务要求: - - 输入:二进制比特序列(长度必须是4的倍数) - - 输出:调制后的复数符号序列 - - 每4个比特映射到1个符号 - - I路和Q路分量取值:{-3, -1, +1, +3} - - 使用格雷码映射(推荐) - - 参数: - bits: 二进制比特数组,长度必须是4的倍数 - - 返回: - symbols: 复数符号数组,长度是bits的四分之一 - - 提示: - - 16-QAM有16个星座点,排列成4×4的方格 - - 可以将4个比特分成两组:前2位决定I分量,后2位决定Q分量 - - I/Q分量的映射(格雷码): - 00 → +3 - 01 → +1 - 11 → -1 - 10 → -3 - - 需要对星座图进行功率归一化 - - 平均功率 = (3²+1²+1²+3²)/4 = 5,归一化因子 = √10 - - 示例: - >>> bits = np.array([0, 0, 0, 0, 0, 1, 0, 1]) - >>> symbols = qam16_modulate(bits) - # 应该得到两个符号在正确位置 + 16-QAM 调制 + 参数: bits: numpy.ndarray, 二进制序列(长度为4的倍数) + 返回: symbols: numpy.ndarray, 复数符号序列 """ - - # 检查输入长度 - if len(bits) % 4 != 0: - raise ValueError("16-QAM要求比特序列长度为4的倍数") - - # TODO: 在这里实现16-QAM调制 - # 提示步骤: - # 1. 将比特序列reshape成(N/4, 4)的形状 - # 2. 对每组4个比特: - # - 前2位映射到I分量(实部) - # - 后2位映射到Q分量(虚部) - # 3. 使用格雷码映射:00→+3, 01→+1, 11→-1, 10→-3 - # 4. 归一化:除以√10使平均功率为1 - - # 格雷码映射字典(可选使用) - gray_map = { - (0, 0): 3, - (0, 1): 1, - (1, 1): -1, - (1, 0): -3 - } - - # 你的代码: - raise NotImplementedError("请实现16-QAM调制函数") - - # return symbols + bits = bits.reshape(-1, 4) # 每4比特一组 + # 格雷码映射 2比特→I或Q分量 + 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)) + symbols = np.array(symbols) / np.sqrt(10) # 归一化 + return symbols +def plot_constellation(symbols, title, filename): + """绘制星座图""" + os.makedirs('results', exist_ok=True) + plt.figure(figsize=(6, 6)) + plt.scatter(np.real(symbols), np.imag(symbols), + s=100, alpha=0.6, edgecolors='blue') + plt.grid(True, alpha=0.3) + plt.xlabel('In-phase (I)', fontsize=12) + plt.ylabel('Quadrature (Q)', fontsize=12) + plt.title(title, fontsize=14, fontweight='bold') + plt.axis('equal') + plt.axhline(y=0, color='k', linewidth=0.5) + plt.axvline(x=0, color='k', linewidth=0.5) + plt.savefig(filename, dpi=150, bbox_inches='tight') + plt.close() + print(f"✅ 星座图已保存到: {filename}") -def test_modulation(): - """ - 测试调制函数并生成星座图 - """ - print("=" * 50) - print("数字调制测试") - print("=" * 50) - - # 测试BPSK - print("\n1. 测试BPSK调制...") - try: - bits_bpsk = np.random.randint(0, 2, 1000) - symbols_bpsk = bpsk_modulate(bits_bpsk) - print(f" 输入比特数: {len(bits_bpsk)}") - print(f" 输出符号数: {len(symbols_bpsk)}") - print(f" 唯一符号: {np.unique(symbols_bpsk)}") - - # 绘制星座图 - plot_constellation(symbols_bpsk[:100], - "BPSK星座图", - "bpsk_constellation.png") - print(" ✅ BPSK测试通过") - except NotImplementedError: - print(" ⏸️ BPSK尚未实现") - except Exception as e: - print(f" ❌ BPSK测试失败: {e}") - - # 测试QPSK - print("\n2. 测试QPSK调制...") - try: - bits_qpsk = np.random.randint(0, 2, 1000) - symbols_qpsk = qpsk_modulate(bits_qpsk) - print(f" 输入比特数: {len(bits_qpsk)}") - print(f" 输出符号数: {len(symbols_qpsk)}") - print(f" 符号幅度: {np.abs(symbols_qpsk[:4])}") - - # 绘制星座图 - plot_constellation(symbols_qpsk[:200], - "QPSK星座图", - "qpsk_constellation.png") - print(" ✅ QPSK测试通过") - except NotImplementedError: - print(" ⏸️ QPSK尚未实现") - except Exception as e: - print(f" ❌ QPSK测试失败: {e}") - - # 测试16-QAM - print("\n3. 测试16-QAM调制...") - try: - bits_qam = np.random.randint(0, 2, 1000) - symbols_qam = qam16_modulate(bits_qam) - print(f" 输入比特数: {len(bits_qam)}") - print(f" 输出符号数: {len(symbols_qam)}") - print(f" 唯一符号数量: {len(np.unique(symbols_qam))}") - - # 绘制星座图 - plot_constellation(symbols_qam[:250], - "16-QAM星座图", - "16qam_constellation.png") - print(" ✅ 16-QAM测试通过") - except NotImplementedError: - print(" ⏸️ 16-QAM尚未实现") - except Exception as e: - print(f" ❌ 16-QAM测试失败: {e}") - - print("\n" + "=" * 50) - print("测试完成!请检查results/目录中的星座图。") - print("=" * 50) +if __name__ == '__main__': + print("=== 测试 BPSK 调制 ===") + bits_bpsk = np.array([0, 1, 0, 1, 1, 0, 0, 1]) + symbols_bpsk = bpsk_modulate(bits_bpsk) + print(f"输入比特: {bits_bpsk}") + print(f"输出符号: {symbols_bpsk}") + plot_constellation(symbols_bpsk, 'BPSK Constellation', + 'results/bpsk_constellation.png') + print("\n=== 测试 QPSK 调制 ===") + bits_qpsk = np.array([0, 0, 0, 1, 1, 1, 1, 0]) + symbols_qpsk = qpsk_modulate(bits_qpsk) + print(f"输入比特: {bits_qpsk}") + print(f"输出符号: {symbols_qpsk}") + plot_constellation(symbols_qpsk, 'QPSK Constellation', + 'results/qpsk_constellation.png') -if __name__ == "__main__": - test_modulation() + print("\n=== 测试 16-QAM 调制 ===") + bits_qam = np.array([0,0,0,0, 0,1,0,1, 1,1,1,1, 1,0,1,0]) + symbols_qam = qam16_modulate(bits_qam) + print(f"输入比特: {bits_qam}") + print(f"输出符号: {symbols_qam}") + plot_constellation(symbols_qam, '16-QAM Constellation', + 'results/16qam_constellation.png') + + print("\n✅ 全部完成!请检查 results/ 文件夹查看星座图。") From a507852cbe32f3b4cc9c3e9fb525401ae61ad21e Mon Sep 17 00:00:00 2001 From: LIORA1010 <1146898735@qq.com> Date: Tue, 28 Apr 2026 15:13:20 +0800 Subject: [PATCH 2/7] Add files via upload MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 梁萱 2024280303 上传星座图 --- 16qam_constellation.png | Bin 0 -> 40161 bytes bpsk_constellation.png | Bin 0 -> 37307 bytes qpsk_constellation.png | Bin 0 -> 32785 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 16qam_constellation.png create mode 100644 bpsk_constellation.png create mode 100644 qpsk_constellation.png diff --git a/16qam_constellation.png b/16qam_constellation.png new file mode 100644 index 0000000000000000000000000000000000000000..eb77b87bb92a26358d73d26f0050215cb2804c3e GIT binary patch literal 40161 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

*AP}se5{T|`aufrI6k)T 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 XQd%bXj3jHAhye7o^|ct=to{EBBi&He literal 0 HcmV?d00001 diff --git a/qpsk_constellation.png b/qpsk_constellation.png new file mode 100644 index 0000000000000000000000000000000000000000..c514756e82599787bc0763d105b606745e7e4fd0 GIT binary patch literal 32785 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 J%Ekky{tM3dl4Ae> literal 0 HcmV?d00001 From 6eedfaa9bd8a78e5e844358b363f381ccba9b411 Mon Sep 17 00:00:00 2001 From: LIORA1010 <1146898735@qq.com> Date: Tue, 28 Apr 2026 15:19:19 +0800 Subject: [PATCH 3/7] Add files via upload MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 梁萱 2024280303 上传星座图 --- results/16qam_constellation.png | Bin 0 -> 40967 bytes results/bpsk_constellation.png | Bin 0 -> 37307 bytes results/qpsk_constellation.png | Bin 0 -> 32785 bytes results/test_plot.png | Bin 0 -> 15595 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 results/16qam_constellation.png create mode 100644 results/bpsk_constellation.png create mode 100644 results/qpsk_constellation.png create mode 100644 results/test_plot.png diff --git a/results/16qam_constellation.png b/results/16qam_constellation.png new file mode 100644 index 0000000000000000000000000000000000000000..0f88b2825b14b691e75232e7e93056f83c399ad1 GIT binary patch literal 40967 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 Zf>rY=&yBFP?o;|2^=;a!nOpXr`Y-!?J@Ehl literal 0 HcmV?d00001 diff --git a/results/bpsk_constellation.png b/results/bpsk_constellation.png new file mode 100644 index 0000000000000000000000000000000000000000..164a52924bf03a43889c2019f0461323a0c0bb83 GIT binary patch literal 37307 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

*AP}se5{T|`aufrI6k)T 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 XQd%bXj3jHAhye7o^|ct=to{EBBi&He literal 0 HcmV?d00001 diff --git a/results/qpsk_constellation.png b/results/qpsk_constellation.png new file mode 100644 index 0000000000000000000000000000000000000000..c514756e82599787bc0763d105b606745e7e4fd0 GIT binary patch literal 32785 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 J%Ekky{tM3dl4Ae> literal 0 HcmV?d00001 diff --git a/results/test_plot.png b/results/test_plot.png new file mode 100644 index 0000000000000000000000000000000000000000..696d7451af49f13fcf542352bf0e0789845df62c GIT binary patch literal 15595 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 WPm_95VQ_M|&}v%evd>((^S=Pjxh?nr literal 0 HcmV?d00001 From 758c746172f26ca5aab6ad82b54869adc7349a32 Mon Sep 17 00:00:00 2001 From: LIORA1010 <1146898735@qq.com> Date: Tue, 28 Apr 2026 15:31:50 +0800 Subject: [PATCH 4/7] Update performance_test.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 第5题 修改 --- src/performance_test.py | 188 ++++++++++------------------------------ 1 file changed, 45 insertions(+), 143 deletions(-) diff --git a/src/performance_test.py b/src/performance_test.py index a3aa0a9..6616576 100644 --- a/src/performance_test.py +++ b/src/performance_test.py @@ -1,145 +1,47 @@ -""" -性能测试模块 -测试调制解调系统在不同SNR下的BER性能(选做) -""" - import numpy as np +import matplotlib.pyplot as plt +import os +import sys +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) from modulation import bpsk_modulate, qpsk_modulate, qam16_modulate -from demodulation import bpsk_demodulate, qpsk_demodulate, qam16_demodulate -from utils import add_awgn, calculate_ber, plot_ber_curve, generate_random_bits - - -def test_ber_performance(modulation_scheme='BPSK', num_bits=10000, snr_range=None): - """ - 测试指定调制方式的BER性能 - - 参数: - modulation_scheme: 'BPSK', 'QPSK', 或 '16QAM' - num_bits: 用于测试的比特数量 - snr_range: SNR范围(dB),例如 np.arange(0, 16, 2) - - 返回: - snr_db: SNR值数组 - ber_values: 对应的BER值数组 - """ - - if snr_range is None: - snr_range = np.arange(0, 16, 2) # 0, 2, 4, ..., 14 dB - - ber_values = [] - - print(f"\n测试 {modulation_scheme} 性能...") - print(f"比特数: {num_bits}, SNR范围: {snr_range[0]}~{snr_range[-1]} dB") - print("-" * 40) - - # 选择调制/解调函数 - if modulation_scheme == 'BPSK': - modulate_func = bpsk_modulate - demodulate_func = bpsk_demodulate - elif modulation_scheme == 'QPSK': - modulate_func = qpsk_modulate - demodulate_func = qpsk_demodulate - elif modulation_scheme == '16QAM': - modulate_func = qam16_modulate - demodulate_func = qam16_demodulate - else: - raise ValueError(f"不支持的调制方式: {modulation_scheme}") - - # 对每个SNR值进行测试 - for snr_db in snr_range: - # TODO: 完成性能测试的主循环 - # 提示步骤: - # 1. 生成随机比特序列 - # 2. 调制 - # 3. 添加AWGN噪声 - # 4. 解调 - # 5. 计算BER - # 6. 将BER添加到ber_values列表 - - # 你的代码: - bits_tx = generate_random_bits(num_bits) - symbols = modulate_func(bits_tx) - symbols_rx = add_awgn(symbols, snr_db) - bits_rx = demodulate_func(symbols_rx) - ber = calculate_ber(bits_tx, bits_rx) - - ber_values.append(ber) - print(f"SNR = {snr_db:2d} dB, BER = {ber:.6f}") - - return snr_range, np.array(ber_values) - - -def compare_modulations(): - """ - 比较不同调制方式的性能 - 绘制BER对比曲线 - """ - - print("=" * 50) - print("数字调制性能对比测试") - print("=" * 50) - - snr_range = np.arange(0, 16, 2) - - # TODO: 测试各种调制方式并绘制对比图 - # 提示: - # 1. 分别测试BPSK、QPSK、16-QAM - # 2. 收集所有的BER数据 - # 3. 在一张图上绘制多条曲线 - - try: - # 测试BPSK - snr_bpsk, ber_bpsk = test_ber_performance('BPSK', num_bits=10000, snr_range=snr_range) - - # 测试QPSK - snr_qpsk, ber_qpsk = test_ber_performance('QPSK', num_bits=10000, snr_range=snr_range) - - # 测试16-QAM - snr_qam, ber_qam = test_ber_performance('16QAM', num_bits=10000, snr_range=snr_range) - - # 绘制对比图 - import matplotlib.pyplot as plt - import os - - plt.figure(figsize=(10, 6)) - plt.semilogy(snr_bpsk, ber_bpsk, 'b-o', label='BPSK', linewidth=2) - plt.semilogy(snr_qpsk, ber_qpsk, 'r-s', label='QPSK', linewidth=2) - plt.semilogy(snr_qam, ber_qam, 'g-^', label='16-QAM', linewidth=2) - - plt.xlabel('SNR (dB)', fontsize=12) - plt.ylabel('Bit Error Rate (BER)', fontsize=12) - plt.title('数字调制方式性能对比', fontsize=14, fontweight='bold') - plt.legend(fontsize=11) - plt.grid(True, which='both', alpha=0.3) - - os.makedirs('results', exist_ok=True) - filepath = os.path.join('results', 'ber_comparison.png') - plt.savefig(filepath, dpi=300, bbox_inches='tight') - print(f"\n✅ 性能对比图已保存到: {filepath}") - - plt.close() - - except NotImplementedError as e: - print(f"\n⏸️ 部分函数尚未实现: {e}") - except Exception as e: - print(f"\n❌ 测试失败: {e}") - - print("\n" + "=" * 50) - - -def main(): - """ - 主测试函数 - """ - # 你可以选择运行单个调制方式测试或对比测试 - - # 选项1: 测试单个调制方式 - # snr_range, ber_values = test_ber_performance('BPSK', num_bits=10000) - # plot_ber_curve(snr_range, ber_values, title="BPSK BER性能", filename="bpsk_ber.png") - - # 选项2: 对比测试(推荐) - compare_modulations() - - -if __name__ == "__main__": - main() +from demodulation import bpsk_demodulate, qpsk_demodulate, qam16_demodulate, calculate_ber + +def simulate_ber(modulate_fn, demodulate_fn, snr_db_range, num_bits=10000): + ber_list = [] + for snr_db in snr_db_range: + bits = np.random.randint(0, 2, num_bits) + symbols = modulate_fn(bits) + # 添加AWGN噪声 + snr_linear = 10 ** (snr_db / 10) + noise_std = 1 / np.sqrt(2 * snr_linear) + noise = noise_std * (np.random.randn(*symbols.shape) + 1j * np.random.randn(*symbols.shape)) + rx_symbols = symbols + noise + rx_bits = demodulate_fn(rx_symbols) + ber = calculate_ber(bits[:len(rx_bits)], rx_bits) + ber_list.append(max(ber, 1e-6)) + return ber_list + +if __name__ == '__main__': + snr_range = np.arange(0, 16, 1) + os.makedirs('results', exist_ok=True) + + print("正在仿真BPSK...") + ber_bpsk = simulate_ber(bpsk_modulate, bpsk_demodulate, snr_range) + print("正在仿真QPSK...") + bits_qpsk = lambda n: np.random.randint(0,2,n//2*2) + ber_qpsk = simulate_ber(lambda b: qpsk_modulate(b), qpsk_demodulate, snr_range) + print("正在仿真16-QAM...") + ber_qam = simulate_ber(lambda b: qam16_modulate(b[:len(b)//4*4]), qam16_demodulate, snr_range) + + plt.figure(figsize=(8, 6)) + plt.semilogy(snr_range, ber_bpsk, 'b-o', label='BPSK') + plt.semilogy(snr_range, ber_qpsk, 'r-s', label='QPSK') + plt.semilogy(snr_range, ber_qam, 'g-^', label='16-QAM') + plt.xlabel('SNR (dB)', fontsize=12) + plt.ylabel('BER', fontsize=12) + plt.title('BER vs SNR Performance', fontsize=14, fontweight='bold') + plt.legend(fontsize=11) + plt.grid(True, which='both', alpha=0.3) + plt.savefig('results/ber_performance.png', dpi=150, bbox_inches='tight') + plt.close() + print("✅ BER曲线已保存到 results/ber_performance.png") From 53f088327d986b2c1d97af9cc30711a7e5f9410d Mon Sep 17 00:00:00 2001 From: LIORA1010 <1146898735@qq.com> Date: Tue, 28 Apr 2026 15:32:33 +0800 Subject: [PATCH 5/7] Update demodulation.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 第4题 修改 --- src/demodulation.py | 213 +++++++++----------------------------------- 1 file changed, 40 insertions(+), 173 deletions(-) diff --git a/src/demodulation.py b/src/demodulation.py index 77d95e2..fee7532 100644 --- a/src/demodulation.py +++ b/src/demodulation.py @@ -1,186 +1,53 @@ -""" -数字解调模块 -实现BPSK、QPSK、16-QAM解调算法(选做) -""" - import numpy as np - def bpsk_demodulate(symbols): """ - BPSK解调 - - 任务要求: - - 输入:接收到的复数符号序列(可能带噪声) - - 输出:恢复的比特序列 - - 判决准则: - 实部 > 0 → 比特 0 - 实部 ≤ 0 → 比特 1 - - 参数: - symbols: 接收到的复数符号数组 - - 返回: - bits: 恢复的比特数组 - - 提示: - - BPSK符号主要在实轴上 - - 只需要判断实部的正负即可 - - 噪声会使符号偏离理想位置,但判决准则仍然有效 - - 示例: - >>> symbols = np.array([0.9+0.1j, -1.1-0.05j, 0.85+0.2j]) - >>> bits = bpsk_demodulate(symbols) - >>> print(bits) - [0 1 0] + BPSK 解调 + 判决准则:real(symbol) > 0 → 比特0,否则 → 比特1 """ - - # TODO: 实现BPSK解调 - # 提示:使用np.real()获取实部,然后判断正负 - - raise NotImplementedError("请实现BPSK解调函数") - + bits = (np.real(symbols) < 0).astype(int) + return bits def qpsk_demodulate(symbols): """ - QPSK解调 - - 任务要求: - - 输入:接收到的复数符号序列 - - 输出:恢复的比特序列(长度是符号数的2倍) - - 使用最小欧氏距离判决 - - 参数: - symbols: 接收到的复数符号数组 - - 返回: - bits: 恢复的比特数组 - - 提示: - - QPSK有4个参考星座点(理想位置) - - 对每个接收符号,计算它到4个参考点的距离 - - 选择距离最小的那个点,输出对应的比特对 - - 参考点(格雷码): - (1+1j)/√2 → 00 - (-1+1j)/√2 → 01 - (-1-1j)/√2 → 11 - (1-1j)/√2 → 10 - - 示例: - >>> symbols = np.array([0.6+0.6j, -0.7+0.8j]) - >>> bits = qpsk_demodulate(symbols) - >>> print(bits) # 应该是 [0, 0, 0, 1] + QPSK 解调 - 最小欧氏距离判决 """ + constellation = np.array([ + (1 + 1j) / np.sqrt(2), # 00 + (-1 + 1j) / np.sqrt(2), # 01 + (-1 - 1j) / np.sqrt(2), # 11 + (1 - 1j) / np.sqrt(2), # 10 + ]) + mapping = [(0,0), (0,1), (1,1), (1,0)] - # 定义QPSK参考星座点(格雷码) - constellation = { - 0: (1 + 1j) / np.sqrt(2), # 00 - 1: (-1 + 1j) / np.sqrt(2), # 01 - 3: (-1 - 1j) / np.sqrt(2), # 11 - 2: (1 - 1j) / np.sqrt(2) # 10 - } - - # TODO: 实现QPSK解调 - # 提示步骤: - # 1. 对每个接收符号,计算到4个参考点的欧氏距离 - # 2. 找到距离最小的参考点 - # 3. 将参考点的索引转换为2个比特 - - raise NotImplementedError("请实现QPSK解调函数") - + bits = [] + for s in symbols: + idx = np.argmin(np.abs(s - constellation)) + bits.extend(mapping[idx]) + return np.array(bits) def qam16_demodulate(symbols): """ - 16-QAM解调 - - 任务要求: - - 输入:接收到的复数符号序列 - - 输出:恢复的比特序列(长度是符号数的4倍) - - 使用最小欧氏距离判决 - - 参数: - symbols: 接收到的复数符号数组 - - 返回: - bits: 恢复的比特数组 - - 提示: - - 16-QAM有16个参考星座点 - - 可以分别对I路和Q路进行判决,简化计算 - - I/Q分量的判决(格雷码): - > 2/√10 → 00 - 0 ~ 2/√10 → 01 - -2/√10 ~ 0 → 11 - < -2/√10 → 10 - """ - - # TODO: 实现16-QAM解调 - # 提示:可以采用两种方法 - # 方法1:遍历16个参考点,找最小距离(简单但慢) - # 方法2:分别判决I路和Q路(快速且实用) - - raise NotImplementedError("请实现16-QAM解调函数") - - -def test_demodulation(): - """ - 测试解调函数 - 需要先完成调制函数才能运行 - """ - from modulation import bpsk_modulate, qpsk_modulate, qam16_modulate - from utils import add_awgn, calculate_ber - - print("=" * 50) - print("解调测试") - print("=" * 50) - - # 测试BPSK - print("\n1. 测试BPSK解调...") - try: - bits_tx = np.random.randint(0, 2, 100) - symbols = bpsk_modulate(bits_tx) - symbols_rx = add_awgn(symbols, snr_db=10) # 添加10dB噪声 - bits_rx = bpsk_demodulate(symbols_rx) - ber = calculate_ber(bits_tx, bits_rx) - print(f" BER = {ber:.4f} (SNR=10dB)") - print(" ✅ BPSK解调测试通过") - except NotImplementedError: - print(" ⏸️ BPSK解调尚未实现") - except Exception as e: - print(f" ❌ BPSK解调测试失败: {e}") - - # 测试QPSK - print("\n2. 测试QPSK解调...") - try: - bits_tx = np.random.randint(0, 2, 100) - symbols = qpsk_modulate(bits_tx) - symbols_rx = add_awgn(symbols, snr_db=10) - bits_rx = qpsk_demodulate(symbols_rx) - ber = calculate_ber(bits_tx, bits_rx) - print(f" BER = {ber:.4f} (SNR=10dB)") - print(" ✅ QPSK解调测试通过") - except NotImplementedError: - print(" ⏸️ QPSK解调尚未实现") - except Exception as e: - print(f" ❌ QPSK解调测试失败: {e}") - - # 测试16-QAM - print("\n3. 测试16-QAM解调...") - try: - bits_tx = np.random.randint(0, 2, 100) - symbols = qam16_modulate(bits_tx) - symbols_rx = add_awgn(symbols, snr_db=15) # QAM需要更高SNR - bits_rx = qam16_demodulate(symbols_rx) - ber = calculate_ber(bits_tx, bits_rx) - print(f" BER = {ber:.4f} (SNR=15dB)") - print(" ✅ 16-QAM解调测试通过") - except NotImplementedError: - print(" ⏸️ 16-QAM解调尚未实现") - except Exception as e: - print(f" ❌ 16-QAM解调测试失败: {e}") - - print("\n" + "=" * 50) - - -if __name__ == "__main__": - test_demodulation() + 16-QAM 解调 - 最小欧氏距离判决 + """ + gray_map = {(0,0): 1, (0,1): 3, (1,1): -3, (1,0): -1} + inv_gray = {v: k for k, v in gray_map.items()} + levels = np.array([-3, -1, 1, 3]) / np.sqrt(10) + + bits = [] + for s in symbols: + I_idx = np.argmin(np.abs(np.real(s) - levels)) + Q_idx = np.argmin(np.abs(np.imag(s) - levels)) + I_val = int(round(np.real(s) * np.sqrt(10))) + Q_val = int(round(np.imag(s) * np.sqrt(10))) + I_val = min([-3,-1,1,3], key=lambda x: abs(x-I_val)) + Q_val = min([-3,-1,1,3], key=lambda x: abs(x-Q_val)) + bits.extend(inv_gray[I_val]) + bits.extend(inv_gray[Q_val]) + return np.array(bits) + +def calculate_ber(tx_bits, rx_bits): + """计算误码率""" + errors = np.sum(tx_bits != rx_bits) + ber = errors / len(tx_bits) + return ber From c5a1356b5cb0b4977a1897b75e8f9ab8d782c834 Mon Sep 17 00:00:00 2001 From: LIORA1010 <1146898735@qq.com> Date: Tue, 28 Apr 2026 15:33:45 +0800 Subject: [PATCH 6/7] Add files via upload --- results/ber_performance.png | Bin 0 -> 72113 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 results/ber_performance.png diff --git a/results/ber_performance.png b/results/ber_performance.png new file mode 100644 index 0000000000000000000000000000000000000000..7b08eaf49f97d1b0d4205a9db8c38579c559991c GIT binary patch literal 72113 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

LVj-mrpf2N{ul$_Vdr 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

FvH8r~Mq#TB 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 Date: Tue, 28 Apr 2026 15:48:54 +0800 Subject: [PATCH 7/7] Update REPORT_TEMPLATE.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 实验报告 --- REPORT_TEMPLATE.md | 156 +++++++++++++++++++++------------------------ 1 file changed, 74 insertions(+), 82 deletions(-) diff --git a/REPORT_TEMPLATE.md b/REPORT_TEMPLATE.md index 9cbc306..9fac5e6 100644 --- a/REPORT_TEMPLATE.md +++ b/REPORT_TEMPLATE.md @@ -1,20 +1,19 @@ -# 实验报告模板 +# 实验报告 **实验名称**:数字调制解调实验 -**学生姓名**:[你的姓名] -**学号**:[你的学号] +**学生姓名**:梁萱 +**学号**:2024280303 **实验日期**:2026年4月24日 -**提交日期**:[提交日期] +**提交日期**:2026年4月28日 --- ## 1. 实验目的 -请在此描述实验的目的,例如: -- 理解数字调制的基本原理 -- 掌握BPSK、QPSK、16-QAM调制算法的实现 -- 学习使用Python和NumPy进行信号处理 -- 体验AI编程助手在开发中的应用 +- 理解BPSK、QPSK、16-QAM三种数字调制方式的基本原理 +- 使用Python实现调制和解调算法并可视化星座图 +- 分析不同调制方式在噪声环境下的误码率性能 +- 学习使用AI编程助手(Claude)辅助开发,熟悉GitHub协作流程 --- @@ -22,29 +21,26 @@ ### 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/符号),但抗噪声性能最弱。 --- @@ -52,25 +48,44 @@ $$ ### 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) +``` --- @@ -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日