⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bpsk_pet.m

📁 BPSK系统结构的Matlab程序
💻 M
字号:
echo off
m=10000; 
ran(1,1:m)=randn(1,m); 
a=zeros(1,m);                              %随机产生qpsk的信号比特1或-1=zeros(1,m);
                                           %随机产生2psk的信号比特1或-1
for     i=1:m                      
 if ran(1,i)>0 
     a(1,i)=1;
 else
     a(1,i)=-1;
 end
end 
signal125=a;
%生成升余弦滤波器
Rs=1600;
nn=10;
fs=nn*Rs;
Ts=1/Rs;
al=0.375;
M=55;     
htl=zeros(1,M);
for k=1:M;
    t=(k-28)/fs;
    W=pi*t/Ts;
    if  t==0
        htl(k)=1;
    elseif (al*W/pi==1/2)|(al*W/pi==-1/2)
        htl(k)=0;
    else
        htl(k)=(sin(W)/W)*(cos(al*W)/(1-(4*al^2*W^2)/(pi^2)));
    end    
end
risecos=htl;                                         
%原始信号抽样
len=length(a);
aa=1;
sig_len=len*nn;
signal=zeros(1,sig_len);
for i=1:len
    signal((i-1)*nn+nn/2+1)=a(i);
end
%波形生成
sig_conv=conv(signal,risecos);
sig_part=sig_conv(28:28+sig_len);

%2psk调制
fc=56000;
W=2*pi*fc/fs;
signal_on=zeros(1,sig_len);

for i=1:sig_len;
   signal_on(1,i)=sig_part(i)*cos(W*i);
end

%加入多径延迟
signalT=zeros(1,sig_len);
for i=3:sig_len
  signalT(i)=0.5*signal_on(i)+0.3*signal_on(i-1)+0.2*signal_on(i-2);
end

echo on
% 加入噪声后
% 产生噪声并计算信噪比
for g=1:50
echo off
SNR=20-g;
signal_out=AWGN(signal_on,SNR);


%2psk解调
signal_demod=zeros(1,sig_len);
for i=1:sig_len
    signal_demod(i)=signal_out(i)*cos(W*i);
end

%通过低通滤波器
N=150;
F=[0,0.2,0.2,1];
A=[1,1,0,0];
LF_Coefficient=firls(N,F,A);
LF_signal_demod=conv(LF_Coefficient,signal_demod);
LF_signal_demod=LF_signal_demod(75+1:sig_len+75);

%输出抽样判决
a_out=zeros(1,sig_len/nn);
for i=1:sig_len/nn
   a_out(i)=LF_signal_demod((i-1)*nn+nn/2+1);
end
% 判决成双极性码并计算误码率
d=sig_len/nn;
signal=zeros(1,d);
for i=1:d
    if a_out(i)>0
        signal(i)=1;
    else
        signal(i)=-1;
    end
end
% 比较
Ne=0;
for i=1:d
    if signal(i)==signal125(i)
        Ne=Ne;
    else
        Ne=Ne+1;
    end
end
signal_Pe(g)=Ne/d;
signal_snr(g)=SNR;
echo on;
disp(g);
disp(SNR);
end

echo on
% 加入噪声后
% 产生噪声并计算信噪比
for g=1:50
echo off
SNR=20-g;
signal_out=AWGN(signalT,SNR);


%2psk解调
signal_demod=zeros(1,sig_len);
for i=1:sig_len
    signal_demod(i)=signal_out(i)*cos(W*i);
end

%通过低通滤波器
N=150;
F=[0,0.2,0.2,1];
A=[1,1,0,0];
LF_Coefficient=firls(N,F,A);
LF_signal_demod=conv(LF_Coefficient,signal_demod);
LF_signal_demod=LF_signal_demod(75+1:sig_len+75);

%输出抽样判决
a_out=zeros(1,sig_len/nn);
for i=1:sig_len/nn
   a_out(i)=LF_signal_demod((i-1)*nn+nn/2+1);
end
% 判决成双极性码并计算误码率
d=sig_len/nn;
signal=zeros(1,d);
for i=1:d
    if a_out(i)>0
        signal(i)=1;
    else
        signal(i)=-1;
    end
end
% 比较
Ne=0;
for i=1:d
    if signal(i)==signal125(i)
        Ne=Ne;
    else
        Ne=Ne+1;
    end
end
signal_PeT(g)=Ne/d;
signal_snrT(g)=SNR;
echo on;
disp(g);
disp(SNR);
end
plot(signal_snr,signal_Pe);xlabel('信噪比值');ylabel('误码率');
ylim([0,0.6]);grid on;title('加入多径延迟前后误码率与信噪比值dB的比较关系');
hold on;
plot(signal_snrT,signal_PeT,'red');xlabel('信噪比值');ylabel('误码率');
ylim([0,0.6]);grid on;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -