基于MATLAB的通信系统仿真
2014-08-12黄家彬
黄家彬
【摘 要】本文主要尝试通过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时,还原信号的误差主要是由系统的抽样、量化和还原的环节造成的。……
