Matlab——通信原理小程序

来源:互联网 发布:淘宝店铺怎么重新装修 编辑:程序博客网 时间:2024/06/05 08:11

概述

通信原理课上老师布置的作业

  1. AM,DSB,SSB信号的功率谱计算及其相干解调
  2. 2ASK,2FSK,2PSK信号功率谱及这三种信号信噪比与误码率之间的关系

AM,DSB,SSB信号功率谱计算及其相干解调

%% 通信原理作业1%% variable clcclear allA0=1;A1=1; A2=1;dt=0.0001;  T=3; df=1/T; N=T/dt;f=(-N/2:N/2-1)*df;f1=1; w1=2*pi*f1;f2=10; w2=2*pi*f2;fc=f2; fs=1/dt;x=0:dt:(T-dt);y1=A1*sin(w1.*x);y2=A2*cos(w2.*x);%% m(t)  c(t)figure(1)subplot(2,1,1); plot(x,y1,'linewidth',1.5); grid ontitle('m(t)');subplot(2,1,2); plot(x,y2,'linewidth',1.5); grid ontitle('c(t)');figure(2)%% AMyAM=(A0+y1).*y2;                                 % AM pAM=fft(yAM); pAM=T/N*fftshift(pAM);  % fft&shift pAM=(abs(pAM).^2)/x(end);subplot(2,3,1); plot(x,yAM); axis([x(1),x(N),1.2*min(yAM),1.2*max(yAM)]); grid on title('AM');subplot(2,3,4); plot(f,pAM); axis([-1.5*f2,1.5*f2,0,max(pAM)]); grid ontitle('功率谱');%% DSByDSB=y1.*y2;                                 % DSB pDSB=fft(yDSB); pDSB=T/N*fftshift(pDSB);  % fft&shift pDSB=(abs(pDSB).^2)/x(end);subplot(2,3,2); plot(x,yDSB);  axis([x(1),x(N),1.2*min(yDSB),1.2*max(yDSB)]); grid on title('DSB');subplot(2,3,5); plot(f,pDSB); axis([-1.5*f2,1.5*f2,0,max(pDSB)]); grid ontitle('功率谱');%% SSBySSB=real(hilbert(y1).*exp(1i*2*pi*f2*x));pSSB=fft(ySSB); pSSB=T/N*fftshift(pSSB);  % fft&shift pSSB=(abs(pSSB).^2)/x(end);subplot(2,3,3); plot(x,ySSB);  axis([x(1),x(N),1.2*min(ySSB),1.2*max(ySSB)]); grid on title('SSB');subplot(2,3,6); plot(f,pSSB); axis([-1.5*f2,1.5*f2,0,max(pSSB)]); grid ontitle('功率谱');demod_am=demod(yAM,fc,fs,'am');demod_dsb=demod(yDSB,fc,fs,'amdsb-sc');demod_ssb=demod(ySSB,fc,fs,'amssb');%% 解调figure(3)subplot(3,1,1); plot(x,demod_am,x,y1,'r');grid ontitle('AM相干解调')subplot(3,1,2); plot(x,demod_dsb,x,y1,'r');grid ontitle('DSB相干解调')subplot(3,1,3); plot(x,demod_ssb,x,y1,'r');grid ontitle('SSB相干解调')

2ASK,2FSK,2PSK信号功率谱及这三种信号信噪比与误码率之间的关系

