仿真对比4ASK信号、8PSK信号、4FSK信号在AWGN信道下的传输性能
假设符号周期为1s,载波频率为10Hz,每个符号周期内采样100个点,仿真4ASK信号、8PSK信号、4FSK信号在AWGN信道下的误码率和误比特率性能,并与理论值进行比较。
代码实现:
%4ASK信号在AWGN信道下的传输性能
T = 1; %符号周期为1s
fc = 10; %载波频率为10Hz
fs = 100; %每个符号周期内采样100个点
Ts = 1/fs; %采样时间间隔
t = 0:Ts:T-Ts; %时间向量
n = 100000; %每种信噪比下发送的符号数
c = sqrt(2/T)*cos(2*pi*fc*t); %4ASK信号的基函数
M = 4; %4ASK信号的空间点数
Gray = [0,1,3,2]; %格雷编码的规则
snr = 0:15; %snr代表信噪比Es/N0
snr1 = 10.^(snr/10);
%生成等概率分布的0,1,2,3序列,序列为1Xn的数据
xn = randi([0,3],1,n); %消息数据
xn_1 = Gray(xn+1); %格雷码映射
xn_2 = pammod(xn_1,M)'; %4_PAM调制
s = xn_2*c; %符号映射成波形,载波调制
s1 = reshape(s',1,length(xn_2)*length(c));
spow = norm(s1).^2/n; %求每一个符号的平均功率
for index=1:length(snr)
sigma = sqrt(spow/(2*snr1(index))); %求噪声功率
r = s1 + sigma*randn(1,length(s1)); %信号通过AWGN信道
r1 = reshape(r,length(c),length(xn_2));
y = (c*r1)/length(c); %相关器的输出
xn_demod = pamdemod(y,M); %抽样判决
dec_xn = Gray(xn_demod+1); %格雷码的逆映射
[err,ber1(index)] = biterr(xn,dec_xn,log2(M)); %求误比特率
[err,ser1(index)] = symerr(xn,dec_xn);
end
%8PSK信号在AWGN信道下的传输性能
T = 1; %符号周期为1s
fc = 10; %载波频率为10Hz
fs = 100; %每个符号周期内采样100个点
Ts = 1/fs; %采样时间间隔
t = 0:Ts:T-Ts; %时间向量
n = 100000; %每种信噪比下发送的符号数
c = sqrt(2/T)*exp(1i*2*pi*fc*t); %4FSK信号的基函数
c1 = sqrt(2/T)*cos(2*pi*fc*t); %载波的同相分量
c2 = sqrt(2/T)*sin(2*pi*fc*t); %载波的正交分量
M = 8; %8PSK信号的空间点数
Gray = [0,1,2,3,6,7,4,5]; %格雷编码的规则
snr = 0:15; %snr代表信噪比Es/N0
snr1 = 10.^(snr/10);
%生成等概率分布的0,1,2,3,4,5,6,7序列,序列为1Xn的数据
xn = randi([0,7],1,n); %消息数据
xn_1 = Gray(xn+1); %格雷码映射
xn_2 = pskmod(xn_1,M)'; %8_PSK
s = xn_2*c1; %符号映射成波形,载波调制
s1 = reshape(s',1,length(xn_2)*length(c));
spow = norm(s1).^2/n; %求每一个符号的平均功率
for index=1:length(snr)
sigma = sqrt(spow/(2*snr1(index))); %求噪声功率
r = s1 + sigma*randn(1,length(s1)); %信号通过AWGN信道
r1 = reshape(r,length(c),length(xn_2));
y1 = (c1*r1)/length(c1); %相关器的输出
y2 = (c2*r1)/length(c2);
y = y1+1i*y2;
xn_demod = pskdemod(y,M); %抽样判决
dec_xn = Gray(xn_demod+1); %格雷码的逆映射
[err,ber2(index)] = biterr(xn,dec_xn,log2(M)); %求误比特率
[err,ser2(index)] = symerr(xn,dec_xn);
end
%4FSK信号在AWGN信道下的传输性能
T = 1; %符号周期为1s(即码元周期)
deltaf = 1/T; %FSK的频率点之间的差值(即频率间隔)
nSamp = 100; %每个符号周期内采样100个点(nSamp = fs/RB; %每符号的采样点数)
RB = 1/T; %RB为码元速率
fs = nSamp*RB; %采样点数
Ts = 1/fs; %采样时间间隔
n = 100000; %每种信噪比下发送的符号数
M = 4; %4FSK信号的空间点数
Gray = [0,1,3,2]; %格雷编码的规则
snr = 0:15; %snr代表信噪比Es/N0
snr1 = 10.^(snr/10);
%生成等概率分布的0,1,2,3序列,序列为1Xn的数据
xn = randi([0,3],1,n); %消息数据
xn_1 = Gray(xn+1); %格雷码映射
xn_2 = fskmod(xn_1,M,deltaf,nSamp,fs); %4FSK调制
spow = norm(xn_2).^2/n; %求每一个符号的平均功率
for index=1:length(snr)
sigma = sqrt(spow/(2*snr1(index))); %求噪声功率
r = xn_2 + sigma*randn(1,length(xn_2)); %信号通过AWGN信道
xn_demod = fskdemod(r,M,deltaf,nSamp,fs); %抽样判决
dec_xn = Gray(xn_demod+1); %格雷码的逆映射
[err,ber3(index)] = biterr(xn,dec_xn,log2(M)); %求误比特率
[err,ser3(index)] = symerr(xn,dec_xn);
end
figure();
semilogy(snr,ber1,'-mo',snr,ser1,"-m*",snr,ber2,"-y.",snr,ser2,"-yd",snr,ber3,"-c^",snr,ser3,"-c+");
title("4ASK、8PSK和4FSK信号在AWGN信道下的传输性能");
xlabel("Eb/N0");
ylabel("误比特率和误符号率");
legend("4ASK误比特率","4ASK误符号率","8PSK误比特率", "8PSK误符号率","4FSK误比特率", "4FSK误符号率");