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

📄 bpsk.asv

📁 matlab实现的简单BPSK调制
💻 ASV
字号:
global dt t df N f
close all
clear Eb_N0 Pe
N=2^14; 	 %采样点数
L=64;   		     
M=N/L   	 %码元数
Rb=2;		 %码速率是2Mb/s
Ts=1/Rb;       %码元间隔
dt=Ts/L;        %时域采样间隔
df=1/(N*dt);   %频域采样间隔
T=N*dt ;        %截短时间
Bs=N*df/2   ;  %系统带宽
Na=4;           %示波器扫描宽度为4个码元
f0=5;

alpha=0.5
t=linspace(-T/2,T/2,N);
f=linspace(-Bs,Bs,N)+eps;
g1=sin(pi*t/Ts)./(pi*t/Ts);
g2=cos(alpha*pi*t/Ts)./(1-(2*alpha*t/Ts).^2);
g=g1.*g2;		 %升余弦脉冲波形
G=t2f(g);
GG=abs(G);
GR=sqrt(GG);
GT=GR;

EPIN=zeros(1,N)+eps;
EPOUT=zeros(1,N)+eps;
EP=zeros(1,N)+eps;

for loop1=1:10
 Eb_N0(loop1)=(loop1-1)  ;
 eb_n0(loop1)=10^(Eb_N0(loop1)/10);%分贝值变为真值
 Eb=1;	                     %每码元能量为1
 n0=Eb/eb_n0(loop1);         %信道噪声谱密度 
 noiseP=n0*Bs; 			     %噪声功率 
 n_err=0;  

for j1=1:3
 a=sign(randn(1,M));   %发送M个码元,序列为a  -1,+1
 
  for ii=1:L
        anrz(ii+[0:M-1]*L)=a;
    end
 
 imp=zeros(1,N);      %产生冲激序列
 imp(L/2:L:N)=a/dt;
 IMP=t2f(imp);
 S=IMP.*GT;         %经过发送成型滤波器后的输入信号的傅氏变换
 PIN=S.*conj(S)/T;
 EPIN=(EPIN*(j1-1)+PIN+eps)/j1;   %经过发送成型滤波器后的输入信号的功率谱
 logpin=10*log10(EPIN+eps);
 s=f2t(S);
 ss=s.*cos(2*pi*f0*t);
 SS=t2f(s);
 P=SS.*conj(S)/T;
 EP=(EP*(j1-1)+P+eps)/j1; 
 logp=10*log10(EP+eps);
 
 n_ch=sqrt(noiseP)*randn(size(t)); %信道噪声
 nr=real(f2t(t2f(n_ch.*cos(2*pi*f0*t)).*GR)); %输出的噪声实部!!!!!!!!!!!!!
 
 R=t2f(ss.*cos(2*pi*f0*t)).*GR  ; %接收到的信号  !!!!!!!!!!!!!!!!!!!!!!!!
 POUT=R.*conj(R)/T;
 EPOUT=(EPOUT*(j1-1)+POUT+eps)/j1; 
 logpout=10*log10(EPOUT+eps);
 r=f2t(R);
 
 rey=real(r)+nr;
 REY=t2f(rey); 
 yy=rey(L/2:L:N);
 aa=sign(yy);
 n_err=n_err+length(find(aa~=a)) ; 
end
Pe(loop1)=n_err/(M*j1);	%误码率 %M码元数   
for ii=1:L
        aanrz(ii+[0:M-1]*L)=aa;
    end
if loop1==10
figure(1)
hold on
 tt=[0:dt:Na*64*dt];
 for jj=1:Na*32:N-Na*32
  plot(tt,rey(jj:jj+Na*32));
 end
grid 
axis([0,2,-1.5,1.5]);
 xlabel('t (us)')
 ylabel('s(t) (V)');
 title('接收端抽样前的眼图  ');
 set(1,'position',[10,10,300,200])
end
end

figure(2)
plot(f,logpin,'r')
xlabel('f(MHZ)');
ylabel('Ps(f)(dB)');
title('发送信号的功率谱');
set(2,'position',[250,10,300,200]);
axis([-5,5,-100,50]);

figure(3)
hold on
 tt=[0:dt:Na*32*dt];
 for jj=1:Na*32:N-Na*32
  plot(tt,s(jj:jj+Na*32));
 end
grid 
axis([0,2,-3,3]);
 xlabel('t (us)')
 ylabel('s(t) (V)');
 title('基带信号的眼图  ');
set(3,'position',[550,10,300,200]);

figure(4)
plot(f,logp,'r')
xlabel('f(MHZ)');
ylabel('Ps(f)(dB)');
title('频带信号的功率谱');
set(4,'position',[800,10,300,200]);
axis([-10,10,-100,50]);

 figure(5) 
  semilogy(Eb_N0,Pe,'g');       %y轴为对数坐标
eb_n0=10.^(Eb_N0/10);	%还原为真值 
  hold on
  semilogy(Eb_N0,0.5*erfc(sqrt(eb_n0)),'red');
  axis([0,9,1e-4,1])
 title('pe曲线');
  xlabel('Eb/N0  dB')
  ylabel('Pe')   
set(5,'position',[10,250,300,200])  ;

  figure(6)
  plot(t,f2t(S),'b');
  axis([-5,5,-2.5,2.5]);
  grid;
  title('发送基带信号波形');
  xlabel('t  (uV)')
  ylabel('s(t)') 
  set(6,'position',[250,250,300,200])  ;

  
  figure(7)
  plot(f,abs(S),'b');
  axis([-3,3,0,40]);
  grid;
  title('发送基带信号频谱');
  xlabel('f (MHz)')
  ylabel('S(f)') 
  set(7,'position',[550,250,300,200])  ;

  
  figure(8)
  plot(t,ss,'b');
  axis([-5,5,-2,2]);
  grid;
  title('发送信号波形(调制后)');
  xlabel('t  (us)')
  ylabel('ss(t)') 
  set(8,'position',[800,250,300,200])  ;

  
  figure(9)
  plot(f,abs(t2f(ss)),'b');
  axis([-8,8,0,40]);
  grid;
  title('发送信号频谱(调制后)');
  xlabel('f (MHz)')
  ylabel('SS(f)') ;
  set(9,'position',[10,500,300,200])  ;

  
  figure(10)
  plot(t,rey,'b');
  axis([-5,5,-2.5,2.5]);
  grid;
  title('接收信号波形');
  xlabel('t  (us)')
  ylabel('y(t)') 
  set(10,'position',[250,500,300,200])  ;

  figure(11)
    plot(t,anrz,'g');
    axis([-10,10,-1.5,1.5]);
   xlabel('t(us)');
ylabel('a(V)') ;
title('输入码形');
  set(11,'position',[550,500,300,200])  ;

figure(12)
    plot(t,aanrz,'g');
    axis([-10,10,-1.5,1.5]);
   xlabel('t(us)');
ylabel('aa(V)') ;
title('输出端判决得到的码形');
  set(12,'position',[800,500,300,200])  ;

⌨️ 快捷键说明

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