You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matlab眼图代码无法正常绘制问题排查求助

PAM4眼图绘制问题排查与修复

代码中的核心错误

你的Matlab代码存在几个关键逻辑错误,导致绘制出直线而非眼图:

  1. 变量定义完全错误

    • samplesPerBit = size(data, 1); 错误地将数据集总采样数当成了单个比特的采样数,实际UI=10才是每个PAM4符号的采样数。
    • numBits = size(data, 1); 同样错误,总采样数不等于比特数,PAM4每个符号对应2比特,总符号数应为floor(totalSamples / UI)。
  2. 波形切片逻辑混乱
    原代码的双重循环会把整个电压序列重复切割numBits次,导致所有cutWaveform行的内容完全一致,叠加后自然是一条直线。眼图的核心是将每个符号周期的波形对齐到同一时间轴叠加,而非重复切割整个序列。

修正后的代码

data = readmatrix('PAM4.csv', 'NumHeaderLines', 1);
voltage = data(:, 2);

UI = 10; % 每个PAM4符号周期的采样数
totalSamples = size(data, 1);
numSymbols = floor(totalSamples / UI); % 计算总符号数

% 提取每个符号周期的波形片段
symbolWaveforms = zeros(numSymbols, UI);
for k = 1:numSymbols
    startIdx = (k-1)*UI + 1;
    endIdx = startIdx + UI - 1;
    symbolWaveforms(k, :) = voltage(startIdx:endIdx);
end

% 绘制眼图:所有符号波形对齐到同一时间轴叠加
figure;
hold on;
timeAxis = 0:UI-1; % 符号内的采样点时间索引
for k = 1:numSymbols
    plot(timeAxis, symbolWaveforms(k, :), 'b', 'LineWidth', 0.5);
end

title('PAM4眼图');
xlabel('符号内采样点索引');
ylabel('电压幅值');
grid on;
hold off;

额外排查点

  • 数据集规模:如果numSymbols小于100,叠加的波形数量太少,眼图会模糊甚至像直线。建议Java生成至少几千个PAM4符号的数据。
  • CSV数据有效性:检查CSV文件中电压列是否有重复值或异常值,若所有电压值一致,自然只会画出直线。
  • UI匹配性:确认Java生成数据时,每个PAM4符号对应的采样数确实是10,UI不匹配会导致波形切片错位。

内容的提问来源于stack exchange,提问作者richiew726

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 00:10:14