通信系统的简单模拟
生成二进制信号,调制,通过信道加入高斯白噪声,解调,结算误码率
实现
AWGN:在某一信号中加入高斯白噪声
y = awgn(x,SNR) 在信号x中加入高斯白噪声。信噪比SNR以dB为单位。x的强度假定为0dBW。如果x是复数,就加入复噪声。
y = awgn(x,SNR,SIGPOWER) 如果 SIGPOWER 是数值,则其代表以 dBW 为单位的信号强度;如果 SIGPOWER 为’measured’,则函数将在加入噪声之前测定信号强度。
误比特率 biterr
[num,err] = biterr(a,b,k)
num 为误比特数,err 为误比特率,k 为 a,b 中的符号转化为比特时的位数,缺省时取最大值。
若指定 k 取2,表示每个符号用2位比特表示,即 a=[00 01 01 01], b=[00 00 00 01],err=2/8=0.25
调制与解调
Y = Pskmod (x, M,ini_phase)
其中 x 是需要要调制的数字信息: M 是调制的级数 (即想位数),ini_phase 是初始相位。函数返回一个调制后的信号 y。
Pskmod 函数的实现原理是将数字信息 x 转换为相应的相位,然后将这些相位映射到复平面上。这样,我们就可以将数字信息通过相位调制的方式传输。
下面是一个示例:
X = [0 1 2 3 0 1 2 3];%数字信息
M =4;%调制级数
Ini_phase = 0;%初始相位
Y = pskmod (x, M, ini_phase); %生成调制信号
x_recovered = pskdemod(Y,M, ini_phase);%还原数字信息
在这个示例中,我们生成了一个长度为 8 的数字信息 x。调制级数 M 为 4,表示我们使用 4 个不同的相位来进行调制。初始相位为 0。Pskmod 函数将 x 调制为一个长度为 8 的相位调制信号 y。
在接收端,我们可以使用 pskdemod 函数来还原数字信息。
代码
%% 生成随机二进制信号
x = randi([0,1],1,1000);
%% BPSK调制
y = pskmod(x,2);
%% 加入高斯白噪声
z = awgn(y,-10,'measured');
%% BPSK解调
r = pskdemod(z,2);
%% 计算误码率
[number,ratio] = biterr(x,r);
%% 显示结果
disp(['误码个数:',num2str(number),',误码率:',num2str(ratio)]);
结果
通信系统的简单模拟
生成二进制信号,调制,通过信道加入高斯白噪声,解调,结算误码率
实现
AWGN:在某一信号中加入高斯白噪声
y = awgn(x,SNR) 在信号x中加入高斯白噪声。信噪比SNR以dB为单位。x的强度假定为0dBW。如果x是复数,就加入复噪声。
y = awgn(x,SNR,SIGPOWER) 如果 SIGPOWER 是数值,则其代表以 dBW 为单位的信号强度;如果 SIGPOWER 为’measured’,则函数将在加入噪声之前测定信号强度。
误比特率 biterr
[num,err] = biterr(a,b,k)
num 为误比特数,err 为误比特率,k 为 a,b 中的符号转化为比特时的位数,缺省时取最大值。
若指定 k 取2,表示每个符号用2位比特表示,即 a=[00 01 01 01], b=[00 00 00 01],err=2/8=0.25
调制与解调
Y = Pskmod (x, M,ini_phase)
其中 x 是需要要调制的数字信息: M 是调制的级数 (即想位数),ini_phase 是初始相位。函数返回一个调制后的信号 y。
Pskmod 函数的实现原理是将数字信息 x 转换为相应的相位,然后将这些相位映射到复平面上。这样,我们就可以将数字信息通过相位调制的方式传输。
下面是一个示例:
X = [0 1 2 3 0 1 2 3];%数字信息
M =4;%调制级数
Ini_phase = 0;%初始相位
Y = pskmod (x, M, ini_phase); %生成调制信号
x_recovered = pskdemod(Y,M, ini_phase);%还原数字信息
在这个示例中,我们生成了一个长度为 8 的数字信息 x。调制级数 M 为 4,表示我们使用 4 个不同的相位来进行调制。初始相位为 0。Pskmod 函数将 x 调制为一个长度为 8 的相位调制信号 y。
在接收端,我们可以使用 pskdemod 函数来还原数字信息。
代码
%% 生成随机二进制信号
x = randi([0,1],1,1000);
%% BPSK调制
y = pskmod(x,2);
%% 加入高斯白噪声
z = awgn(y,-10,'measured');
%% BPSK解调
r = pskdemod(z,2);
%% 计算误码率
[number,ratio] = biterr(x,r);
%% 显示结果
disp(['误码个数:',num2str(number),',误码率:',num2str(ratio)]);
结果