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开始,没有0或超出数组长度的数值。
- 检查循环中
start_idx和end_idx的计算逻辑,避免采样区间超出波形数组范围。 - 若代码有自定义极性逻辑,确保比特序列的索引引用正确,比如用
bit_seq(i)而非bit_seq(i-1)(当i从1开始遍历)。
内容的提问来源于stack exchange,提问作者Davin Dempster
相关产品推荐
相关产品推荐

