数字调制2ASK误码率分析matlab实现
寫在開頭:
·關(guān)于香農(nóng)三大定理,以個(gè)人學(xué)習(xí)情況和個(gè)人理解以學(xué)習(xí)總結(jié)的形式給出。
香農(nóng)三大貢獻(xiàn)(定理)
一 香農(nóng)第一定理(可變長(zhǎng)無失真信源編碼定理)
本課程第一節(jié)課,老師給出了信息量的度量方式。信息量的度量應(yīng)該與消息的種類,重要程度無關(guān),與種類無關(guān)是比較容易接受的,如果信息量與消息的重要程度失去關(guān)聯(lián)這是開始讓人難以接受的,但是重要程度這一概念是摻雜有很大的主觀因素的。香農(nóng)跳脫開了信息重要性的束縛,轉(zhuǎn)而投靠了“概率”這一概念,一般地我們認(rèn)為,越小概率發(fā)生的時(shí)間包含有更多的信息,而越確定發(fā)生的事件對(duì)我們來說越是“廢話”,包含的信息量更少;除此之外,我們希望信息量之間的疊加對(duì)應(yīng)其概率的相乘(相互獨(dú)立的條件下)。以上是我們對(duì)信息量度量的絕大部分性質(zhì)的期待,恰好對(duì)數(shù)函數(shù)擁有這個(gè)性質(zhì)。 信息熵對(duì)應(yīng)平均信息量的概念,也即符號(hào)信息量的期望。
之所以要對(duì)“信息”這一對(duì)外行來說抽象的概念進(jìn)行度量,其目的是為了communication中信息的壓縮。舉個(gè)課上曾舉過的例子,運(yùn)輸一箱燈泡的過程中,保險(xiǎn)安全起見我們會(huì)用塑料泡沫包裹燈泡,同樣運(yùn)輸一大箱同型號(hào)的燈泡,但是因?yàn)槠渲信菽捏w積占比不同,導(dǎo)致我們的運(yùn)輸效率(同體積箱子中燈泡個(gè)數(shù))不同,那么我們是否可以通過某種方式,得到燈泡的極限運(yùn)輸速率?即保證運(yùn)輸燈泡的安全性的前提下,無限壓縮泡沫的體積。
香農(nóng)第一定理指明了
·一段信息的信息量是固定的,這稱為這段信息的信息熵(H)
·無論怎么壓縮,信息熵是無失真信源編碼的極限值
·若編碼的平均碼長(zhǎng)小于信息熵值,必然發(fā)生差錯(cuò)(也就是有損)
感悟思考:從莫爾斯碼到香農(nóng)編碼到霍夫曼編碼
莫爾斯碼中常用的字母多用比較簡(jiǎn)單的短線表示,使用頻率低的字母長(zhǎng)線較多,我認(rèn)為這體現(xiàn)了一種資源配置的思想,使用頻率或者講出現(xiàn)概率越高的代碼,我們給它分配更快速更便捷實(shí)現(xiàn)的方法,以期望平均的工作效率提升。香農(nóng)將這一思想再次量化,將信源符號(hào)按照出現(xiàn)的概率進(jìn)行了排列,出現(xiàn)頻率高的采用更短的碼長(zhǎng),同時(shí)這里暗含了一個(gè)編碼壓縮的極限,也就是之后的霍夫曼編碼方式,霍夫曼編碼充分利用短碼,也即將短碼全部占用完成后,再擴(kuò)充碼長(zhǎng),從而達(dá)到了比香農(nóng)編碼理論中的壓縮極限。
個(gè)人認(rèn)為關(guān)于香農(nóng)第一貢獻(xiàn),就是天才般的將信息量這一抽象的概念與概率建立了聯(lián)系并且將其量化,有了這個(gè)度量工具,進(jìn)而才能指標(biāo)性的優(yōu)化壓縮方法,對(duì)壓縮數(shù)據(jù)提供了方向和評(píng)判標(biāo)準(zhǔn)。二 香農(nóng)第二定理(有噪信道編碼定理)
如果說第一定理指出了壓縮編碼(無損)的極限,那么第二定律則指出了信號(hào)傳輸速率的極限。公式2-1與我們的直觀認(rèn)知是相符的,首先是信道容量與信道帶寬呈正相關(guān);而后與信噪比也呈正相關(guān),當(dāng)噪聲占比大時(shí),傳輸越來越無效。因此也指出了提高傳輸速率的兩個(gè)途徑,即增加信道帶寬與提高信噪比。從了解到資料中提及了一個(gè)例子,即網(wǎng)速與距離路由器遠(yuǎn)近之間有什么關(guān)系?為什么距離路由器遠(yuǎn)網(wǎng)速越慢?解釋比較容易理解,在信息傳輸過程中會(huì)疊加許多噪聲,隨著距離增加,噪聲功率增加,而信號(hào)由于信道對(duì)其衰減作用功率也會(huì)下降,造成信噪比惡化,進(jìn)而導(dǎo)致信道容量減小,傳輸速率上限降低,網(wǎng)速變慢。
這個(gè)公式給出了傳輸速率上限信道容量的影響因素,對(duì)于實(shí)際的意義還不僅于此。這讓我想到了信息傳輸可靠性與有效性之間的博弈,第二定理啟發(fā)性如下:
·有噪信道編碼定理指出,盡管噪聲會(huì)干擾通信信道,但還是有可能在信息傳輸速率小于信道容量的前提下,以任意低的錯(cuò)誤概率傳送數(shù)據(jù)信息。
犧牲了信息傳輸速率,則有效性降低,換取的是傳輸更加可靠。
三 香農(nóng)第三定理(保失真度準(zhǔn)則下的有失真信源編碼定理)
以上定理:
·給出了信息壓縮的極限:
·R(D)在實(shí)際工程中可以作為衡量各種壓縮編碼方法性能優(yōu)劣的一種標(biāo)尺
·量化、數(shù)模轉(zhuǎn)換、頻帶壓縮和數(shù)據(jù)壓縮的理論基礎(chǔ)
關(guān)于第三定理的理解不太深入,大概意思理解如下:比如玩而你畫我猜游戲,這個(gè)游戲的本質(zhì)即信息的傳遞,我們假定表達(dá)者和接受者之間的認(rèn)知差異為噪聲,比如傳遞信息“三長(zhǎng)兩短”,如果我們一下子表達(dá)清楚這個(gè)概念是相對(duì)困難的,于是我們可以和同伴事先規(guī)定一個(gè)“通信協(xié)議”或者說“校驗(yàn)”,我們第一個(gè)表達(dá)動(dòng)作代表字符個(gè)數(shù),然后依次傳輸每一個(gè)字符信息,如此,信息的傳遞會(huì)變得更加可靠。回到原理本身,第三定理指明了在滿足第一定理壓縮極限,第二定理傳輸速率極限的前提下,如何通信不出錯(cuò)。
參考:
如何理解「香農(nóng)定理」,包含哪些內(nèi)容,它的發(fā)現(xiàn)有什么意義?
https://www.zhihu.com/question/447161080/answer/1759158425
三種編碼方式的比較
https://zhuanlan.zhihu.com/p/52234093
如何連貫地理解香農(nóng)三大定理?
https://www.zhihu.com/question/39296849/answer/1467262363
仿真實(shí)驗(yàn)部分:
·1關(guān)于Huffman壓縮編碼
·Huffman編碼思路
霍夫曼編碼使用一種特別的方法為信號(hào)源中的每個(gè)符號(hào)設(shè)定二進(jìn)制碼。出現(xiàn)頻率更大的符號(hào)將獲得更短
的比特,出現(xiàn)頻率更小的符號(hào)將被分配更長(zhǎng)的比特,以此來提高數(shù)據(jù)壓縮率,提高傳輸效率。
算法步驟:
1.對(duì)字符出現(xiàn)的頻率降序排列,進(jìn)行步驟2
2.查找頻率位于最底層的兩個(gè)字符(字符組),并將其組合成新的字符組,字符組出現(xiàn)的頻率等于內(nèi)部字符(字符組出現(xiàn)頻率之和),如果只剩下兩個(gè)字符(字符與字符組;字符組與字符組)進(jìn)行步驟4;否則進(jìn)入步驟3
3.將步驟2中組合后的字符與字符組重新按照出現(xiàn)頻率降序排列,重復(fù)步驟2
4.如果按照字符組(字符)的排列順序進(jìn)行編碼,按照左孩子為1,右孩子為0(或者相反)的順序進(jìn)行編碼,一直到葉子節(jié)點(diǎn),完成編碼
實(shí)現(xiàn)如圖1-1,選取信號(hào)符號(hào)為’aaabbiieubaddyss’,最終壓縮比為1.3333。
圖1-1 Huffman編碼
·2關(guān)于Haming信道編碼
規(guī)則:
1.設(shè)分組碼(n,k)中,k個(gè)為有效信息碼,n為編碼后長(zhǎng)度,r = n-k為監(jiān)督碼
2.r個(gè)監(jiān)督碼元構(gòu)造r個(gè)監(jiān)督關(guān)系式指出一位錯(cuò)碼的n種可能位置,r需要滿足:
3.2^r-1 =n 滿足此線性分組的編碼方式為漢明碼----能夠糾正1位錯(cuò)碼
為了避免重復(fù)造輪子,并且考慮到漢明編碼和解碼實(shí)現(xiàn)較為復(fù)雜,此處引用matlab內(nèi)置的函數(shù)。
·3 2ASK
思路:
·采用與模擬調(diào)制相同的方法,直接將信號(hào)與載波相乘
·需要注意:
周期性:一個(gè)電平周期應(yīng)該是載波信號(hào)周期的整數(shù)倍
問題及解決:
·在濾波的時(shí)候,應(yīng)用lowpass,結(jié)果發(fā)現(xiàn)總是濾不掉,查閱資料,可以設(shè)置濾波器的陡峭特性,重新設(shè)置為0.95左右,work
·在進(jìn)行抽樣判決的時(shí)候,起初混淆了理論中判別門限A/2(0 1 概率相同的前提下,雖然0 1 頻率不相等,方便起見假設(shè)為0)A的含義,誤當(dāng)作了解調(diào)后的幅值,導(dǎo)致無論怎么加大噪聲,最終誤碼的概率非常之低,經(jīng)過排查發(fā)現(xiàn)了該錯(cuò)誤。
·關(guān)于2ASK采用相干解調(diào)誤碼率的極限為多少:許多教材以及相關(guān)資料給出了圖3-2中的圖,該圖表明誤碼率的極限應(yīng)該為0.5,即隨機(jī)“瞎猜”也應(yīng)該為0.5,這與直觀的認(rèn)知是相符的。
·4 2FSK
調(diào)制:
·2FSK可以視為2個(gè)不同載頻的2ASK疊加,故仍然可以采用模擬調(diào)頻法,不過這里需要對(duì)電平范圍進(jìn)行邏輯轉(zhuǎn)換
·原電平∈{1,0},可以將原電平整體邏輯取反,然后對(duì)取反前后的信號(hào)分別做2ask在w1,w2的調(diào)制,再疊加
解調(diào):(包絡(luò)檢波法較為簡(jiǎn)單,此處采用相干解調(diào)法)
分別通過兩路帶通濾波器,然后經(jīng)過相乘器,然后低通濾波,抽樣判決
流程:
S2fsk -| |----抽樣判決----out
|— w2 帶通濾波器 —>相乘器(載波w2)—低通----|
2FSK仿真省略。。。。。。
·5 誤碼率測(cè)試問題及解決
誤碼率分辨精度過低:
由于所給信號(hào)長(zhǎng)度有限,因此誤碼率的分辨精度(這里我指錯(cuò)一個(gè)碼元引起的誤碼率變化)不高,即每錯(cuò)一個(gè)代碼,就會(huì)引起誤碼率波動(dòng)很大,導(dǎo)致最終做出的圖有很多“尖刺”,如圖,這是由于添加高斯噪聲時(shí)的隨機(jī)性引起的,
解決方法:
1.可以在每一個(gè)信噪比點(diǎn)上,多次重復(fù)實(shí)驗(yàn),取誤差率的平均值,相當(dāng)于在每一個(gè)點(diǎn)上進(jìn)行均值濾波,可以有效抵抗誤碼率分辨精度不高以及awgn函數(shù)隨機(jī)性引起的“噪聲”干擾。
2.可以將仿真中psr的仿真步長(zhǎng)設(shè)置的小一些,取得最終的誤差率為相鄰幾個(gè)誤差率的平均值,也相當(dāng)于一個(gè)均值濾波。
最佳判別門限:
由于仿真時(shí),代碼數(shù)量少,導(dǎo)致01出現(xiàn)的頻率并不相同,經(jīng)過計(jì)算發(fā)現(xiàn)這種誤差不可忽略。因此重新計(jì)算判別門限,而非簡(jiǎn)單取a/2作為判別門限。
最終仿真結(jié)果如圖:
參考:
https://blog.csdn.net/qq_45654781/article/details/106579495
https://blog.csdn.net/hxxjxw/article/details/82628565
代碼
%% 信號(hào)初始化,為了與真實(shí)情況對(duì)照,適當(dāng)增加了字符,調(diào)整0-1比例大致為0.5 close all;clear;clc; signal = 'aaabbiieubaddsssyusongsong';% 為提高分辨率精度,又添加了幾個(gè)字符 %% 信號(hào)Huffman編碼 + haming(7,4)編碼 [dict,huffman_code,H_ratio,num] = En_Huffuman(signal);fprintf('霍夫曼編碼完成\n 壓縮比為:%f\n',H_ratio);global haming_code; haming_code = encode(huffman_code,7,4);fprintf('漢明編碼完成\n 編碼效率為:%f\n',4/7); %% 2ASK調(diào)制與解調(diào) --- 時(shí)間大約0.5min左右 tic;[err,BStar,reHaming_code,snr] = deCode(huffman_code,num);toc; figure(1);draw(err,snr);function [reHaming_code,bStar] = ASK(snr,lnP) % 功能說明:實(shí)現(xiàn)漢明碼載波調(diào)制+信道傳輸+相干解調(diào)+抽樣判決+輸出單次誤碼率 % input: % snr:信噪比,單位為dB % lnp:計(jì)算最佳判別門限 % % output: % reHaming_code:解調(diào)后的漢明碼 % bStar:最佳判別門限global haming_code; reHaming_code=zeros(size(haming_code)); numCode = length(haming_code); % 碼元個(gè)數(shù) singleT = 100; % 單個(gè)信號(hào),每秒鐘采樣數(shù) fs = 100Hz numTime = singleT*numCode; % 總的信號(hào)序列數(shù)目 t=linspace(0,100,numTime); % 生成時(shí)間序列,方便做圖 fc=10000; % 載波頻率 st=t; % 相當(dāng)于采樣后的信號(hào) % 信號(hào)離散化--->調(diào)制 for n=1:numCodeif haming_code(n)==0for m=numTime/numCode*(n-1)+1:numTime/numCode*nst(m)=0;endelsefor m=numTime/numCode*(n-1)+1:numTime/numCode*nst(m)=1;endend end% 載波調(diào)制 + 信道加噪 s = cos(2*pi*fc*t);% 載波信號(hào) s_2ask = st.*s; s_2ask = awgn(s_2ask,snr);% 相干解調(diào) ss_2ask = s_2ask.*s; ss_2ask = lowpass(ss_2ask,0.95,singleT,'ImpulseResponse','iir','Steepness',0.99);%低通濾波% 最佳判別門限計(jì)算 % a = max(ss_2ask); % a = min(1,a); a = 1; bStar = a/2+a/2/(10^(snr/20))*lnP;% 抽樣判決 for m=0:numCode-1 if ss_2ask(1,m*singleT+singleT/2) < bStarreHaming_code(m+1)=0;elsereHaming_code(m+1)=1;end endendfunction [err,BStar,reHaming_code,snr] = deCode(huffman_code,num) % 功能說明:漢明解碼 + 誤碼率分析 % input: % huffman_code:傳輸之前的霍夫曼碼 % num:霍夫曼代碼長(zhǎng)度,為了減少運(yùn)算復(fù)雜度,作為參數(shù)傳入 % output: % err:誤碼率 % BStar:最佳判別門限,方便理解 % reHaming_code:解調(diào)及抽樣判決后得到的漢明碼 % snr:信噪比序列,方便做圖global haming_code; snr = -6:1:18; L = length(snr); err = zeros(1,L); BStar = zeros(1,L); epoch = 16;% 便于計(jì)算最佳判別門限計(jì)算參數(shù) lnP1 = sum(haming_code)/length(haming_code); lnP = log((1-lnP1)/lnP1); % numHaming = length(haming_code);%調(diào)試用for i = 1:Lfor j = 1:epoch[reHaming_code,bStar] = ASK(snr(i),lnP);rehuffman_code = decode(reHaming_code,7,4);Rehuffman_code = rehuffman_code(1,1:num);err(i) = err(i) + sum(Rehuffman_code~=huffman_code)/(num);endBStar(i) = bStar;err(i) = err(i)/epoch; end % 對(duì)err進(jìn)行移動(dòng)平均濾波,進(jìn)一步消除偶然誤差(由于碼數(shù)少,導(dǎo)致單位誤差率大) windowSize = 4; b = (1/windowSize)*ones(1,windowSize); err = filter(b,1,err);err = err(1,windowSize+1:end); snr = snr(1,windowSize+1:end);endfunction draw(err,snr) % 做出仿真誤差率曲線以及理論曲線% 仿真誤差率 % Err = log10(err); % plot(snr,Err); semilogy(snr,err); xlabel('r/dB');ylabel('Pe');title('2ASK數(shù)字調(diào)制系統(tǒng)誤碼率與信噪比的關(guān)系'); hold on;% 理論誤差率 r = 10.^(snr/20); Perr = 0.5*erfc(sqrt(r/4)); % PErr = log10(Perr); % plot(snr,PErr); semilogy(snr,Perr);endfunction [dict,code,H_ratio,num] = En_Huffuman(signal) % 功能說明:對(duì)signal中的字母進(jìn)行霍夫曼編碼 % 參數(shù)說明: % input: % signal:需要轉(zhuǎn)換的字符串對(duì)象,即所需要傳輸?shù)男畔?% output: % dict:霍夫曼字典 % code:對(duì)信號(hào)的編碼 % H_ratio: 利用Huffman編碼的壓縮比 % num:總碼長(zhǎng)Signal = tabulate(signal');% Signal 為 k*3維元胞組,k為字符類數(shù);第一列對(duì)應(yīng)字符,第三列為字符對(duì)應(yīng)的頻率% 計(jì)算等長(zhǎng)碼的平均碼長(zhǎng)b k = size(Signal,1); % k個(gè)字符采用等長(zhǎng)碼需要的b(bit)滿足 2^(b) > k > 2^(b-1); if log2(k) ~= floor(log2(k))b =floor(log2(k))+1;% 反解出 log2(k) <= b < log2(k) + 1 elseb =floor(log2(k)); end% huffman編碼 p = (cell2mat(Signal(:,3))/100)'; symbols = Signal(:,1)'; dict = huffmandict(symbols,p); code = huffmanenco(signal,dict);% 計(jì)算壓縮后的平均碼長(zhǎng) L L = 0; for i = 1 : kL = L + size(cell2mat(dict(i,2)))*p(i); end% 總碼長(zhǎng),用于計(jì)算誤碼率 num = length(code);% 提高代碼效率,預(yù)先計(jì)算代碼長(zhǎng)度% 計(jì)算壓縮比 H_ratio = b/L(2);end總結(jié)
以上是生活随笔為你收集整理的数字调制2ASK误码率分析matlab实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 魔力宝贝手游不花钱怎么玩
- 下一篇: 循环神经网络(RNN)相关知识