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^');