subplot(325);plot(e);grid on; axis([0 N -2 2]); xlabel('BPSK调制信号');
ylabel('BPSK调制信号幅值'); %作e(BPSK调制信号)的波形图
%信号的频谱
Fs=200; %采样频率
n=length(s); %基带信号长度
f=[0:Fs/n:Fs-Fs/n]-Fs/2; %修正频率f的范围
S=fft(s); %基带信号s的快速傅里叶变换 E=fft(e); %基带信号e的快速傅里叶变换 C=fft(c); %基带信号c的快速傅里叶变换
subplot(322);
plot(f,abs(fftshift(S))); %基带信号的频谱 title('基带信号频谱');
xlabel('f/hz');ylabel('S(w)'); grid on; subplot(324);
plot(f,abs(fftshift(C))); %载波信号的频谱 title('载波信号频谱');
xlabel('f/hz');ylabel('C(w)'); grid on; subplot(326);
plot(f,abs(fftshift(E))); %调制信号的频谱 title('调制信号频谱');
xlabel('f/hz');ylabel('E(w)'); grid on;
%加高斯噪声
am=0.7; %输入信号经信道后振幅由1衰减为0.7 SNR=5; %输入信噪比 snr=10^(SNR/10);
11
N0=(am*am)/2/snr; %计算噪声功率
N0_db=10*log10(N0); %将噪声功率转换为dBW ni=wgn(1,N,N0_db); % 产生1行N列的高斯噪声
yi=e+ni; %BSK已调信号中加入白噪声,输入信噪比为SNR figure(2);subplot(2,1,1);plot(yi);grid on; xlabel('加入高斯白噪声的已调信号yi(t)');
%带通滤波器
[b1,a1] = butter(3,[2*pi*0.0001,2*pi*0.01]); %计算带通滤波器的H(z)系数 y=filter(b1,a1,yi); %对信号yi进行滤波,得到信号y figure(2);subplot(2,1,2);plot(y);grid on; xlabel('经带通滤波器后信号');
%与恢复载波相乘
x1=2*c.*y;
figure(3);subplot(2,1,1);plot(x1);grid on xlabel('与恢复载波相乘后的信号x1(t)');
%低通滤波器
[b2,a2]=butter(2,0.005); %计算H(z)系数 ,频率为(1/200) x=filter(b2,a2,x1); %对信号x1滤波,得到信号x figure(3);subplot(2,1,2);plot(x);grid on
axis([0 N -2 2]);xlabel('经低通滤波器后信号波形')
%抽样判决
x=fun_panjue(x);%调用函数,进行抽样判决 figure(4);subplot(2,1,1);plot(x);grid on; xlabel('加噪后解调信号x(t)'); axis([0 N -2 2]);
%消除延迟
x=fun_yanc(x); %调用函数,进行消除延迟 figure(4);subplot(2,1,2);plot(x);grid on;
12
xlabel('加噪后去掉延迟的解调信号x(t)'); axis([0 N -2 2]);
%误码率计算
Err1=length(find(x~=s)) %计算解调信号中错误码元个数 Pe_test1=Err1/N %计算实际误码率
Pe1=(1/2)*erfc(sqrt(snr)) %计算系统理论误码率
% 理论误码率曲线
Pe=[]; for SNR=1:10
am=0.7; %输入信号经信道后振幅由1衰减为0.7 E=am*am/2; snr=10^(SNR/10); N0=(am*am)/(2*snr);
no=N0/(2*200); %计算噪声功率
N0_db=10*log10(N0);%将噪声功率转换为dBW ni=wgn(1,N,N0_db);% 产生1行N列的高斯噪声
yi=e+ni; %BSK已调信号中加入白噪声,输入信噪比为SNR y=filter(b1,a1,yi);%对yi进行滤波(带通滤波器),得到信号y x1=2*c.*y; %与恢复载波相乘
xx=filter(b2,a2,x1); %经低通滤波器滤波 xx=fun_panjue(xx);%抽样判决 xx=fun_yanc(xx); %消除延迟 snr=10^(SNR/10);
Pe=[Pe,(1/2)*erfc(sqrt(snr))]; %计算理论误码率 end Pe; figure; SNR=1:10;
semilogy(SNR,Pe,'b--');hold on %以log10(Pe)为纵坐标画图
13
grid on
子程序一:抽样判决
(由于存在“倒pi”现象,故以0为基准进行判决,大于0,判为0;小于0,判为1) function w=fun_panjue(w) N=length(w); if w(100)>0 w(1:100)=0; else
w(1:100)=1; end
for i=101:N if w(i)>0; w(i)=0; else
w(i)=1; end end
子函数二:消除延迟
(由于抽样判决后会产生延迟,故认为对解调信号进行时移,以减小甚至消除延迟,便于与基带信号进行比较,计算实际误码率) function m=fun_yanc(m) N=length(m); leng=0; if m(1)==0 for i=1:N
if m(i)==1 leng=i; break; end end else
for i=1:N
if m(i)==0 leng=i; break; end end end
leng1=leng-(floor(leng/200))*200; for i=1:(N-leng1) m(i)=m(i+leng1); end
14
for i=(N-leng1):N m(i)=m(N-200+10); end
4.4仿真波形图:
基带信号频谱基带信号幅值20-2050010001500基带信号s(t)20001000S(w)5000-100-50050f/hz载波信号频谱100BPSK调制信号幅值BPSK载波信号幅值20-2050010001500BPSK载波信号20002000C(w)10000-100-50050f/hz调制信号频谱10020-2050010001500BPSK调制信号2000500E(w)0-100-500f/hz50100
图7 基带信号、载波信号和调制信号时域及频域波形图
15