%% 通信原理作业2%% varibaleclcclear allclose alln=1000;n_display=10;b=randint(1,n);f1=1;f2=2; ffsk_neg=f2;t=0:1/30:1-1/30;dt=1/30;T=n;df=1/T; N=T/dt;f=(-N/2:N/2-1)*df;%% 方便根据信噪比计算误码率------将信号能量转化为单位能量%% 2ASKsa_pos=sin(2*pi*f1*t);E1=sum(sa_pos.^2);sa_pos=sa_pos/sqrt(E1); %sa_neg=0*sin(2*pi*f1*t);%% 2FSKsf_neg=sin(2*pi*f1*t);E=sum(sf_neg.^2);sf_neg=sf_neg/sqrt(E);sf_pos=sin(2*pi*f2*t);E=sum(sf_pos.^2);sf_pos=sf_pos/sqrt(E);%% 2PSKsp_neg=-sin(2*pi*f1*t)/sqrt(E1);sp_pos=sin(2*pi*f1*t)/sqrt(E1);%% 调制ask_signal=[];psk_signal=[];fsk_signal=[];for i=1:n    if b(i)==1        ask_signal=[ask_signal sa_pos];        psk_signal=[psk_signal sp_pos];        fsk_signal=[fsk_signal sf_pos];    else        ask_signal=[ask_signal sa_neg];        psk_signal=[psk_signal sp_neg];        fsk_signal=[fsk_signal sf_neg];    endend%% 10个码元序列-----用于波形显示figure(1)subplot(4,1,1)stairs(0:n_display,[b(1:n_display) b(n_display)],'linewidth',1.5)axis([0 n_display -0.5 1.5]); grid onsubplot(4,1,2)tb=0:1/30:10-1/30;plot(tb, ask_signal(1:10*30),'b','linewidth',1.5)title('2ASK');grid onsubplot(4,1,3)plot(tb, fsk_signal(1:10*30),'r','linewidth',1.5)title('2FSK');grid onsubplot(4,1,4)plot(tb, psk_signal(1:10*30),'k','linewidth',1.5)title('2PSK');grid on%% 对全部码元序列计算PSDfigure(2) subplot(3,1,1)pask_signal=(abs(T/N*fftshift(fft(ask_signal(1:T*30)))).^2)/T;pfsk_signal=(abs(T/N*fftshift(fft(fsk_signal(1:T*30)))).^2)/T;ppsk_signal=(abs(T/N*fftshift(fft(psk_signal(1:T*30)))).^2)/T;subplot(3,1,1); plot(f,pask_signal,'linewidth',1.5);axis([-ffsk_neg*2,ffsk_neg*2,0,max(pask_signal)]);title('2ASK 功率谱');grid onsubplot(3,1,2); plot(f,pfsk_signal,'linewidth',1.5);axis([-ffsk_neg*2,ffsk_neg*2,0,max(pfsk_signal)]);title('2FSK 功率谱');grid onsubplot(3,1,3); plot(f,ppsk_signal);axis([-ffsk_neg*2,ffsk_neg*2,0,max(ppsk_signal)]);title('2PSK 功率谱');grid on%% 添加高斯白噪声计算误码率biterror_ask=zeros(1,21);biterror_fsk=zeros(1,21);biterror_psk=zeros(1,21);for snr=0:20    askn=awgn(ask_signal,snr);    pskn=awgn(psk_signal,snr);    fskn=awgn(fsk_signal,snr);    A = zeros(1,n);    F = zeros(1,n);    P = zeros(1,n);    for i=1:n        if sum(sa_pos.*askn(1+30*(i-1):30*i))>0.5  %相干解调和抽样判决,没有加带通滤波器            A(i)=1;        end        if sum(sf_pos.*fskn(1+30*(i-1):30*i))>0.5            F(i)=1;        end        if sum(sp_pos.*pskn(1+30*(i-1):30*i))>0            P(i)=1;        end    end    errA=0;errF=0; errP=0;    for i=1:n        if A(i)~=b(i)            errA=errA+1;        end        if F(i)~=b(i)            errF=errF+1;        end        if P(i)~=b(i)            errP=errP+1;        end    end    biterror_ask(snr+1)=errA/n;    biterror_fsk(snr+1)=errF/n;    biterror_psk(snr+1)=errP/n;end%%figure(3)semilogy(0:20,biterror_ask, 'b','linewidth',2)%plot(0:20,biterror_ask, 'b','linewidth',2)grid on;hold onsemilogy(0:20,biterror_fsk,'r','linewidth',2)semilogy(0:20,biterror_psk, 'k','linewidth',2)title('biterror rate & S/N')legend('ASK','FSK','PSK');
0 0
原创粉丝点击