clc
clear all
nSamp = 2; %矩形脉冲的取样点数
numSymb = 10000; %每种SNR下的传输的符号数
M=4; %fsk的符号类型数
ts=1/(numSymb*nSamp); %信道抽样时间间隔
t=(0:numSymb*nSamp-1)*ts; %信号的抽样时间序列
SNR=0:10; %信噪比从0~10
for ii=1:length(SNR) %从0~10循环
SNR(ii)
msg=randsrc(1,numSymb,[0:M-1]); %产生发送符号,同概率产生numSymb个0,1,2...M-1
msg_gr=msg;
msg_tx=fskmod(msg_gr,M,30,nSamp,100); %4fsk调制 Y = fskmod(X,M,FREQ_SEP,NSAMP)
msg_tx=rectpulse(msg_tx,nSamp); %矩形脉冲成形,表示一个符号的抽样点
chan=rayleighchan(ts,10);%产生瑞利信道
msg_tx1=filter(chan,msg_tx);
msg_rx=awgn(msg_tx,SNR(ii),'measured'); %通过AWGN信道
msg_rx1=awgn(msg_tx1,SNR(ii),'measured'); %通过AWGN信道
msg_rx_down = intdump(msg_rx,nSamp); %匹配滤波相干解调 ,将多个采样点复合为一个点
msg_rx_down1 = intdump(msg_rx1,nSamp); %匹配滤波相干解调 ,将多个采样点复合为一个点
msg_gr_demod = fskdemod(msg_rx_down,M,30,nSamp,100); %4fsk解调 Z = fskdemod(Y,M,FREQ_SEP,NSAMP)
msg_gr_demod1 = fskdemod(msg_rx_down1,M,30,nSamp,100); %fsk解调
msg_demod = msg_gr_demod;
msg_demod1 = msg_gr_demod1;
[errorBit, BER(ii)] = biterr(msg, msg_demod, log2(M)); %计算BER
[errorBit1, BER1(ii)] = biterr(msg, msg_demod1, log2(M)); %计算瑞利加高斯BER
[errorSym, SER(ii)] = symerr(msg, msg_demod); %计算SER
[errorSym, SER1(ii)] = symerr(msg, msg_demod1); %计算瑞利加高斯SER
end
scatterplot(msg_tx(1:100)) %画出发射信号的星座图
title('发射信号星座图')
xlabel('同相分量')
ylabel('正交分量')
scatterplot(msg_rx(1:100)) %画出接收信号的星座图
title('接收信号星座图')
xlabel('同相分量')
ylabel('正交分量')
figure
semilogy(SNR,BER,'-ro',SNR,BER1,'-r*');
%semilogy(SNR,BER,'-ro',SNR,SER,'-r*',SNR,BER1,'-r.',SNR,SER1,'-r^') %画出BER和SNR随SNR变化的曲线
legend('AWGN信道BER','Rayleigh衰落+AWGN信道BER');
title('4fsk在AWGN+瑞利信道下的性能')
xlabel('信噪比(dB)')
ylabel('误符号率和误比特率')
grid on;