»ùÓÚMATLABµÄÊý×ÖƵ´øͨÐÅϵͳµÄ·ÂÕæ - ͼÎÄ ÁªÏµ¿Í·þ

·¢²¼Ê±¼ä : ÐÇÆÚÈÕ ÎÄÕ»ùÓÚ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