APP下载

基于MATLAB的通信系统仿真

2014-08-12黄家彬

科技视界 2014年19期

黄家彬

【摘 要】本文主要尝试通过Matlab编程实现通信系统仿真。

【关键词】系统仿真;差分脉冲编码;huffman编码;汉明码;DPSK;Matlab编程

1 仿真设计

以30Hz和17Hz的正弦信号的叠加信号作为信号源。然后采用90Hz速率对这个信号持续1秒进行抽样,得到的是间隔为0.011s的离散抽样值。再进行32级(4bit)、1阶DPCM差分脉冲量化编码。对DPCM编码的数据流进行哈夫曼(huffman)编码压缩再汉明编码。随后进行调制,在发送端对码流进行DPSK数字键控调制,采用的载波是100kHz的正弦波,然后送上信道进行传输。信道是最常见的高斯加性白噪声信道,信号传输过程中受到高斯噪声的干扰,信噪比为20dB。在接收端对接收到的信号进行解调、汉明码解码,最后解DPCM信号并恢复所发送的信号。

本例只是就如何通过Matlab的编程实现整个系统的仿真,系统中的参数选取在现实应用中的意义不作考究。

2 仿真实现

Matlab代码如下:

Dt=0.0001;t=0:Dt:1;f1=30; f2=17;fs=90;n=7;k=4;m=2;snr=20;Fc

10000;Fd=5600;Fs=56000;unham=[];

source=sin(2*pi*f1*t)+sin(2*pi*f2*t)

sam=sampling(source,Dt,fs);len=2^4; ord=1;

[predictor,codebook,partition]=dpcmopt(sam,ord,len);

dpcm=dpcmenco(sam,codebook,partition,predictor);

[huff,htable]=huffman(dpcm,len);[ham,add]=encode(huff,7,4,'hamming');

dpsk=dmod(difcode(ham),Fc,Fd,Fs,'psk',m);gdpsk=awgn(dpsk,snr);

undpsk=undifcode(ddemod(gdpsk,Fc,Fd,Fs,'psk',m));

[unham_t,b1,b2,cerr]=decode(undpsk,n,k,'hamming');

for temp=1:length(unham_t)-add

unham(temp)=unham_t(temp);end

unhuff=dehuffman(unham,htable,len);

undpcm=dpcmdeco(unhuff,codebook,predictor);

unsam=unsampling(undpcm,t,Dt,fs);

3 数据分析

源信号与还原信号比较图(图1)如下:

图1

可以定义:D = 源信号的均方值 — 还原信号的均方值 为这两个信号的差异参数。

在代码末尾加上

D= (sum(source.^2-unsam.^2))/length(source)

Err= sum(cerr)

D值越大本系统对源信号的还原就越差,Err是差错控制纠正误码的数量,正常情况下Err为0表示没有误码。改变仿真代码中的snr变量的值即可改变仿真系统的信道信噪比,在不同信道信噪比之下,D和Err的变化结果如下(表1):

表1

上面仅为某几次试验的值,当不断重复运行仿真代码时即发现:信噪比大于5dB时,D和Err的值都分别衡定在0.0121和0,由此推断信道信噪比大于5dB时,还原信号的误差主要是由系统的抽样、量化和还原的环节造成的。信噪比在小于5dB时D和Err的值与信噪比成反比增长,这时,信道噪声对系统的影响逐渐增大。当信噪比小于-8dB时程序经常提示运行出错,这是因为误码数已经大大超过汉明码的纠正范围出现误译码,导致之后的程序无法按原参数执行,导致出错。

4 结语

本文所述的仿真例子还没十分完善,只是仿真了通信系统中的一些最基本的环节。本文最终目的是论述Matlab是如何在通信系统仿真中发挥作用的。从上面来看,Matlab的在其一般编程环境中不能产生严格意义的模拟信号仿真这一点上确有不足,但并不影响其在通信系统仿真特别是数字通信系统仿真的应用优势。

【参考文献】

[1]马海武,达新宇,等.通信原理[Z].

[2][加]Joyce Van de Vegte.数字信号处理基础[Z].

[3]孙屹. MATLAB.通信仿真开发手册[Z].

[4]张森,张正亮.MATLAB.仿真技术与实里例应用教程[Z].

[责任编辑:薛俊歌]

【摘 要】本文主要尝试通过Matlab编程实现通信系统仿真。

【关键词】系统仿真;差分脉冲编码;huffman编码;汉明码;DPSK;Matlab编程

1 仿真设计

以30Hz和17Hz的正弦信号的叠加信号作为信号源。然后采用90Hz速率对这个信号持续1秒进行抽样,得到的是间隔为0.011s的离散抽样值。再进行32级(4bit)、1阶DPCM差分脉冲量化编码。对DPCM编码的数据流进行哈夫曼(huffman)编码压缩再汉明编码。随后进行调制,在发送端对码流进行DPSK数字键控调制,采用的载波是100kHz的正弦波,然后送上信道进行传输。信道是最常见的高斯加性白噪声信道,信号传输过程中受到高斯噪声的干扰,信噪比为20dB。在接收端对接收到的信号进行解调、汉明码解码,最后解DPCM信号并恢复所发送的信号。

本例只是就如何通过Matlab的编程实现整个系统的仿真,系统中的参数选取在现实应用中的意义不作考究。

2 仿真实现

Matlab代码如下:

Dt=0.0001;t=0:Dt:1;f1=30; f2=17;fs=90;n=7;k=4;m=2;snr=20;Fc

10000;Fd=5600;Fs=56000;unham=[];

source=sin(2*pi*f1*t)+sin(2*pi*f2*t)

sam=sampling(source,Dt,fs);len=2^4; ord=1;

[predictor,codebook,partition]=dpcmopt(sam,ord,len);

dpcm=dpcmenco(sam,codebook,partition,predictor);

[huff,htable]=huffman(dpcm,len);[ham,add]=encode(huff,7,4,'hamming');

dpsk=dmod(difcode(ham),Fc,Fd,Fs,'psk',m);gdpsk=awgn(dpsk,snr);

undpsk=undifcode(ddemod(gdpsk,Fc,Fd,Fs,'psk',m));

[unham_t,b1,b2,cerr]=decode(undpsk,n,k,'hamming');

for temp=1:length(unham_t)-add

unham(temp)=unham_t(temp);end

unhuff=dehuffman(unham,htable,len);

undpcm=dpcmdeco(unhuff,codebook,predictor);

unsam=unsampling(undpcm,t,Dt,fs);

3 数据分析

源信号与还原信号比较图(图1)如下:

图1

可以定义:D = 源信号的均方值 — 还原信号的均方值 为这两个信号的差异参数。

在代码末尾加上

D= (sum(source.^2-unsam.^2))/length(source)

Err= sum(cerr)

D值越大本系统对源信号的还原就越差,Err是差错控制纠正误码的数量,正常情况下Err为0表示没有误码。改变仿真代码中的snr变量的值即可改变仿真系统的信道信噪比,在不同信道信噪比之下,D和Err的变化结果如下(表1):

表1

上面仅为某几次试验的值,当不断重复运行仿真代码时即发现:信噪比大于5dB时,D和Err的值都分别衡定在0.0121和0,由此推断信道信噪比大于5dB时,还原信号的误差主要是由系统的抽样、量化和还原的环节造成的。信噪比在小于5dB时D和Err的值与信噪比成反比增长,这时,信道噪声对系统的影响逐渐增大。当信噪比小于-8dB时程序经常提示运行出错,这是因为误码数已经大大超过汉明码的纠正范围出现误译码,导致之后的程序无法按原参数执行,导致出错。

4 结语

本文所述的仿真例子还没十分完善,只是仿真了通信系统中的一些最基本的环节。本文最终目的是论述Matlab是如何在通信系统仿真中发挥作用的。从上面来看,Matlab的在其一般编程环境中不能产生严格意义的模拟信号仿真这一点上确有不足,但并不影响其在通信系统仿真特别是数字通信系统仿真的应用优势。

【参考文献】

[1]马海武,达新宇,等.通信原理[Z].

[2][加]Joyce Van de Vegte.数字信号处理基础[Z].

[3]孙屹. MATLAB.通信仿真开发手册[Z].

[4]张森,张正亮.MATLAB.仿真技术与实里例应用教程[Z].

