·¢²¼Ê±¼ä : ÐÇÆÚÈÕ ÎÄÕ»ùÓÚMATLABµÄÊý×ÖƵ´øͨÐÅϵͳµÄ·ÂÕæ - ͼÎĸüÐÂÍê±Ï¿ªÊ¼ÔĶÁ153736355a8102d276a22f52
±±¾©Óʵç´óѧÊÀ¼ÍѧԺ±ÏÒµÉè¼Æ£¨ÂÛÎÄ£©
% ³éÑùÅоöµÄ¹ý³Ì£¬Óë0×÷±È½Ï£¬data>=0,ÔòÖÃ1£¬·ñÔòÖÃ0 % for n=1:nb/2
% if Ray_sum(Ray_idata2((n-1)/delta_T+1:n/delta_T))>=0 % Ray_idata3(n)=1;
% else Ray_idata3(n)=0; % end
% if Ray_sum(Ray_qdata2((n-1)/delta_T+1:n/delta_T))>=0 % Ray_qdata3(n)=1; % else Ray_qdata3(n)=0; % end % end
% ΪÁËÏÔʾÐÇ×ùͼ,½«ÐźŽøÐд¦Àí Ray_idata4=zeros(1,nb/2); Ray_qdata4=zeros(1,nb/2); for n=1:nb/2
Ray_ichsum(n)=sum(idata2((n-1)/delta_T+1:n/delta_T))*delta_T; if Ray_ichsum(n)>=0 Ray_idata4(n)=1; else Ray_idata4(n)=0; end
Ray_qchsum(n)=sum(qdata2((n-1)/delta_T+1:n/delta_T))*delta_T; if Ray_qchsum(n)>=0 Ray_qdata4(n)=1; else Ray_qdata4(n)=0; end end
% ½«ÅоöÖ®ºóµÄÊý¾Ý´æ·Å½øÊý×é Ray_demodata=zeros(1,nb);
Ray_demodata(1:ml:(nb-1))=Ray_idata4; % ´æ·ÅÆæÊýλ Ray_demodata(2:ml:nb)=Ray_qdata4; % ´æ·ÅżÊýλ
%ΪÁËÏÔʾ£¬½«Ëü±ä³É²¨ÐÎÐźţ¨¼´´«ÊäÒ»¸ö1´ú±íµ¥Î»¿í¶ÈµÄ¸ßµçƽ£© Ray_demodata1=zeros(1,nb/delta_T); % ´´½¨Ò»¸ö1*nb/delta_TµÄÁã¾ØÕó for q=1:nb
Ray_demodata1((q-1)/delta_T+1:q/delta_T)=Ray_demodata(q); % ½«¼«ÐÔÂë±ä³É¶ÔÓ¦µÄ²¨ÐÎÐźŠend
% ÀÛ¼ÆÎóÂëÊý
% abs(demodata-data)Çó½ÓÊն˺ͷ¢Éä¶Ë
% Êý¾Ý²îµÄ¾ø¶ÔÖµ£¬ÀÛ¼ÆÖ®ºó¾ÍÊÇÎóÂë¸öÊý Ray_num_BER=sum(abs(Ray_demodata-data))
34
±±¾©Óʵç´óѧÊÀ¼ÍѧԺ±ÏÒµÉè¼Æ£¨ÂÛÎÄ£©
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% ÎóÂëÂʼÆËã
%% µ÷ÓÃÁËcm_sm32();ºÍcm_sm33(£©º¯Êý %%ÉùÃ÷£º º¯ÊýÉùÃ÷ÔÚÁíÍâÁ©¸öMÎļþÖÐ
%%×÷Ó㺠cm_sm32()ÓÃÓÚÈðÀûÐŵÀÎóÂëÂʵļÆËã %% cm_sm33()ÓÃÓÚ¸ß˹ÐŵÀÎóÂëÂʵļÆËã %% ecoh on/off ×÷ÓÃÔÚÓÚ¾ö¶¨ÊÇ·ñÏÔʾָÁîÄÚÈÝ
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% SNRindB1=0:1:8; SNRindB2=0:0.1:8; % ÈðÀûË¥ÂäÐŵÀ
for i=1:length(SNRindB1),
[pb,ps]=cm_sm32(SNRindB1(i)); % ±ÈÌØÎóÂëÂÊ smld_bit_ray_err_prb(i)=pb; smld_symbol_ray_err_prb(i)=ps; disp([ps,pb]); echo off; end;
% ¸ß˹ÐŵÀ echo on;
for i=1:length(SNRindB1),
[pb1,ps1]=cm_sm33(SNRindB1(i)); smld_bit_awgn_err_prb(i)=pb1; smld_symbol_awgn_err_prb(i)=ps1; disp([ps1,pb1]); echo off; end;
% ÀíÂÛÇúÏß echo on;
for i=1:length(SNRindB2),
SNR=exp(SNRindB2(i)*log(10)/10); % ÐÅÔë±È
theo_err_awgn_prb(i)=0.5*erfc(sqrt(SNR)); % ¸ß˹ÔëÉùÀíÂÛÎóÂëÂÊ theo_err_ray_prb(i)=0.5*(1-1/sqrt(1+1/SNR)); % ÈðÀûË¥ÂäÐŵÀÀíÂÛÎóÂëÂÊ echo off; end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
h = spectrum.welch; % ÀàËÆÓÚCÓïÑԵĺ궨Ò壬·½±ãÒÔϵĵ÷Óà %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % µÚÒ»²¿·Ö£¨ÀíÏ룩
35
±±¾©Óʵç´óѧÊÀ¼ÍѧԺ±ÏÒµÉè¼Æ£¨ÂÛÎÄ£©
figure(1) subplot(212);
psd(h,data0,'fs',fs),title('»ù´øÐźŹ¦ÂÊÆ×ÃܶÈ'); subplot(211);
plot(data0),title('»ù´øÐźÅ'); axis([0 20000 -2 2]);
figure(2) subplot(212);
psd(h,s,'fs',fs),title('µ÷ÖÆÐźŹ¦ÂÊÆ×ÃܶÈ'); subplot(211);
plot(s),title('µ÷ÖÆÐźÅ'); axis([0 500 -3 3]);
figure(3) subplot(212);
psd(h,demodata1,'fs',fs),title('½âµ÷Êä³ö¹¦ÂÊÆ×ÃܶÈ'); subplot(211);
plot(demodata1),title('½âµ÷Êä³ö'); axis([0 20000 -2 2]);
figure(4) subplot(313);
psd(h,s1,'fs',fs),title('µ÷ÖÆÐźŹ¦ÂÊÆ×ÃܶÈ(Awgn)'); subplot(312);
plot(s1),title('µ÷ÖÆÐźÅ(Awgn)'); axis([0 500 -5 5]); subplot(311);
plot(s111),title('¸ß˹ÔëÉùÇúÏß'); axis([0 2000 -5 5]);
figure(5) for i=1:nb/2
plot(idata(i),qdata(i),'r+'),title('QPSKÐźÅÐÇ×ùͼ£¨Awgn£©');hold on; legend('ÀíÂÛÖµ£¨·¢Éä¶Ë£©','ʵ¼ÊÖµ£¨½ÓÊնˣ©'); axis([-2 2 -2 2]);
plot(Awgn_ichsum(i),Awgn_qchsum(i),'*');hold on; end
figure(6) subplot(111)
36
±±¾©Óʵç´óѧÊÀ¼ÍѧԺ±ÏÒµÉè¼Æ£¨ÂÛÎÄ£©
semilogy(SNRindB2,theo_err_awgn_prb,'r'),title('ÎóÂëÂÊÇúÏß');hold on; semilogy(SNRindB1,smld_bit_awgn_err_prb,'r*');hold on; semilogy(SNRindB2,theo_err_ray_prb);hold on; semilogy(SNRindB1,smld_bit_ray_err_prb,'*'); xlabel('Eb/No');ylabel('BER');
legend('ÀíÂÛAWGN','·ÂÕæAWGN','ÀíÂÛRayleigh','·ÂÕæRayleigh');
¶þ£®QPAKºÍOQPSK¶Ô±È·ÂÕæ³ÌÐò£º
%QPSK & OQPSK clear all; close all;
M=4; Ts=1; fc=10;
N_sample=16; N_num=100;
dt=1/fc/N_sample; t=0:dt:N_num*Ts-dt; T=dt*length(t);
py1f=zeros(1,length(t)); %¹¦ÂÊÆ×ÃܶÈ1 py2f=zeros(1,length(t)); %¹¦ÂÊÆ×ÃܶÈ2
for PL=1:100 %ÊäÈë100¶ÎN_num¸öÂë×ֵIJ¨ÐΣ¬ÎªÁËʹ¹¦ÂÊÆ×Ãܶȿ´ÆðÀ´¸ü¼Óƽ»¬£¬
%¿ÉÒÔÈ¡Õâ100¶ÎÐźŹ¦ÂÊÆ×ÃܶȵÄƽ¾ù d1=sign(randn(1,N_num)); d2=sign(randn(1,N_num)); gt=ones(1,fc*N_sample);
%QPSKµ÷ÖÆ
s1=sigexpand(d1,fc*N_sample); s2=sigexpand(d2,fc*N_sample); b1=conv(s1,gt); b2=conv(s2,gt); s1=b1(1:length(s1)); s2=b2(1:length(s2));
st_qpsk=s1.*cos(2*pi*fc*t)-s2.*sin(2*pi*fc*t);
37
±±¾©Óʵç´óѧÊÀ¼ÍѧԺ±ÏÒµÉè¼Æ£¨ÂÛÎÄ£©
s2_delay=[-ones(1,N_sample*fc/2) s2(1:end-N_sample*fc/2)]; st_oqpsk=s1.*cos(2*pi*fc*t)-s2_delay.*sin(2*pi*fc*t);
%¾¹ý´øͨºó£¬ÔÚ¾¹ý·ÇÏßÐÔµç· [f y1f]=T2F(t,st_qpsk); [f y2f]=T2F(t,st_oqpsk);
[t y1]=bpf(f,y1f,fc-1/Ts,fc+1/Ts); [t y2]=bpf(f,y2f,fc-1/Ts,fc+1/Ts); subplot(221);
plot(t,y1);xlabel('t');ylabel('QPSK²¨ÐÎ');
axis([5 15 -1.6 1.6]);title('¾¹ý´øͨºóµÄ²¨ÐÎ');
subplot(222);
plot(t,y2);xlabel('t');ylabel('OQPSK²¨ÐÎ'); axis([5 15 -1.6 1.6]);title('¾¹ý´øͨºóµÄ²¨ÐÎ');
%¾¹ý·ÇÏßÐÔµç· y1=1.5*tanh(2*y1); y2=1.5*tanh(2*y2); [f y1f]=T2F(t,y1); [f y2f]=T2F(t,y2);
py1f=py1f+abs(y1f).^2/T; %QPSK²»Í¬¶ÎÐźŹ¦ÂÊÆ×ÃܶÈÏà¼Ó py2f=py2f+abs(y2f).^2/T; %OQPSK²»Í¬¶ÎÐźŹ¦ÂÊÆ×ÃܶÈÏà¼Ó end
py1f=py1f/100 %QPSK100¶Î¹¦ÂÊÆ×ÃܶÈƽ¾ù py2f=py2f/100 %OQPSK100¶Î¹¦ÂÊÆ×ÃܶÈƽ¾ù
subplot(223);
plot(f,10*log10(py1f));xlabel('f');ylabel('QPSK¹¦ÂÊÆ×ÃܶÈ(dB/Hz)'); title('¾¹ý·ÇÏßÐԵ緺óµÄ¹¦ÂÊÆ×ÃܶÈ');axis([-15 15 -30 10]);
subplot(224);
plot(f,10*log10(py2f));xlabel('f');ylabel('OQPSK¹¦ÂÊÆ×ÃܶÈ(dB/Hz)'); title('¾¹ý·ÇÏßÐԵ緺óµÄ¹¦ÂÊÆ×ÃܶÈ');axis([-15 15 -30 10]);
figure(2) x=-2:0.1:2;
y=1.5*tanh(2*x);
plot(x,y);title('·ÇÏßÐԵ緵ÄÊäÈëÊäÈ뺯Êý')
38