用MATLAB R2016 仿真pcm编码的误码率随信噪比变化的MATLAB仿真程序用biterr写
时间: 2024-02-05 22:14:24 浏览: 78
下面是用MATLAB R2016实现PCM编码的误码率随信噪比变化的仿真程序:
```matlab
% 采样频率
fs = 8000;
% 量化比特数
n = 8;
% 量化电平数
L = 2^n;
% 最大信号幅值
Amax = 1;
% 信噪比dB范围
SNR_dB = 0:2:20;
% 信噪比范围
SNR = 10.^(SNR_dB/10);
% 误码率存储数组
BER = zeros(size(SNR));
% 循环计数器
k = 1;
for snr=SNR
% 生成随机信号
x = 2*Amax*(rand(1,fs)-0.5);
% 量化
y = round(x*(L-1)/2/Amax)*(2*Amax/(L-1));
% 加入高斯白噪声
noise = randn(1,fs)/sqrt(snr);
r = y + noise;
% 反量化
q = round(r*(L-1)/2/Amax)*(2*Amax/(L-1));
% 计算误码率
BER(k) = biterr(x,q)/fs;
k = k+1;
end
% 画图
semilogy(SNR_dB,BER,'-*');
xlabel('信噪比(dB)');
ylabel('误码率(BER)');
title('PCM编码误码率随信噪比变化图');
grid on;
```
程序中,我们先设置了仿真参数,包括采样频率`fs`、量化比特数`n`、量化电平数`L`、最大信号幅值`Amax`和信噪比范围`SNR`。接着,我们循环遍历每个信噪比值,生成随机信号并进行PCM编码、加噪声、反量化。最后,我们用`biterr`函数计算得到误码率,并将其存入`BER`数组中。最后,我们使用`semilogy`函数画出误码率随信噪比变化的曲线图。
注意,由于MATLAB R2016版本中`semilogx`函数的参数不支持向量,因此我们使用了`semilogy`函数,将横坐标设为线性刻度,纵坐标设为对数刻度。
阅读全文