怎样蒸春饼:2PSK及4PSK调制、加噪、解调、求误比特率程序

来源:百度文库 编辑:偶看新闻 时间:2024/05/02 01:43:54
clc
clear
%%%%%%%%%%%%%%%%%%%%%%%%%%2PSK及4PSK调制、加噪、解调、求误比特率程序%%%%%%%%%%%%%%%%%%%%%%
M=2;%M取值为2或4,分别代表2PSK及4PSK调制
k=log2(M);%每符号含比特数
ns=1;%过采样因子???
transmit_bit_length=3e4;%需要处理的比特数
transmit_bit=randint(transmit_bit_length,1); %随机二进制数据产生
if M==2;%如果为2PSK调制则每比特代表一个符号
    Signal=transmit_bit;
elseif M==4%如果为4PSK则每2比特表示一个符号并将其转换为十进制
    Signal=bi2de(reshape(transmit_bit,k,length(transmit_bit)/k).','left-msb');
end
modSignal = modulate( modem.pskmod('M', M),Signal);%调制Eb_No=1:10;%Eb/No变化范围
snr=Eb_No+10*log10(k)-10*log10(ns);%相应信噪比变化范围for i=1:length(Eb_No)
    transmit_signal=awgn(modSignal,snr(i),'measured'); %加噪过程
    receive_signal = demodulate(modem.pskdemod('M', M),transmit_signal);%解调过程
    if M==2
        receive_bit=receive_signal;
        [number_of_errors(i),bit_error_rate(i)] = biterr(transmit_bit,receive_bit);%计算2PSK误比特率
    elseif M==4
        receive_bit= de2bi(receive_signal,'left-msb');                         %十进制符号转换为二进制比特数
        receive_bit= reshape(receive_bit.',numel(receive_bit),1);              %将矩阵变为与发送数据相同的行和列
        [number_of_errors(i),bit_error_rate(i)] = biterr(transmit_bit,receive_bit);%计算4PSK误比特率
    end
endsemilogy(Eb_No,bit_error_rate,'*b-')
xlabel('Eb/No')
ylabel('Pb')
legend('PSK调制方式下误比特率与Eb/No关系')