数字频带传输系统的MATLAB仿真实现源代码 下载本文

一、设计内容:数字频带传输系统的MATLAB仿真实现

[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 =

0.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