黃家彬
【摘 要】本文主要嘗試通過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].
[責任編輯:薛俊歌]