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

SCILAB模拟双极性NRZ时遇“invalid index”错误求助

解决Scilab双极性NRZ模拟的"invalid index"错误

常见错误原因及修复步骤

  • 误用0索引:Scilab数组索引从1开始,若代码里循环起始值设为0,或者用0访问数组位置,会直接触发无效索引错误。检查循环变量的起始值,确保从1开始遍历序列。
  • 数组长度不匹配:生成NRZ波形时,若扩展后的波形数组长度计算错误,会导致访问超出数组范围的位置。比如为每个比特生成N个采样点时,目标数组长度应为length(sequence)*N,且循环内索引不能超过这个长度。

修复后的示例代码

针对序列[1 1 0 0 1 0 0 0 1 1]的双极性NRZ模拟正确代码如下:

// 原始比特序列
bit_seq = [1 1 0 0 1 0 0 0 1 1];
// 每个比特的采样点数
samples_per_bit = 100;
// 初始化波形数组
nrz_wave = zeros(1, length(bit_seq)*samples_per_bit);

// 遍历每个比特生成波形
for i = 1:length(bit_seq)
    // 计算当前比特对应的采样区间
    start_idx = (i-1)*samples_per_bit + 1;
    end_idx = i*samples_per_bit;
    // 双极性NRZ规则:1→+1,0→-1
    if bit_seq(i) == 1 then
        nrz_wave(start_idx:end_idx) = 1;
    else
        nrz_wave(start_idx:end_idx) = -1;
    end
end

// 绘制波形
t = linspace(0, length(bit_seq), length(nrz_wave));
plot(t, nrz_wave);
xlabel('时间');
ylabel('幅度');
title('双极性NRZ波形');
grid on;

验证要点

  1. 确认所有数组访问的索引都从1开始,没有0或超出数组长度的数值。
  2. 检查循环中start_idx和end_idx的计算逻辑,避免采样区间超出波形数组范围。
  3. 若代码有自定义极性逻辑,确保比特序列的索引引用正确,比如用bit_seq(i)而非bit_seq(i-1)(当i从1开始遍历)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 19:34:52