matlab8fsk,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; % 误⽐特率
modulate%%
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')
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论