仿真对比4ASK信号、8PSK信号、4FSK信号在AWGN信道下的传输性能

仿真对比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误符号率");
  • 6
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
下面是一个matlab实现4-PSK调制信号AWGN信道下的误比特率和误符号率的仿真的示例代码: ```matlab clear all; close all; clc; nsymbol = 10000; % 信号符号数 T = 1; % 信号时间长度 fs = 100; % 采样率 ts = 1/fs; % 采样时间间隔 t = 0:ts:T-ts; % 采样时间序列 fc = 10; % 信号频率 c = sqrt(2/T)*exp(j*2*pi*fc*t); % 信号载波 c1 = sqrt(2/T)*cos(2*pi*fc*t); % 实部载波 c2 = -sqrt(2/T)*sin(2*pi*fc*t); % 虚部载波 M = 4; % 调制阶数 graycode = [0 1 3 2]; % 灰码映射表 EsN0 = 0:15; % 信噪比范围 snr1 = 10.^(EsN0/10); % 信噪比转换为线性值 msg = randint(1, nsymbol, M); % 生成随机信息序列 msg1 = graycode(msg+1); % 灰码映射 msgmod = pskmod(msg1, M).'; % 进行4-PSK调制 tx = real(msgmod*c); % 加载波调制 tx1 = reshape(tx.', 1, length(msgmod)*length(c)); % 将调制后的信号串并成一行 spow = norm(tx1).^2/nsymbol; % 发送信号功率 % 开始循环计算不同信噪比下的误比特率和误符号率 for indx = 1:length(EsN0) sigma = sqrt(spow/(2*snr1(indx))); % 计算噪声标准差 rx = tx1 + sigma*randn(1, length(tx1)); % 加入高斯噪声 rx1 = reshape(rx, length(c), length(msgmod)); % 将接收信号串并成矩阵 % 解调 r1 = (c1*rx1)/length(c1); r2 = (c2*rx1)/length(c2); r = r1 + j*r2; y = pskdemod(r, M); decmsg = graycode(y+1); % 计算误码率 [err, ber(indx)] = biterr(msg, decmsg, log2(M)); [err, ser(indx)] = symerr(msg, decmsg); end % 理论误码率和误符号率 ser1 = qfunc(sqrt(2*snr1)*sin(pi/M)); ber1 = ser1/log2(M); % 画图 semilogy(EsN0, ber, '-ko', EsN0, ser, '-k*', EsN0, ser1, EsN0, ber1, '-k.'); title('4-PSK调制信号AWGN信道下的性能'); xlabel('Es/N0'); ylabel('误比特率和误符号率'); legend('误比特率', '误符号率', '理论误符号率', '理论误比特率'); ``` 这段代码实现了4-PSK调制信号AWGN信道下的误比特率和误符号率的仿真。和上面的8-PSK调制信号的代码类似,只需要修改一些调制方式和灰码映射表即可。运行代码后会得到一个关于Es/N0的误比特率和误符号率的函数图像,通过图像可以评估4-PSK调制信号AWGN信道下的性能

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值