[责任编辑:薛俊歌]

【摘 要】本文主要尝试通过Matlab编程实现通信系统仿真。

【关键词】系统仿真;差分脉冲编码;huffman编码;汉明码;DPSK;Matlab编程

1 仿真设计

以30Hz和17Hz的正弦信号的叠加信号作为信号源。然后采用90Hz速率对这个信号持续1秒进行抽样,得到的是间隔为0.011s的离散抽样值。再进行32级(4bit)、1阶DPCM差分脉冲量化编码。对DPCM编码的数据流进行哈夫曼(huffman)编码压缩再汉明编码。随后进行调制,在发送端对码流进行DPSK数字键控调制,采用的载波是100kHz的正弦波,然后送上信道进行传输。信道是最常见的高斯加性白噪声信道,信号传输过程中受到高斯噪声的干扰,信噪比为20dB。在接收端对接收到的信号进行解调、汉明码解码,最后解DPCM信号并恢复所发送的信号。

本例只是就如何通过Matlab的编程实现整个系统的仿真,系统中的参数选取在现实应用中的意义不作考究。

2 仿真实现

Matlab代码如下:

Dt=0.0001;t=0:Dt:1;f1=30; f2=17;fs=90;n=7;k=4;m=2;snr=20;Fc

10000;Fd=5600;Fs=56000;unham=[];

source=sin(2*pi*f1*t)+sin(2*pi*f2*t)

sam=sampling(source,Dt,fs);len=2^4; ord=1;

[predictor,codebook,partition]=dpcmopt(sam,ord,len);

dpcm=dpcmenco(sam,codebook,partition,predictor);

[huff,htable]=huffman(dpcm,len);[ham,add]=encode(huff,7,4,'hamming');

dpsk=dmod(difcode(ham),Fc,Fd,Fs,'psk',m);gdpsk=awgn(dpsk,snr);

undpsk=undifcode(ddemod(gdpsk,Fc,Fd,Fs,'psk',m));

[unham_t,b1,b2,cerr]=decode(undpsk,n,k,'hamming');

for temp=1:length(unham_t)-add

unham(temp)=unham_t(temp);end

unhuff=dehuffman(unham,htable,len);

undpcm=dpcmdeco(unhuff,codebook,predictor);

unsam=unsampling(undpcm,t,Dt,fs);

3 数据分析

源信号与还原信号比较图(图1)如下:

图1

可以定义:D = 源信号的均方值 — 还原信号的均方值 为这两个信号的差异参数。

在代码末尾加上

D= (sum(source.^2-unsam.^2))/length(source)

Err= sum(cerr)

D值越大本系统对源信号的还原就越差,Err是差错控制纠正误码的数量,正常情况下Err为0表示没有误码。改变仿真代码中的snr变量的值即可改变仿真系统的信道信噪比,在不同信道信噪比之下,D和Err的变化结果如下(表1):

表1

上面仅为某几次试验的值,当不断重复运行仿真代码时即发现:信噪比大于5dB时,D和Err的值都分别衡定在0.0121和0,由此推断信道信噪比大于5dB时,还原信号的误差主要是由系统的抽样、量化和还原的环节造成的。信噪比在小于5dB时D和Err的值与信噪比成反比增长,这时,信道噪声对系统的影响逐渐增大。当信噪比小于-8dB时程序经常提示运行出错,这是因为误码数已经大大超过汉明码的纠正范围出现误译码,导致之后的程序无法按原参数执行,导致出错。

4 结语

本文所述的仿真例子还没十分完善,只是仿真了通信系统中的一些最基本的环节。本文最终目的是论述Matlab是如何在通信系统仿真中发挥作用的。从上面来看,Matlab的在其一般编程环境中不能产生严格意义的模拟信号仿真这一点上确有不足,但并不影响其在通信系统仿真特别是数字通信系统仿真的应用优势。

【参考文献】

[1]马海武,达新宇,等.通信原理[Z].

[2][加]Joyce Van de Vegte.数字信号处理基础[Z].

[3]孙屹. MATLAB.通信仿真开发手册[Z].

[4]张森,张正亮.MATLAB.仿真技术与实里例应用教程[Z].

[责任编辑:薛俊歌]