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')

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