[1]个人部分:2PSK的调制、信道模拟、抽样判决及解调
1、2PSK的调制
基本任务:原始PCM脉冲编码信号的2PSK调制
1)、主要步骤和要求:对原始的PCM脉冲编码信号进行2PSK调制。要求原始的PCM脉冲编码信号可以是数字型也可以是字符型;要求画出原始PCM脉冲编码信号和2PSK调制信号的波形图。
2)2PSK调制程序代码及说明:
function psk_sig=modulat_1(pcm ,Fc,Fd,Fs)
%输入信号pcm为原始的PCM脉冲编码信号,Fc为载波频率,Fd输出信号的抽样
%频率为,Fs为输入信号的抽样频率;输出信号psk_sig为2PSK调制后的信号。
%原始PCM脉冲编码信号的2PSK调制%
%检测输入信号的类型%
2PSK调制程序代码:
function psk_sig=modulat_1(pcm,fc,fd,fs)
for i=1:length(pcm); % 判断是数字还是字符
if ischar(pcm(i))==1;
pcm(i)=str2num(pcm(i));
end
i=i+1;
end
psk_sig=dmod(pcm,fc,fd,fs,'psk');
subplot(2,1,1)
plot(pcm,'r*')
subplot(2,1,2)
plot(psk_sig,'b.')
实验截图:
2、随机噪声信道的MATLAB仿真实现
基本任务:简单随机噪声信道的MATLAB仿真实现。
1)、主要步骤和要求:要求2PSK调制信号经过一个常用的AWGN信道;要求2PSK调制信号可以是数字型也可以是字符型;要求信道信噪比snr可变;要求在同一个figure中给出输入信号psk_sig和输出信号psk_after_channel的波形图。
2)、2PSK+AWGN程序代码及说明:
function psk_after_channel=channel_1(psk_sig,snr)
%输入变量psk_sig为2PSK调制信号,snr为AWGN信道的信噪比;输出变量%psk_after_channel为经过AWGN信道后的2PSK调制信号。
%检测2PSK调制信号的类型%
2PSK+AWGN程序代码:
function psk_after_channel=channel_1(psk_sig,snr);
n1=length(psk_sig);
psk_sig=psk_sig(:);
psk_sig_a=zeros(n1,1);
psk_sig_a=psk_sig_a(:); %产生列向量
for i=1:n1
if ischar(psk_sig(i))==1
psk_sig_a(i)=str2num(psk_sig(i));
else psk_sig(i)=psk_sig(i);
end
end
psk_after_channel=awgn(psk_sig,snr);
subplot(2,1,1)
plot(psk_sig,'r*')
subplot(2,1,2)
plot(psk_after_channel,'b.')
实验截图:
3、抽样判决的MATLAB仿真实现
基本任务:对经过随机噪声信道的2PSK和2FSK调制信号进行抽样判决,去除或减弱噪声的干扰。
1)、主要步骤和要求:对经过信噪比可变、输入信号功率值可调的随机噪声信道的2PSK调制信号进行抽样判决,去除噪声的干扰。要求2PSK调制信号可以是数字型也可以是字符型;要求画出判决前后的波形图。
2)、2PSK+AWGN+ADJUDGE程序代码及说明:
function adjudged_psk=adjudg_1(psk_after_channel,m)
%输入信号psk_after_channel为经过AWGN信道后的2PSK调制信号,m为判决
%门限值;输出变量adjudged_psk为抽样判决后的信号。
%检测2PSK调制信号的类型%
2PSK+AWGN+ADJUDGE程序代码:
function adjudge_psk=adjudg_1(psk_after_channel)
n4=length(psk_after_channel);
adjudge_psk=zeros(1,n4);
for i=1:n4
if ischar(psk_after_channel)==1
psk_after_channel(i)=str2num(psk_after_channel);
end
end
for i=1:n2
if round(psk_after_channel(i))==1
adjudge_psk(i)=1;
elseif round(psk_after_channel(i))==0
adjudge_psk(i)=0;
else adjudge_psk(i)=-1;
end
end
subplot(2,1,1)
plot(psk_after_channel,'r*')
subplot(2,1,2)
plot(adjudge_psk,'b.')
实验截图:
4、2PSK解调制
基本任务:由抽样判决后的2PSK调制信号恢复出原始的PCM脉冲编码信号。
1)、主要步骤和要求:由抽样判决后的2PSK调制信号恢复出原始的PCM脉冲编码信号(0、1信号)。要求抽样判决后的2PSK调制信号可以是数字型也可以是字符型;要求画出码型反变换前后的波形图。
2)、2PSK解调制程序代码及说明:
function re_pcm=demodul_1(adjudged_psk, Fc,Fd,Fs)
%输入信号adjudged_psk为抽样判决后的2PSK调制信号,Fc为载波频率,Fd输%出信号的抽样频率为,Fs为输入信号的抽样频率;输出信号re_pcm为恢复出的%原始PCM脉冲编码信号。
%检测抽样判决后的2PSK调制信号类型%
2PSK解调制程序代码:
function re_pcm=demodul_1(adjudge_psk,fc,fd,fs)
for i=1:length(adjudge_psk)
if ischar(adjudge_psk(i))==1
adjudge_psk=str2num(adjudge_psk(i));
end
end
re_pcm=ddemod(adjudge_psk,fc,fd,fs,'psk',2);
subplot(2,1,1)
plot(adjudge_psk,'r*')
subplot(2,1,2)
plot(re_pcm,'b.')
实验截图:
[2]级联部分:通信系统的建模和传输质量分析
(一)基本任务:数字基带传输系统的MATLAB仿真实现。(20分)
1、主要步骤和要求:
数字基带传输系统的MATLAB仿真包括以下内容:单频正弦波模拟信号经过抽样(要求仿真时间从0到2/F,抽样频率为Fs=20F)、均匀量化(量化电平数D可变)、PCM二进制自然编码、AMI码型变换后,发送到信噪比snr可变的AWGN信道,然后经过抽样判决、AMI码型反变换、D/A转换(内插点数N可变)后恢复出单频正弦波模拟信号。要求给出抽样后的输入信号sampl和恢复出的输入信号re_sampl的波形图。
2、程序代码及说明:
function [sampl,re_sampl]=system_1(A,F,P,D,snr,N)
%输入变量A ,F,P分别为输入信号的幅度、频率和相位,D为量化电平数,snr
%为信道信噪比,N为D/A转换时的内插点数;输出变量sampl为抽样后的输入
%信号,re_sampl为恢复出的输入信号。
数字频带传输通信系统仿真程序代码:
function [sampl,re_sampl]=system_1(A,F,P,D,snr,fc,fd,fs,N)
[sampl,quant,pcm2]=a_d_1(A,F,P,D);
if ischar(pcm2)==1 % 判断是数字还是字符
pcm=str2num(pcm2);
else pcm2=pcm2;
end
psk_sig=modulat_1(pcm2,fc,fd,fs);
psk_after_channel=channel_1(psk_sig,snr);
adjudge_psk=adjudg_1(psk_after_channel);
re_pcm=demodul_1(adjudge_psk,fc,fd,fs);
[re_voltag,re_sampl]=d_a_1(re_pcm,D,N);
numoferr=0;
for i=1:length(sampl),
if(re_sampl~=sampl(i)),
numoferr=numoferr+1;
end;
end;
p=numoferr/length(sampl)
% A/D**********************************
function[sampl,quant,pcm2]=a_d_1(A,F,P,D)
t=0:1/(20*F):2/F;
sampl=A*sin(2*pi*F*t+P);
c=sampl/max(sampl);
partition=[-1:2/D:1];
codebook=[-1-1/D:2/D:1];
[indx,quant]=quantiz(c,partition,codebook);
indx=indx-1;
ind=zeros(length(indx),1);
i=1;
while i<=length(indx)
if indx(i,1)==-1;
indx(i,1)=0;
end
i=i+1;
end
a=min(quant); %对信号消顶
i=1;
while i<=length(quant)
if quant(1,i)==a;
quant(1,i)=quant(1,i)+2/D;
end
i=i+1;
end
subplot(2,1,1);
plot(t,c,'b*-');
title('signal')
pcm=dec2bin(indx,ceil(log2(D))); %对量化后信号编码
pcm1=reshape(pcm',1,length(pcm)*ceil(log2(D)));
for i=1:length(pcm1);
pcm2(i)=str2num(pcm1(i));
i=i+1;
end
%调制*****************************************
function psk_sig=modulat_1(pcm2,fc,fd,fs)
psk_sig=dmod(pcm2,fc,fd,fs,'psk');
%进入信道***************************************
function psk_after_channel=channel_1(psk_sig,snr);
n1=length(psk_sig);
psk_sig=psk_sig(:);
psk_sig_a=zeros(n1,1);
psk_sig_a=psk_sig_a(:); %产生列向量
for i=1:n1
if ischar(psk_sig(i))==1
psk_sig_a(i)=str2num(psk_sig(i));
else psk_sig(i)=psk_sig(i);
end
end
psk_after_channel=awgn(psk_sig,snr);
%抽样判决******************************
function adjudge_psk=adjudg_1(psk_after_channel)
n2=length(psk_after_channel);
adjudge_psk=zeros(1,n2);
for i=1:n2
if ischar(psk_after_channel)==1
psk_after_channel(i)=str2num(psk_after_channel);
end
end
for i=1:n2
if round(psk_after_channel(i))==1
adjudge_psk(i)=1;
elseif round(psk_after_channel(i))==0
adjudge_psk(i)=0;
else adjudge_psk(i)=-1;
end
end
%解调****************************************
function re_pcm=demodul_1(adjudge_psk,fc,fd,fs)
for i=1:length(adjudge_psk)
if ischar(adjudge_psk(i))==1
adjudge_psk=str2num(adjudge_psk(i));
end
end
re_pcm=ddemod(adjudge_psk,fc,fd,fs,'psk',2);
% d/a******************************************
function [re_voltag,re_sampl]=d_a_1(re_pcm,D,N)
for i=1:length(re_pcm)
if ischar(re_pcm(i))==1;
re_pcm(i)=str2num(re_pcm(i));
end
end
n=ceil(log2(D));
for i=2:n
if rem(length(re_pcm),n);
k=rem(length(re_pcm),n);
B=zeros(1,(n-k));
re_pcm1=[re_pcm,B];
else re_pcm1=re_pcm;
end
end
re_pcm1=re_pcm1(:);
m=ceil(length(re_pcm1)/n);
for i=1:m
A=re_pcm1((i-1)*n+1:(i-1)*n+n);
C=reshape(A,1,n);
E=fliplr(C);
sum=0;
for j=1:n
sum=sum+E(j)*2^(j-1);
V(i)=sum;
end
end
s=2/D;
for i=1:m
re_voltag(i)=(V(i)*s+s/2-1);
end
for i=1:length(re_voltag)
re_sampl((i-1)*(N+1)+1)=re_voltag(i);
for k=2:N
re_sampl((i-1)*(N+1)+k)=0;
end
end
h1=zeros(1,N);
for j=1:N
h1(j)=j/(N+1);
end
h=[0,h1,1,fliplr(h1),0];
h=h(:);
re_sampl=conv(h,re_sampl);
subplot(2,1,2)
plot(re_sampl,'r.');
title('re_signal');
测试信号: [sampl,re_sampl]=system_1(1,32000,0,10,10,32000000,16000000,1280000000,10)
实验截图:
p =
1756
ans =
Columns 1 through 11
0 0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090 0.5878 0.3090 0.0000
Columns 12 through 22
-0.3090 -0.5878 -0.8090 -0.9511 -1.0000 -0.9511 -0.8090 -0.5878 -0.3090 -0.0000 0.3090
Columns 23 through 33
0.5878 0.8090 0.9511 1.0000 0.9511 0.8090 0.5878 0.3090 0.0000 -0.3090 -0.5878
Columns 34 through 41
-0.8090 -0.9511 -1.0000 -0.9511 -0.8090 -0.5878 -0.3090 -0.0000