利用matlab实现马赫曾德尔调制器的OOK调制

基于MATLAB实现马赫-曾德尔调制器(MZM)进行OOK调制。模拟MZM的调制过程,并生成了OOK调制信号。

代码

1. 参数设置

% 设置基本参数
fs = 10000; % 采样频率
fc = 1000; % 载波频率
t = 0:1/fs:1-1/fs; % 时间向量

2. 生成二进制数据流

% 生成随机二进制数据流
data = randi([0, 1], 1, length(t)); % 随机生成0和1

3. 生成载波信号

% 生成载波信号
carrier = cos(2*pi*fc*t);

4. OOK调制

% OOK调制过程
% 将二进制数据流转换为调制信号
modulated_signal = data .* carrier;

5. 绘制调制信号

% 绘制调制信号
figure;
subplot(2,1,1);
plot(t, data);
title('原始二进制数据');
xlabel('时间 (s)');
ylabel('幅度');

subplot(2,1,2);
plot(t, modulated_signal);
title('OOK调制信号');
xlabel('时间 (s)');
ylabel('幅度');

6. 添加噪声并解调

% 添加高斯白噪声
noise = 0.5 * randn(size(t));
received_signal = modulated_signal + noise;

% 解调过程
threshold = 0.5 * max(received_signal); % 设置阈值
demodulated_signal = received_signal > threshold;

% 计算误码率
errors = sum(demodulated_signal ~= data);
BER = errors / length(data);
fprintf('误码率 (BER): %.4f\n', BER);

% 绘制解调信号
figure;
subplot(2,1,1);
plot(t, received_signal);
title('接收到的信号(含噪声)');
xlabel('时间 (s)');
ylabel('幅度');

subplot(2,1,2);
stairs(t, demodulated_signal);
title('解调后的二进制数据');
xlabel('时间 (s)');
ylabel('幅度');

参考代码 利用matlab实现马赫曾德尔调制器的OOK调制 www.youwenfan.com/contentcnl/80648.html

说明

  1. 参数设置:定义了采样频率、载波频率和时间向量。
  2. 生成二进制数据流:随机生成一个二进制数据流,模拟发送的数字信号。
  3. 生成载波信号:创建一个余弦载波信号。
  4. OOK调制:将二进制数据流与载波信号相乘,实现OOK调制。
  5. 绘制调制信号:绘制原始二进制数据和OOK调制信号的波形。
  6. 添加噪声并解调:在调制信号中添加高斯白噪声,模拟信道传输过程。然后通过阈值检测进行解调,并计算误码率(BER)。
posted @ 2025-11-21 11:23  我是一只小小鸟~  阅读(10)  评论(0)    收藏  举报