%在已调信号中加入高斯白噪声 randn('state',seed(2));
y=awgn(y,SNR-10*log10(0.5)-10*log10(N),'measured',[],'dB');%在已调信号中加入高斯白噪声
figure(3)
plot(t,y(1:length(t)),'b-');%画出经过信道的实际信号 axis([min(t) max(t) -1.5 1.5]);
title('加入高斯白噪声后的已调信号') xlabel('Time');
ylabel('Amplitude'); %相干解调
z1=ddemod(y,Fc,Fd,Fs,'psk',M,df);
%带输出波形的相干M元频移键控解调 figure(4)
stem([0:numPlot-1],x(1:numPlot),'bx'); hold on;
stem([0:numPlot-1],z1(1:numPlot),'ro'); hold off;
axis([0 numPlot -0.5 1.5]);
title('相干解调后的信号原序列比较')
legend('原输入二进制随机序列','相干解调后的信号') xlabel('Time');
ylabel('Amplitude');
%误码率统计
[errorSym ratioSym]=symerr(x,z1); figure(6)
simbasebandex([0:1:5]);
title('相干解调后误码率统计')
%DPSK调制和相干解调MATLAB源代码 function DPSK Fc=10; %载频
Fs=100; %系统采样频率 Fd=1; %码速率 N=Fs/Fd; df=10;
numSymb=25;%进行仿真的信息代码个数 M=2; %进制数 SNRpBit=60;%信噪比
21
SNR=SNRpBit/log2(M); seed=[12345 54321]; numPlot=25;
%产生25个二进制随机码
x=randsrc(numSymb,1,[0:M-1]);%产生25个二进制随机码 figure(1)
stem([0:numPlot-1],x(1:numPlot),'bx'); title('二进制随机序列') xlabel('Time');
ylabel('Amplitude');
%将25个绝对码转换为相对码 b=zeros(1,26);
b(2)=xor(b(1),x(1)) for n=2:25
b(n+1)=xor(x(n),b(n)); end
for n=1:25
x(n)=b(n+1); end
figure(2)
stem([0:numPlot-1],x(1:numPlot),'bx'); title('二进制随机序列相对码') xlabel('Time');
ylabel('Amplitude');
%调制
y=dmod(x,Fc,Fd,Fs,'psk',M,df); numModPlot=numPlot*Fs; t=[0:numModPlot-1]./Fs; figure(3)
plot(t,y(1:length(t)),'b-'); axis([min(t) 2 -1.5 1.5]); title('调制后的信号') xlabel('Time');
ylabel('Amplitude');
%在已调信号中加入高斯白噪声 randn('state',seed(2));
y=awgn(y,SNR-10*log10(0.5)-10*log10(N),'measured',[],'dB');%在已调信号中加入高斯白噪声
figure(4)
plot(t,y(1:length(t)),'b-');%画出经过信道的实际信号 axis([min(t) 2 -1.5 1.5]);
22
title('加入高斯白噪声后的已调信号') xlabel('Time');
ylabel('Amplitude');
%相干解调
z1=ddemod(y,Fc,Fd,Fs,'psk',M,df); %将恢复出的相对码变换为绝对码 a=zeros(1,26); a(1)=xor(b(1),0); for n=2:25
a(n)=xor(b(n),b(n-1)) end
for n=1:25
z1(n)=a(n+1); end
%带输出波形的相干M元频移键控解调 figure(5)
stem([0:numPlot-1],z1(1:numPlot),'ro'); axis([0 numPlot -0.5 1.5]);
title('相干解调后的信号的绝对码') xlabel('Time');
ylabel('Amplitude');
%误码率统计
[errorSym ratioSym]=symerr(x,z1); figure(6)
simbasebandex([0:1:5]);
title('相干解调后误码率统计')
%DPSK调制差分解调MATLAB源代码 function DPSK Fc=10; %载频
Fs=100; %系统采样频率 Fd=1; %码速率 N=Fs/Fd; df=10;
numSymb=25;%进行仿真的信息代码个数 M=2; %进制数 SNRpBit=60;%信噪比 SNR=SNRpBit/log2(M); seed=[12345 54321]; numPlot=25;
23
%产生25个二进制随机码
x=randsrc(numSymb,1,[0:M-1]);%产生25个二进制随机码 figure(1)
stem([0:numPlot-1],x(1:numPlot),'bx'); title('二进制随机序列') xlabel('Time');
ylabel('Amplitude');
%将25个绝对码转换为26个相对码 b=zeros(1,26); for n=1:25
b(n+1)=xor(x(n),b(n)); end
figure(2)
stem([0:25],b(1:26),'bx'); title('二进制随机序列相对码') xlabel('Time');
ylabel('Amplitude');
%调制
y=dmod(b,Fc,Fd,Fs,'psk',M,df); numModPlot=26*Fs;
t=[0:numModPlot-1]./Fs; figure(3)
plot(t,y(1:length(t)),'b-'); axis([min(t) max(t) -1.5 1.5]); title('调制后的信号') xlabel('Time');
ylabel('Amplitude');
%在已调信号中加入高斯白噪声 randn('state',seed(2));
y=awgn(y,SNR-10*log10(0.5)-10*log10(N),'measured',[],'dB');%在已调信号中加入高斯白噪声
figure(4) stem(y)
plot(t,y(1:length(t)),'b-');%画出经过信道的实际信号 axis([min(t) max(t) -1.5 1.5]);
title('加入高斯白噪声后的已调信号') xlabel('Time');
ylabel('Amplitude');
%差分解调带通滤波器
24
[B,A]=butter(10,0.2,'high'); a=filter(B,A,y); wc=[0.3,0.9];
[B,A]=butter(10,wc,'stop'); b=filter(B,A,a);
%延迟一个码元的长度 a=zeros(0,2700); for n=101:2700
a(n)=y(n-100); end
%相乘
for n=1:2600
a(n)=a(n)*y(n); end
figure(5) stem(a)
title('相乘后的信号') xlabel('Time');
ylabel('Amplitude');
%低通滤波器
[B,A]=butter(15,0.15); z1=filter(B,A,a); figure(6) plot(z1)
title('通过低通滤波器的信号') xlabel('点数');
ylabel('Amplitude');
%抽样判决
b=zeros(1,26) ; for n=1:26
b(n)=z1(100*n-50); end
for n=1:26
if b(n)>0.2 b(n)=1; else b(n)=0; end end
figure(7) stem(b)
25