for tx_time-l:648 tx_bits=interleaved(1:8); interleaved(1:8)=[]; QAM16_symbol=QAM16_mod(tx_bits, 2);x(1,1) =QAM16_symbol(1);x(2,h)=QAM16_symbol(2);if rem(tx_time-1,81)==0 H = sq05*(randn(2,2)+j*randn(2,2)); end y =H*x; noise = sqrt(sigma2/2)*(randn(2,1)+j*randn(2,1)); if noise_option==1, y = y + noise;endW=inv(H'*H+sigma2*diag (ones(1,2)))*H'; K_tilde =W*y; x_hat = QAM16_slicer(X_tilde, 2); temp_bit=[temp_bit QAM16_denapper(X_hat, 2)]; end deinterleaved=[]; for i=1:deinterleaving_rum deinterleaved=[deinterleaved temp_bit([i:deinterleaving_mum:end])];end received_bit=Viterbi_decode(deinterleaved) for EC_dummy=1:1:raw_bit_len, if nobe>=nobe_target, break; end end if (nobe>=nobe_target) break; end end BER(i_SNR)=nobe/((i_frame-1)*raw_bit_len+EC_dummy);fprintf(’t%dt\t%1.4f\n', SNRdB,BER(i_SNR)); if BER(i_SMR)<BER_target, break; end end仔细注释这段代码
时间: 2024-03-09 15:45:10 浏览: 111
epwm_updown_aq.rar_dsp_dsp28335 DC_interleaved_交错并联DC-DC_双向 变换
5星 · 资源好评率100%
这段代码是一个通信系统的仿真代码,用于模拟信道传输和解码过程。以下是对代码的详细注释:
1. 第一行是一个循环语句,对于每个传输时间点 tx_time,执行下列操作:
```
for tx_time-l:648
```
2. 从交织器中取出 8 个比特,进行 16-QAM 调制,得到 QAM16_symbol。
```
tx_bits=interleaved(1:8);
interleaved(1:8)=[];
QAM16_symbol=QAM16_mod(tx_bits, 2);
```
3. 将 QAM16_symbol 中的第 1 个比特放到 x(1,1) 中,第 2 个比特放到 x(2,h) 中。
```
x(1,1) =QAM16_symbol(1);
x(2,h)=QAM16_symbol(2);
```
4. 如果当前传输时间点是 81 的倍数,生成一个 2x2 的复高斯随机矩阵 H。
```
if rem(tx_time-1,81)==0
H = sq05*(randn(2,2)+j*randn(2,2));
end
```
5. 将 x 经过信道传输,加上高斯白噪声(如果 noise_option 等于 1)。
```
y =H*x;
noise = sqrt(sigma2/2)*(randn(2,1)+j*randn(2,1));
if noise_option==1, y = y + noise;end
```
6. 计算 K_tilde,用 QAM16_slicer 函数将其还原成 X_tilde,然后用 QAM16_denapper 函数将 X_tilde 解交织,得到 temp_bit。
```
W=inv(H'*H+sigma2*diag (ones(1,2)))*H';
K_tilde =W*y;
x_hat = QAM16_slicer(X_tilde, 2);
temp_bit=[temp_bit QAM16_denapper(X_hat, 2)];
```
7. 将 temp_bit 解交织得到 deinterleaved。
```
deinterleaved=[];
for i=1:deinterleaving_rum
deinterleaved=[deinterleaved temp_bit([i:deinterleaving_mum:end])];
end
```
8. 对 deinterleaved 进行 Viterbi 解码,得到 received_bit。
```
received_bit=Viterbi_decode(deinterleaved)
```
9. 统计误比特率(BER),如果达到目标 BER 或者传输比特数达到目标,则跳出循环。
```
for EC_dummy=1:1:raw_bit_len,
if nobe>=nobe_target, break; end
end
if (nobe>=nobe_target) break; end
```
10. 输出当前信噪比和 BER。
```
BER(i_SNR)=nobe/((i_frame-1)*raw_bit_len+EC_dummy);
fprintf(’t%dt\t%1.4f\n', SNRdB,BER(i_SNR));
```
11. 如果当前 BER 达到目标,则跳出循环。
```
if BER(i_SMR)<BER_target, break; end
```
阅读全文