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

📄 bpsk.m

📁 在matlab下输入guide命令后打开main_main.gig 实现卷积编码
💻 M
字号:
%本程序中时间单位是微秒
%频率单位为MHz
%码元速率单位是Mb/s

global dt df t f N
close all

N=2^13;   %采样点数
L=64;    %每码元的采样点数
M=N/L ;    %码元数
Rb=2;
Ts=0.5	;	%码元宽度是0.5us
dt=Ts/L;        
df=1/(N*dt);     %MHz
T=N*dt ;         %截短时间
Bs=N*df/2  ;     %系统带宽
n0=0.03;
alpha=0.5;	%滚降系数
Na=4;  %示波器扫描宽度为4个码元
f0=5%载波频率
carry=cos(2*pi*f0*t);

t=[-T/2+dt/2:dt:T/2]; %时域横坐标
f=[-Bs+df/2:df:Bs];   %频域横坐标

figure(1)
 set(1,'Position',[10,50,400,400])
                %设定窗口位置及大小 
figure(2)
 set(2,'Position',[410,50,400,400])
                %设定窗口位置及大小 
figure(3)
set(3,'Position',[520,150,500,400])
%设定窗口位置及大小 

%升余弦
hr1=sin(pi*t/Ts)./(pi*t/Ts);
hr2=cos(alpha*pi*t/Ts)./(1-(2*alpha*t/Ts).^2);
hr=hr1.*hr2;
HR=abs(t2f(hr));
%取模是为了忽略时延
GT=sqrt(HR);
GR=GT;  

sita=n0*Bs; %信道中噪声功率
n_ch=sqrt(sita)*randn(size(t)); %信道噪声

%EP=zeros(size(f))+eps;
EPR=zeros(size(f))+eps;
for ii=1:20               
    a=sign(randn(1,M));
    imp=zeros(1,N);    %产生冲激序列
    imp(L/2:L:N)=a/dt;
    IMP=t2f(imp);   
    s2= real(f2t(IMP.*GT));
    s3=s2.*carry;%发送信号
    s4=s3+n_ch;
    s5=s4.*carry;
    s6=real(f2t(GR.*t2f(s5))); %接收信号    
    % S2=t2f(s2);    %S是s的傅氏变换
    %P=S.*conj(S)/T;    %功率谱
    SR=t2f(s6);    %SR是接收信号的傅氏变换
    PR=SR.*conj(SR)/T;    %功率谱
    %EP=(EP*(ii-1)+P+eps)/ii;
    EPR=(EPR*(ii-1)+PR+eps)/ii;
end

figure(1)
subplot(2,1,1)%发送信号,即已调信号波形
plot(t,s3,'b')
grid
axis([0,+5,-2,2'])
xlabel('t (ms)')
ylabel('s(t) (V)')
figure(1)
subplot(2,1,2)%接收信号的波形,即解调信号的波形
plot(t,s6,'b')
grid
axis([-10,+10,-2,2'])
xlabel('t (ms)')
ylabel('s(t) (V)')


figure(2)
subplot(2,1,1)%接收信号的功率谱
aa=30+10*log10(EPR+eps);    %加eps以避免除以零
plot(f,aa,'b');
grid
axis([-10,+10,-50,50])
xlabel('f  (MHz)')
ylabel('Ps(f)   (dBm/MHz)')
figure(2)
subplot(2,1,2)%接收信号的眼图
tt=[0:dt:Na*L*dt];
for jj=1:Na*L:N-Na*L
    plot(tt,s6(jj:jj+Na*L));
    hold on
end
grid

%%%%%%误码率曲线%%%%%%%%%%
clear Eb_N0 Pe
for loop1=1:10
    Eb_N0(loop1)=(loop1-1)  %Eb/N0 in dB
    eb_n0(loop1)=10^(Eb_N0(loop1)/10);
    Eb=1;	
    n0=Eb/eb_n0(loop1) %信道的噪声谱密度   
    sita=n0*Bs; %信道中噪声功率    
    
    n_err=0;     %误码计数
    for loop2=1:5  
        a=sign(randn(1,M));
        imp=zeros(1,N);    %产生冲激序列
        imp(L/2:L:N)=a/dt;
        IMP=t2f(imp);   
        s2= real(f2t(IMP.*GT));
        s3=s2.*carry;%发送信号
        n_ch=sqrt(sita)*randn(size(t)); %信道噪声
        s4=s3+n_ch;
        s5=s4.*carry;
        s6=real(f2t(GR.*t2f(s5))); %接收信号
        y=s6(L/2:L:N);		  %取样
        aaaa=sign(y);       %判决                 
        n_err=n_err+length(find(aaaa~=a)) ; 
    end
  
    Pe(loop1)=n_err/(M*loop2)
    figure(3) 
    grid
    semilogy(Eb_N0,Pe,'g');
    eb_n0=10.^(Eb_N0/10);
    hold on
    semilogy(Eb_N0,0.5*erfc(sqrt(eb_n0)));
    axis([0,9,1e-4,1])
    xlabel('Eb/N0')
    ylabel('Pe')
end

⌨️ 快捷键说明

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