matlab 8fsk,MFSK蒙特卡洛仿真与理论误码率的对比
close all;clear;clc
% MFSK的误码率仿真,M可变
snrStart = 0; % snr初始值
snrStep = 1; % 步长
snrEnd = 15; % snr结束
Nsnr =
numel(snrStart:snrStep:snrEnd); % 仿真信噪比个数
simNum = 100; % 仿真次数
Nsym = 667; % Mfsk的符号数
mcnt = 0;
for mm = 2.^[1,2,3];
mcnt = mcnt 1;
M = mm; %
单符号的bit次,MFSK中的M,要为2的幂次,即M=2^k,k为整数
k = log2(M); % 每符号表示的比特数
Nbit = Nsym*k; % 可以设置原始比特数,8ask时,初始点数为3的倍数
%% 8fsk的星座图
mapping = 0:M-1;
nsamp = 8; % 每符号采样点数
freqsep = 1/M; % 符号频率间隔
%%
ErrSymN = zeros(1,Nsnr); %
符号错误数
ErrBitN = zeros(1,Nsnr); %
比特错误数
snrCnt = 0; % 信噪比下标
for snr = snrStart:snrStep:snrEnd
snrCnt = snrCnt 1;
for ii = 1:simNum
sourceBit = round(rand(1,Nbit)); % 生成原始比特
symMod = zeros(1,Nsym);
% 调制
for jj = 1:Nsym
symMod(jj) =
mapping(bin2dec(num2str(sourceBit(k*jj-k 1:k*jj))) 1);
% symMod(jj) = mapping(4*sourceBit(3*jj-2)
2*sourceBit(3*jj-1) sourceBit(3*jj) 1);
end
txsig = fskmod(symMod,M,freqsep,nsamp); % FSK
Modulate
% 加噪声
rxsig = awgn(txsig,snr-10*log10(nsamp),'measured');
% 考虑每个采样点的信噪比
% 解调
demodSym = fskdemod(rxsig,M,freqsep,nsamp); % FSK
Demodulate(非相干解调)
demodBit = zeros(1,Nbit); % 解调得到的比特流
for jj = 1:Nsym
minIndex = find(mapping==demodSym(jj));
demodBit(k*jj-k 1:k*jj) =
bitget(minIndex-1,k:-1:1);
end
ErrSymN(snrCnt) = ErrSymN(snrCnt)
sum(demodSym~=symMod);
ErrBitN(snrCnt) = ErrBitN(snrCnt)
sum(demodBit~=sourceBit);
% 显示指定信噪比情况下的星座图
if snr==0 &&
ii==1
scatterplot(txsig,[],[],'.')
legend('发射符号','Location','Best')
title(sprintf('M = %g',M))
scatterplot(rxsig,[],[],'.r')
legend(['接收符号(',num2str(snr),'dB)'],'Location','Best')
title(sprintf('M = %g',M))
pause(0.1)
end
end
end
% 统计误码率和误比特率
ErrSymRate(mcnt,:) = ErrSymN / Nsym /
simNum; % 误码率
ErrBitRate(mcnt,:) = ErrBitN / Nbit /
simNum; % 误比特率
%%
ErrBitRate_th(mcnt,:) =
berawgn((snrStart:snrStep:snrEnd)-pow2db(k),'fsk',M,'noncoherent'); %
理论误比特率
ErrSymRate_th(mcnt,:) = 2*(M-1)/M *
ErrBitRate_th(mcnt,:); % 理论误码率
end
figure
semilogy(snrStart:snrStep:snrEnd,[ErrSymRate;ErrSymRate_th])
grid
title('误码率')
xlabel('SNR(dB)')
legend('2FSK仿真结果','QFSK仿真结果','8FSK仿真结果','2FSK理论结果','QFSK理论结果','8FSK理论结果','Location','Best')
%
figure
semilogy(snrStart:snrStep:snrEnd,[ErrBitRate;ErrBitRate_th])
grid
title('误比特率')
xlabel('SNR(dB)')
legend('2FSK仿真结果','QFSK仿真结果','8FSK仿真结果','2FSK理论结果','QFSK理论结果','8FSK理论结果','Location','Best')
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)