www.pudn.com > matlab-BPSK.rar > matlab BPSK 调制与解调.txt, change:2010-06-15,size:1674b


clc; 
close all; 
clear; 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
% 
%  假定: 
%     2倍载波频率采样的bpsk信号 
%     调制速率为在波频率的 N/2m 
%    
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
m=128; 
N=512; 
n=1:1:N; 
N0=0.5*randn(1,N) %噪声 
h0=zeros(1,N); 
%     30阶低通滤波器 h0 
f = [0 0.3 0.3 1]; w0 = [1 1 0 0]; 
b = fir2(30,f,w0); 
[h,w] = freqz(b,1,N/2);  
h0(1,1:N/2)=abs(h'); 
for i=1:N/2 
    h0(1,N-i+1)=h0(1,i); 
end; 
%%%%%%%%%   随机序列 
a=rand(1,m); 
for i=1:m 
    if(a(1,i)>0.5) 
        a(1,i)=1;    
   else 
        a(1,i)=-1; 
  end; 
end; 
a 
%%% 生成BPSK信号 
bpsk_m=zeros(1,N); 
j=1;k=1; 
for i=1:N 
    if(j==(N/m+1)) 
        j=1; 
        k=k+1; 
    end;    % 0.05*pi 为初始相位,可以任意改变 
    bpsk_m(1,i)=a(1,k)*sin(2*pi*0.5*i+0.05*pi)+a(1,k)*cos(2*pi*0.5*i+0.05*pi); 
    j=j+1; 
end; 
bpsk_m=bpsk_m+N0;% 信号加噪声,模拟过信道 
% 接收处理  用正交本振与信号相乘,变频 
bpsk_m1=bpsk_m.*sin(2*pi*0.5*n); 
bpsk_m2=bpsk_m.*cos(2*pi*0.5*n); 
%滤波 
tempx=fft(bpsk_m1); 
tempx=tempx.*h0;     %低通滤波 
tempx=ifft(tempx); 
real_x=real(tempx); 
 
tempx=h0.*fft(bpsk_m2); 
tempx=tempx.*h0;     %低通滤波 
tempx=ifft(tempx); 
real_x1=real(tempx); 
 
subplot(2,1,1); 
plot(real_x1+real_x,'b');   
axis([1  N -2.5 2.5]); 
grid on; 
hold on; 
In=real_x1+real_x;      % 可只取一路,这里取了两路之和 
for i=1:N               % 滤波后整形 
    if(In(1,i)>0)       % 判决,得到解调结果     
        In(1,i)=1; 
    else 
        In(1,i)=-1; 
    end; 
end; 
plot(In,'r'); 
 
an=zeros(1,m);               
for i=1:m 
    an(1,i)=In(1,(i-1)*N/m+N/(2*m)); 
end; 
subplot(2,1,2);  %  比较误码 
plot(an,'r*');hold on; 
axis([1  m -2 2]); 
plot(a,'b^');