第【126】期--基于摩尔斯码的光通信OOK调制系统设计与仿真--matlab完整代码

关注我,追更更多通信仿真代码!

文章目录

    • 摘要
    • [1 引言](#1 引言)
    • [2 系统原理](#2 系统原理)
      • [2.1 摩尔斯电码的时间结构](#2.1 摩尔斯电码的时间结构)
      • [2.2 OOK 调制原理](#2.2 OOK 调制原理)
      • [2.3 光信道模型](#2.3 光信道模型)
      • [2.4 能量检测解调](#2.4 能量检测解调)
    • [3 仿真设计与分析](#3 仿真设计与分析)
      • [3.1 仿真参数](#3.1 仿真参数)
      • [3.2 仿真流程](#3.2 仿真流程)
      • [3.3 仿真结果分析](#3.3 仿真结果分析)
      • [3.4 部分代码](#3.4 部分代码)
    • [4 总结](#4 总结)

摘要

本文仿真了一套基于摩尔斯电码的开关键控(On-Off Keying, OOK)光通信系统。系统以激光器为光源,将文本消息经摩尔斯编码转换为由"点"和"划"组成的时序信号,再映射为二进制通断序列,通过 OOK 调制驱动激光器发送。接收端采用非相干能量检测方法,对每个时间单位内的接收信号进行能量积分并与门限比较,恢复出二进制序列,最终依次还原摩尔斯码与原始文本。

1 引言

  • 光通信以其带宽大、抗电磁干扰能力强、保密性好等优点,在现代通信体系中占据重要地位。开关键控(OOK)是最简单、最基础的光调制方式之一,其原理是通过控制光源的"开"与"关"来传递二进制信息。由于其实现简单、成本低廉,OOK 被广泛应用于自由空间光通信、红外遥控、光纤短距离传输等场景。

  • 摩尔斯电码是一种古老而经典的编码方式,它用"点"和"划"两种基本符号及其不同的时间间隔来表示字母与数字。将摩尔斯电码与 OOK 光通信相结合,可以构建一套直观、易于演示的光通信系统:文本先被转换为摩尔斯码,再按照摩尔斯码的时间规则展开为通断时序,驱动激光器发送;接收端通过光电探测器接收光信号,经能量检测恢复通断时序,再还原摩尔斯码与文本。本文围绕这一思路,设计并实现了一套完整的 MATLAB 仿真系统,涵盖摩尔斯编码、二进制时序映射、OOK 调制、光信道建模、能量检测解调、摩尔斯解码以及误码率分析等环节。

2 系统原理

2.1 摩尔斯电码的时间结构

2.2 OOK 调制原理

2.3 光信道模型

2.4 能量检测解调

3 仿真设计与分析

3.1 仿真参数

参数名称 符号 取值 说明
载波频率 fc 10 每个时间单位包含 10 个载波周期
每时间单位采样点数 samplesPerUnit 100 每个摩尔斯时间单位的采样点数
信道衰减系数 attenuation 0.7 光路衰减,取值范围 0~1
能量检测门限 threshold 0.1 能量判决门限
T_dot 1 1 单位 ON
T_dash 3 3 单位 ON
符号间隔 T_symbol 1 1 单位 OFF
字母间隔 T_letter 3 3 单位 OFF
单词间隔 T_word 7 7 单位 OFF
信号功率 signalPower mean(attenuatedSignal.^2) 衰减后信号的平均功率
噪声功率 noisePower signalPower / 10^(SNR/10) 由 SNR 反推得到
判决规则 --- E_k > threshold 大于门限判为 1,否则判为 0

3.2 仿真流程

3.3 仿真结果分析

  • 可以看到:在衰减系数 0.7、信噪比 10 dB 的条件下,接收端通过能量检测成功恢复出原始文本,误码率接近于零,验证了系统在中等信噪比下的可靠性。随着 SNR 从 -4 dB 提升至 4 dB,误码率呈单调下降趋势,表明噪声是影响系统性能的主要因素;而在噪声压力测试中,高 SNR(10 dB)条件下检测结果与原始二进制序列几乎完全重合,低 SNR(-2 dB)条件下则出现明显比特翻转,误码率显著上升,直观说明了信噪比对 OOK 光通信链路可靠性的决定性作用。

3.4 部分代码

c 复制代码
%% ============================================================
%  基于摩尔斯码的 OOK 光通信系统 主程序
%  完整链路: 文本 -> 摩尔斯 -> 二进制 -> OOK调制 -> 光信道
%            -> 解调 -> 二进制 -> 摩尔斯 -> 文本
%  所有图形整合到一个 figure 的子图中
% ============================================================

clc;
clear;
close all;

addpath('functions');

rng(1);

%% ---------- 1. 输入消息 ----------
message = "wirelsee communication";
message = upper(message);

% 文本 -> 摩尔斯
morseMessage = morseEncoder(message);

disp("原始消息:");
disp(message);
disp("摩尔斯码:");
disp(morseMessage);

%% ---------- 2. 摩尔斯 -> 二进制时序 ----------
binarySignal = morseToBinary(message);

%% ---------- 3. OOK 调制 ----------
fc = 10;                 % 载波频率
samplesPerUnit = 100;    % 每单位采样点数

[ookSignal, t, digitalSignal] = ...
    ookModulator(binarySignal, fc, samplesPerUnit);

%% ---------- 4. 光信道 ----------
attenuation = 0.7;
SNR_dB      = 10;

receivedSignal = opticalChannel(ookSignal, attenuation, SNR_dB);

%% ---------- 5. OOK 解调 ----------
threshold = 0.1;
detectedSignal = ookDemodulator(receivedSignal, samplesPerUnit, threshold);
detectedSignal = double(detectedSignal);

%% ---------- 6. BER 计算 ----------
bitErrors = sum(binarySignal ~= detectedSignal);
BER = bitErrors / length(binarySignal);

disp("比特错误数:");
disp(bitErrors);
disp("误码率 BER:");
disp(BER);

%% ---------- 7. BER vs SNR 实验 ----------
SNR_range = -4:1:4;
BER_values = zeros(size(SNR_range));

% 固定一组噪声, 保证公平对比
attenuatedSignal = attenuation * ookSignal;
baseNoise = randn(size(attenuatedSignal));

for k = 1:length(SNR_range)

    currentSNR = SNR_range(k);

    % 根据 SNR 计算噪声功率
    signalPower = mean(attenuatedSignal.^2);
    noisePower  = signalPower / (10^(currentSNR/10));

    % 生成噪声 (使用同一组基准噪声)
    noise = sqrt(noisePower) * baseNoise;

    % 接收信号
    testReceivedSignal = attenuatedSignal + noise;

    % 切块 + 能量检测
    testMatrix   = reshape(testReceivedSignal, samplesPerUnit, []);
    testEnergy   = mean(testMatrix.^2);
    testDetected = testEnergy > threshold;

    % 计算 BER
    testErrors = sum(binarySignal ~= testDetected);
    BER_values(k) = testErrors / length(binarySignal);

end

disp("SNR 列表:");
disp(SNR_range);
disp("BER 列表:");
disp(BER_values);

%% ---------- 8. 二进制 -> 摩尔斯 -> 文本 ----------
decodedMorse   = binaryToMorse(detectedSignal);
decodedMessage = morseDecoder(decodedMorse);

disp("解码摩尔斯:");
disp(decodedMorse);
disp("恢复消息:");
disp(decodedMessage);

%% ============================================================
%  9. 综合绘图 (所有图放在一个 figure 的子图中)
% ============================================================

figure('Name','OOK 光通信系统仿真结果', ...
       'NumberTitle','off', ...
       'Position',[80 40 1200 900]);

tiledlayout(3,2,'TileSpacing','compact','Padding','compact');

% -------- 子图 1: 二进制时序 --------
nexttile;
stairs(binarySignal, 'LineWidth', 2);
ylim([-0.2 1.2]);
yticks([0 1]);
yticklabels({'激光关','激光开'});
xlabel('时间单位');
ylabel('激光状态');
title('(a) 摩尔斯二进制时序');
grid on;

% -------- 子图 2: OOK 调制信号 --------
nexttile;
plot(t, ookSignal, 'LineWidth', 1);
xlabel('时间');
ylabel('幅度');
title('(b) OOK 调制光信号');
grid on;
xlim([0 27]);

% -------- 子图 3: 接收信号 (含噪) --------
nexttile;
plot(t, receivedSignal);
xlabel('时间');
ylabel('幅度');
title(sprintf('(c) 光信道接收信号 (SNR = %d dB)', SNR_dB));
grid on;
xlim([0 27]);

% -------- 子图 4: 解调后的二进制 --------
nexttile;
stairs(detectedSignal, 'LineWidth', 2);
ylim([-0.2 1.2]);
yticks([0 1]);
yticklabels({'激光关','激光开'});
xlabel('时间单位');
ylabel('检测状态');
title(sprintf('(d) 解调信号 (BER = %.4f)', BER));
grid on;

% -------- 子图 5: BER vs SNR 曲线 --------
nexttile;
semilogy(SNR_range, BER_values, '-o', 'LineWidth', 1.5);
xlabel('SNR (dB)');
ylabel('误码率 BER');
title('(e) BER vs SNR');
xlim([min(SNR_range) max(SNR_range)]);   % 强制横轴范围
xticks(SNR_range);                        % 每个 SNR 点都显示刻度
grid on;

% -------- 子图 6: 原始 vs 检测 二进制对比 --------
nexttile;
stairs(binarySignal, 'LineWidth', 1.8);
hold on;
stairs(detectedSignal, '--', 'LineWidth', 1.3);
ylim([-0.2 1.2]);
xlabel('比特 / 时间单位');
ylabel('状态');
title('(f) 原始 vs 检测 二进制');
legend('原始','检测','Location','best');
grid on;

sgtitle('基于摩尔斯码的 OOK 光通信系统仿真');

4 总结

本文基于 MATLAB 设计并仿真了一套以摩尔斯电码为载体的 OOK 光通信系统,完整实现了文本编码、OOK 调制、光信道传输与能量检测解调的全过程,结果表明系统结构简单、在中等信噪比下能准确恢复原始消息,且误码率随信噪比提高而单调下降。未来可引入自适应门限与纠错编码以增强抗噪能力,并采用更真实的光信道模型、扩展至 PPM 等多进制调制,使系统更贴近实际应用。

相关推荐
m0_5474866617 天前
《光纤通信原理与技术》全套PPT课件2026(武汉理工大学)
光通信
张星河zen23 天前
CPO量产重塑产业分工,光通信产业格局和技术路线演进深度拆解
光模块·光通信·cpo·硅光·光芯片
ATOMETRICS优可测1 个月前
平面度、粗糙度,两个决定法拉第旋转片质量的关键因素
光通信·表面粗糙度·法拉第旋转片·白光干涉仪·光模块平面度·优可测
andxe1 个月前
安科士 AndXe|光纤通信重塑无人机链路:无人机专用光纤光模块技术解析
无人机·光模块·光通信
andxe2 个月前
安科士 AndXe 技术博客:400G QSFP112 SR4 光模块|AI 算力与超算短距互联最优方案
网络·人工智能·光模块·光通信
见合八方2 个月前
【噪声系数】高偏SOA噪声系数测试方法
网络·自动化·soa·光通信·激光雷达·半导体光放大器
andxe3 个月前
安科士AndXe 400G QSFP-DD LR8光模块芯片架构与品控体系解析
网络·光模块·光通信
见合八方3 个月前
【滤波器】用于红外微型光谱仪的可调谐MEMS-FP滤光片-综述
自动化·soa·光通信·激光雷达·半导体光放大器
andxe3 个月前
25G SFP28光模块:中高速场景的高适配之选
光模块·光通信·25g·sfp28光模块