版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上華 北 科 技 學(xué) 院信息論基礎(chǔ)課程設(shè)計說明書班級: 計算B092 姓名: 李 寧 (7) 設(shè)計題目: 信源編碼軟件 設(shè)計時間: 2012.7.4 至 2012.7.8 指導(dǎo)教師: 李 慧 評 語: _評閱成績: 評閱教師: 目 錄專心-專注-專業(yè)設(shè)計總說明早期的數(shù)據(jù)壓縮起源于人們對概率的認識。當(dāng)對文字信息進行編碼時,如果為出現(xiàn)概率較高的字母賦予較短的編碼,為出現(xiàn)概率較低的字母賦予較長的編碼,平均編碼長度就能縮短不少。印象中的著名的Morse電碼就是一個范例。信息論之父C.E.Shannon曾指出,任何信息都存在冗余,冗余大小與信息中每個符號的出現(xiàn)概率(不確定性)有關(guān)
2、。他所提出的無失真信源編碼定理奠定了數(shù)據(jù)壓縮的理論基礎(chǔ)。數(shù)據(jù)壓縮的目的就是要消除信息中的冗余,而信息熵及相關(guān)的定理恰恰用數(shù)學(xué)手段精確地描述了信息冗余的程度。 本文主要采用香農(nóng)編碼和費諾編碼方法來描述信源的編碼過程。香農(nóng)編碼采用信源符號與概率由用戶輸入。通過一定的校驗代碼確保離散信源的正確性。例如單個符號的概率不能大于1,概率和不能大于1,信源概率和不為1時無法編碼等校驗。由于香農(nóng)編碼是將信源概率由大到小排序的,所以,本軟件也實現(xiàn)了這一點,輸入時不必考慮信源概率順序問題,軟件會自動按概率排序編碼。最后將結(jié)果顯示在MFC列表控件上。用戶可以將最終結(jié)果保存成文件。費諾編碼通過輸入字符串來自動計算單個
3、信源符號的概率。當(dāng)然,為了方便起見,本軟件對費諾編碼還提供了打開文件完成信源輸入,從而可以更快的輸入字符串。進行編碼時同樣按概率從大到小排序,同樣可以將結(jié)果保存到文件中。本軟件界面友好,方便可靠,用戶可根據(jù)自己的愛好選擇不同的界面風(fēng)格。在首頁加入了好看的Flash,使軟件更為美觀。同樣反映除了本軟件的功能特性。根據(jù)實驗要求和日常壓縮數(shù)據(jù)的習(xí)慣,本軟件最終完成了以下目標:1、 界面設(shè)計友好,美觀,數(shù)據(jù)存儲安全,可靠。2、 操作簡便、適用,無冗余操作。3、 編碼效率較高,編碼時間短。關(guān)鍵詞: 離散信源;香農(nóng)編碼;費諾編碼;信源熵 前 言本課程設(shè)計是在學(xué)習(xí)了信息論與編碼和相關(guān)開發(fā)的軟件課程后,讓學(xué)生
4、通過實際的操作來熟悉信源編碼微機實現(xiàn),培養(yǎng)學(xué)生能夠獨立的完成對相關(guān)課題或者項目的分析能力、設(shè)計能力和調(diào)試能力。本課程設(shè)計是銜接在大一時C課程設(shè)計之后的,同樣是運用MFC程序來設(shè)計,聯(lián)系本學(xué)期所學(xué)內(nèi)容,要求有獨立的操作界面。由于在以前有過類似的練習(xí),故在這次的課程設(shè)計相對以前來說不是太難。在這次的課程設(shè)計中,著重培養(yǎng)的是學(xué)生的自學(xué)能力,以及獨立分析互聯(lián)網(wǎng)上和圖書館里的各種資料,來豐富自己的知識并且提高對數(shù)學(xué)公式的計算機實現(xiàn)、VC+等軟件的實際操作能力。通過這次的課程設(shè)計,能夠使學(xué)生對已經(jīng)學(xué)習(xí)過的信息論與編碼課程的進一步的掌握,能夠?qū)χR進行最大程度的消化融匯。因此這次的課程設(shè)計對我們有著非常重要
5、的意義。 本課程設(shè)計中用VC+編寫出基于MFC界面的簡單軟件以實現(xiàn)壓縮信源的目的。軟件應(yīng)用香農(nóng)編碼的相關(guān)理論,經(jīng)過比較系統(tǒng)合理的編程操作,實現(xiàn)可視化的窗口以方便用戶使用。通過簡單校驗確保信源正確性,保證軟件的可靠性。最終將結(jié)果保存為文檔方便記錄編碼結(jié)果。 通過讓完成具體編碼算法的程序設(shè)計和調(diào)試工作,達到提高編程能力和深刻理解編碼理論的目的。培養(yǎng)我們使用計算機和查閱參考資料的能力,提高我們的基本設(shè)計能力。培養(yǎng)了理論聯(lián)系實際和獨立思考的能力。并激發(fā)我們的實際開發(fā)創(chuàng)造的意識和能力。培養(yǎng)和提高我們的自學(xué)能力以及綜合運用所學(xué)理論知識去分析解決實際問題的能力。第1章 總體設(shè)計方案1.1 軟件結(jié)構(gòu)設(shè)計香農(nóng)編
6、碼幫助費諾編碼編碼選擇信源編碼費諾編碼香農(nóng)編碼編碼理論菜單皮膚切換圖1.1.1 軟件功能結(jié)構(gòu)圖輸入信源符號和概率碼長累加概率碼字進行編碼檢驗信息平均碼長顯示結(jié)果正確錯誤信源熵信息率信源符號概率編碼效率圖1.1.2 香農(nóng)編碼流程圖輸入字符串序列碼長概率碼字進行編碼打開文件字符串長度顯示結(jié)果字符個數(shù)信源熵信源符號編碼效率直接輸入概率計算及排序出現(xiàn)次數(shù)平均碼長圖1.1.3 費諾編碼流程圖第2章 算法思想及設(shè)計2.1香農(nóng)編碼2.1.1香農(nóng)編碼思想:設(shè)有離散無記憶信源:1按信源符號的概率從大到小的順序排列,為方便起見,可令23確定滿足下列不等式的整數(shù),并令為第個碼字的長度4把用二進制表示,用小數(shù)點后的位
7、作為的碼字例:有一單符號離散無記憶信源對該信源編二進制香農(nóng)碼編碼過程 :2.1.2香農(nóng)編碼算法設(shè)計:通過文本框輸入信源符號及相應(yīng)概率。用冒泡法將信源符號及概率依概率由大到小排序,計算其累加概率,用數(shù)學(xué)公式計算每個信源符號的。最后把結(jié)果寫入列表控件中,以可視化方式顯示編碼結(jié)果。2.2費諾編碼2.2.1費諾編碼思想設(shè)有離散無記憶信源1.按信源符號的概率從大到小的順序排隊不妨設(shè)2.將依次排列的信源符號按概率值分為兩大組,使兩個組的概率之和近似相同,并對各組賦予一個二進制碼元“0”和“1”。 3.將每一大組的信源符號再分為兩組,使劃分后的兩個組的概率之和近似相同,并對各組賦予一個二進制符號“0”和“1
8、”。 4.如此重復(fù),直至每個組只剩下一個信源符號為止。 5.信源符號所對應(yīng)的碼字即為費諾碼。例:有一單符號離散無記憶信源對該信源編二進制費諾碼2.2.2費諾編碼算法設(shè)計通過輸入字符串或打開相關(guān)文件獲取字符串,用字符串處理方法統(tǒng)計每個字符的數(shù)量及運算其概率。然后按照每個字符的概率用冒泡法進行排序。然后用遞歸的思想進行費諾編碼,求得了每個字符的二進制碼字。并且對編碼后的平均碼長,以及編碼的傳輸效率進行了求解。第3章 軟件詳細設(shè)計3.1主界面設(shè)計編碼軟件主界面如圖3.1.1所示,基本功能在菜單中進行選擇。用Falsh CS5軟件設(shè)計一個簡單的Flash插入到主界面,使界面更美觀而且形象。 圖3.1.
9、1 主界面3.2功能設(shè)計3.2.1香農(nóng)編碼的實現(xiàn)香農(nóng)編碼是通過編輯框依次輸入信源符號和概率的,輸入時同時完成校驗工作。即單個信源符號概率不能大于1,信源概率和不能大于1,概率和不為1時不能進行編碼。正確輸入信源符號及其概率后便可計算出該離散信源的碼長、碼字等信息??梢灾v編碼結(jié)果保存為txt文本等文件。圖3.2.1 香農(nóng)編碼界面圖3.2.2保存編碼結(jié)果(1) 添加信源代碼:void CShannonCode:OnAdd() / TODO: Add your control notification handler code hereUpdateData(true); CString tempf1
10、,tempf2;/添加之前、之后列表控件值float sum=0.0, sum2=0.0, tempa1, tempa2;if(m_prob >= 1.0)/單個信源符號概率不能大于1MessageBox("概率小于1!","提示");return;for(int i = 0;i < count;i+)/計算信源概率和 tempf1 = m_list1.GetItemText(i,1);tempa1 = (float)(atof(tempf1);sum = sum +tempa1;if(sum >= 1.0)/如果和大于等于1,則不再添
11、加MessageBox("信源概率和已等于1!無法添加!","提示");return;CString s1,s2;m_list1.InsertItem(r,"");s1.Format("%s",m_single);m_list1.SetItemText(r,0,s1);s2.Format("%.6f",m_prob);m_list1.SetItemText(r,1,s2);r+;count+;for(int j = 0;j < count;j+)/計算信源概率和 tempf2 = m_li
12、st1.GetItemText(j,1);tempa2 = (float)(atof(tempf2);sum2 = sum2 +tempa2;if(sum2 > 1.0)/如果添加后概率和大于1,則最后添加的信源不做計算MessageBox("當(dāng)前信源添加后信源概率和大于1!","提示");s1.Format("%s","");m_list1.SetItemText(r-1,0,s1);s2.Format("%s","");m_list1.SetItemText(r-1
13、,1,s2);r-;count-;return;m_single = ""m_prob = 0.0;UpdateData(false); (2) 算法實現(xiàn)代碼:void CShannonCode:Count() CString singe,temp,s;char binN=""CString singleN;/信源符號數(shù)組float pN;/信源概率數(shù)組int i,j,c3;float btemp,vtemp;double c1,c2;/讀取輸入的信源符號和概率for(i = 0; i < count; i+)singlei =m_list1.Ge
14、tItemText(i,0); temp=m_list1.GetItemText(i,1); pi = (float)(atof(temp);/信源符號和概率按概率大小排序for(i = 1;i < count;i+) for(j = 0;j < count-i;j+)if(pj < pj+1)ExChangeChar(single,j,j+1);ExChangePsingle(p,j,j+1);for(i = 0; i < count; i+)m_list2.InsertItem(i,"");temp.Format(" %s "
15、,singlei);m_list2.SetItemText(i,0,temp);/信源符號temp.Format("%.6f",pi);m_list2.SetItemText(i,1,temp);/概率/計算累加概率;for(i = 0; i < count; i+)temp = m_list2.GetItemText(i,1); singi.pa = (float)(atof(temp); sing0.paa = 0;for(i = 0; i < count; i+) singi.paa =singi-1.pa+singi-1.paa; for(i = 0;
16、i < count; i+)s.Format("%.6f",singi.paa); m_list2.SetItemText(i,2,s);/累加概率/計算碼字長度; for(i = 0;i < count;i+) for(j = 0;j < N;j+)if(j>=-log(singi.pa)/log(2)&&j<1-log(singi.pa)/log(2)singi.k=j;c1 = -log(singi.pa)/log(2);c2 = 1-log(singi.pa)/log(2);c3 = int(c1);if(c3-c1)
17、= 0)singi.k = c3;elsesingi.k = c3+1;for(i = 0; i < count; i+)s.Format("%d",singi.k); m_list2.SetItemText(i,3,s);/碼字長度 /計算二進制數(shù); for(i = 0;i < count;i+)singi.binary0 ='0'singi.binary1 ='.'btemp = singi.paa;for(j=0;j<singi.k;j+)if(btemp*2 >= 1)binj = '1'bte
18、mp = btemp*2-1;elsebinj = '0'btemp = btemp*2;singi.binaryj+2 = binj; singi.binaryj+2 ='0' for(i = 0; i < count; i+)s.Format("%s",singi.binary); m_list2.SetItemText(i,4,s);/二進制數(shù)/計算碼字; for(i = 0;i < count;i+)vtemp = singi.paa;for(j = 0;j < singi.k;j+)if(vtemp*2>=1
19、)singi.codej='1'vtemp=vtemp*2-1;elsesingi.codej='0'vtemp=vtemp*2; singi.codej='0'for(i = 0; i < count; i+)s.Format("%s",singi.code); m_list2.SetItemText(i,5,s);/碼字for(i = 0;i < count ; i+)for(int j = 0;j < 6; j+)Result1 = Result1 + m_list2.GetItemText(i,j)+
20、"t"Result1 = Result1 + "n"void CShannonCode:CodeEfficiency()/計算并顯示編碼效率CString temp,s;int i;double K,Hx,R,A; for(i = 0; i < count; i+)temp = m_list2.GetItemText(i,1); singi.pa =(float)(atof(temp); K = sing0.pa*sing0.k;Hx = -sing0.pa*log(sing0.pa)/log(2); for(i = 0; i < count
21、; i+)K = K+singi.pa*singi.k;Hx = Hx+(-singi.pa*log(singi.pa)/log(2); R = (K*log(2)/log(2)/1; A = Hx/R; /A代表編碼效率,轉(zhuǎn)化為百分比; s.Format("%.6f",K); m_list3.InsertItem(0,s,0); s.Format("%.6f",Hx); m_list3.SetItemText(0,1,s); s.Format("%.6f",R); m_list3.SetItemText(0,2,s); s.Form
22、at("%.6f",A); m_list3.SetItemText(0,3,s);/顯示結(jié)果void CShannonCode:OnResult() / TODO: Add your control notification handler code herem_list2.DeleteAllItems();/清空已有數(shù)據(jù)m_list3.DeleteAllItems();CString temp;float sum=0.0,temp2;for(int i=0;i<count;i+)/計算信源概率和 temp=m_list1.GetItemText(i,1);temp2
23、=(float)(atof(temp);sum = sum +temp2;if(sum != 1.0)/信源概率和不為1時不進行編碼MessageBox("信源概率之和不為1!請檢查!","提示");return;Count();/編碼結(jié)果CodeEfficiency();/編碼效率(3) 保存代碼:void CShannonCode:OnBUTTONSave() / TODO: Add your control notification handler code hereUpdateData(true); CFileDialog dlgSave(fal
24、se,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"Txt Files(*.txt)|*.txt|Dat Files(*.dat)|*.dat|All Files (*.*)|*.*|",AfxGetMainWnd();/構(gòu)造文件打開對話框CString strPath; /聲明變量if(dlgSave.DoModal() = IDOK)/判斷是否按下"打開"按鈕strPath=dlgSave.GetPathName();/獲得文件路徑和文件名 if(strPath!="")FILE
25、*pFile=fopen(strPath,"w");if (pFile)fprintf(pFile,"%s",Result1);fclose(pFile);UpdateData(false);3.2.2費諾編碼的實現(xiàn)費諾編碼可由用戶打開文本獲取信源序列,也可直接輸入序列。輸入內(nèi)容為空時會有提示信息彈出。正確讀到文本域內(nèi)容后點擊編碼按鈕即可用算法實現(xiàn)各字符概率的計算并按概率排序,進而對其進行編碼。列表框內(nèi)容也可以進行保存。圖3.2.3 費諾編碼界面圖3.2.4 打開文件讀取文本(1) 主要代碼BOOL CFanoCode:OnInitDialog() CD
26、ialog:OnInitDialog();/ TODO: Add extra initialization here/編碼結(jié)果欄初始化; m_list1.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP|LVS_EX_ONECLICKACTIVATE|LVS_EX_GRIDLINES);m_list1.InsertColumn(0,_T("信源符號"), LVCFMT_CENTER, 60);m_list1.InsertColumn(1,_T("出現(xiàn)次數(shù)"), LVCFMT_CENTE
27、R, 70);m_list1.InsertColumn(2,_T("概率"), LVCFMT_CENTER, 80); m_list1.InsertColumn(3,_T("碼字長度"), LVCFMT_CENTER, 60);m_list1.InsertColumn(4,_T("碼字"), LVCFMT_CENTER, 80); /信源信息級編碼效率欄初始化; m_list2.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP|LVS_EX_ONECLICKACTI
28、VATE|LVS_EX_GRIDLINES);m_list2.InsertColumn(0,_T("字符串長度"), LVCFMT_CENTER, 80);m_list2.InsertColumn(1,_T("字符個數(shù)"), LVCFMT_CENTER, 80);m_list2.InsertColumn(2,_T("平均碼長"), LVCFMT_CENTER, 80);m_list2.InsertColumn(3,_T("信源熵"), LVCFMT_CENTER, 80);m_list2.InsertColumn(
29、4,_T("編碼效率"), LVCFMT_CENTER, 80);return TRUE; / return TRUE unless you set the focus to a control / EXCEPTION: OCX Property Pages should return FALSEint Group(CodeType FanoNode,int low,int high) /*一次分組(一分為二)并編碼*/float MinSum=FanoNodelow.data,MaxSum=FanoNodehigh.data;FanoNodelow.bitFanoNode
30、low.length+=1;FanoNodehigh.bitFanoNodehigh.length+=0;while(low+1 < high)if(MinSum > MaxSum)MaxSum+= FanoNode-high.data;FanoNodehigh.bitFanoNodehigh.length+ = 0; /*編碼加0*/elseMinSum+=FanoNode+low.data;FanoNodelow.bitFanoNodelow.length+ = 1; /*編碼加1*/return low; /*返回分組的第一部分的上界*/void FanoEncoding(C
31、odeType FanoNode,int s,int t)/*遞歸進行費諾編碼*/if(s < t)int pivotloc = Group(FanoNode,s,t);if(s < t-1)FanoEncoding(FanoNode,s,pivotloc);FanoEncoding(FanoNode,pivotloc+1,t);int IsnotIn(char a,char t,int n,int count) /*檢查字符a是否在數(shù)組t中*/for(int k = 0;k < n;k+)if(a = tk)countk+;return 0;return 1;void Ex
32、ChangeFloat(float p,int i,int j) /*交換兩個數(shù)值*/ float temp;temp = pi;pi = pj;pj = temp;void ExChangeChar(char t,int i,int j) /*交換兩個字符*/ char temp;temp = ti;ti = tj;tj = temp;void CFanoCode:OnResult() / TODO: Add your control notification handler code hereUpdateData(true); m_list1.DeleteAllItems();m_list
33、2.DeleteAllItems();if(m_text="")MessageBox("字符串內(nèi)容不能為空!請輸入字符串!","提示");return;float pMaxStrLength;/*p每個字符的概率*/char strMaxStrLength,tMaxStrLength;/*str輸入的字符串,t不重復(fù)的字符串*/char *q = (LPSTR)(LPCTSTR)m_text;/CString to char *strcpy(str,q);int countMaxStrLength=0,m=1;/*count每個字符的
34、個數(shù),m為不重復(fù)的字符的個數(shù)*/int SLength = strlen(str);if(SLength > 200)MessageBox("字符串長度超過200!","提示");return;t0 = str0;count0+;for(int i = 1;i < SLength;i+)/*去除重復(fù)的字符,并計算個數(shù)*/if(IsnotIn(stri,t,m,count)tm = stri;countm+;for(int j = 0;j < m;j+)pj=float(countj)/float(SLength);for(i = 1;i
35、 < m;i+) /*冒泡排序*/ for(j = 0;j < m-i;j+)if(pj < pj+1)ExChangeFloat(p,j,j+1);ExChangeChar(t,j,j+1);/*相應(yīng)的計數(shù)器數(shù)值也交換 */int temp;temp = countj;countj = countj+1;countj+1 = temp;for(i = 0;i < m;i+)/*將值賦給結(jié)構(gòu)體數(shù)組 */FanoNodei.data = pi;FanoNodei.length =0;FanoNodei.Character = ti;FanoEncoding(FanoNod
36、e,0,m-1);for( i=0;i<m;i+)K+=FanoNodei.data*FanoNodei.length; /*求平均碼長*/H+=-FanoNodei.data*log(FanoNodei.data); /*求信源熵H(X)的大小*/R = H/K;CString s1,s2,s3;for(i = 0;i < m;i+)m_list1.InsertItem(i,"");s1.Format(" %ct",FanoNodei.Character);m_list1.SetItemText(i,0,s1);s1.Format(&quo
37、t;%d ",counti);m_list1.SetItemText(i,1,s1);s1.Format("%.6f",FanoNodei.data);m_list1.SetItemText(i,2,s1);s1.Format(" %d ",FanoNodei.length);m_list1.SetItemText(i,3,s1);s3=""for(int j=0;j<FanoNodei.length;j+)s2.Format("%d",FanoNodei.bitj);s3=s3+s2;m_list
38、1.SetItemText(i,4,s3);m_list2.InsertItem(0,"");s2.Format("%d",SLength);m_list2.SetItemText(0,0,s2);s2.Format("%d",m);m_list2.SetItemText(0,1,s2);s2.Format("%.6f",K);m_list2.SetItemText(0,2,s2);s2.Format("%.6f",H);m_list2.SetItemText(0,3,s2);s2.Format
39、("%.6f",R);m_list2.SetItemText(0,4,s2);/遍歷列表,獲取相應(yīng)值,用于保存for(i = 0;i < 5 ; i+)for(j = 0;j < m; j+)Result = Result + m_list1.GetItemText(i,j)+"t"Result = Result + "n"(2) 讀文件代碼:void CFanoCode:OnOpenFile() / TODO: Add your control notification handler code hereUpdateDa
40、ta(true); CFileDialog dlgOpen(true,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"Txt Files(*.txt)|*.txt|Dat Files(*.dat)|*.dat|All Files (*.*)|*.*|",AfxGetMainWnd();/構(gòu)造文件打開對話框CString strPath; /聲明變量if(dlgOpen.DoModal() = IDOK)/判斷是否按下"打開"按鈕strPath = dlgOpen.GetPathName();/獲得文件路徑m
41、_FilePath.Format("%s",strPath);/顯示文件路徑FILE *pFile = fopen(strPath,"r");/以讀形式打開文件if (pFile)/判斷文件是否被正確打開char pchData1000 = 0;/定義數(shù)據(jù)緩沖區(qū) fread(pchData,sizeof(char),1000,pFile); /讀取數(shù)據(jù)到緩沖區(qū)中fclose(pFile);/關(guān)閉文件m_text.Format("%s",pchData);UpdateData(false);3.2.3有關(guān)文檔的鏈接編碼軟件自然不能缺少對
42、編碼的理論介紹,這一點可通過網(wǎng)頁形式展現(xiàn)出來。通過單擊觸發(fā)打開制作好的簡單網(wǎng)頁??煞謩e對每種編碼進行簡單介紹。圖3.2.5 編碼理論介紹(1) 主要代碼void CMyDlg:OnMENUITEMSourcecoding() / TODO: Add your command handler code hereShellExecute(NULL, _T("open"),"webSourcecoding.html", NULL,NULL, SW_SHOW);軟件設(shè)計離不開軟件說明書,本軟件的說明書也是通過網(wǎng)頁完成的,這樣可以保證說明書不被修改,保持原版特性。
43、圖3.2.6軟件說明3.2.4皮膚切換的設(shè)計以往的軟件制作都以系統(tǒng)默認的樣式為主,在不斷的學(xué)習(xí)過程中要走向更專業(yè)化的道路,簡單的皮膚添加可使整個程序樣式不再單一,更為人性化。圖3.2.7 皮膚切換實例1圖3.2.8皮膚切換實例2(1) 皮膚代碼:BOOL CMyApp:InitInstance()AfxEnableControlContainer();SkinStart(_T("skinbelv.urf"),WINDOW_TYPE_VC,"",GTP_LOAD_FILE,NULL,NULL);第4章 軟件測試4.1香農(nóng)編碼的測試4.1.1 軟件運行及結(jié)果
44、測試圖4.1.1 香農(nóng)編碼結(jié)果顯示圖4.1.2 香農(nóng)編碼錯誤提示圖4.1.3 香農(nóng)編碼結(jié)果保存文件測試時發(fā)現(xiàn)軟件能夠較好的完成預(yù)期目標,能夠保證阻止各類錯誤信源的輸入,以及能夠正確按照概率排序并計算正確的碼字。最終還可以正確的保存文件。4.2費諾編碼的測試4.2.1 軟件運行及結(jié)果測試文本內(nèi)容為空時無法進行編碼,會有錯誤提示。圖4.2.1 空文本無法操作正確打開文件或輸入字符串后,軟件能夠正確完成編碼任務(wù)。結(jié)果如下圖:圖4.2.2 費諾編碼結(jié)果顯示圖4.2.3 費諾編碼保存結(jié)果4.3測試結(jié)果通過對各個模塊功能的測試,最終可以確定本軟件的數(shù)據(jù)計算正確性及可靠性。各個附加功能也能夠無誤的實現(xiàn)。第5
45、章 總結(jié) 通過一周的時間終于完成了香農(nóng)、費諾編碼軟件的設(shè)計開發(fā),時間的緊迫導(dǎo)致軟件依然存在不少問題,以費諾編碼不能識別漢子的問題為首。在參考眾多的資料后還是沒能及時將這個問題解決,不過時間短促,短時間內(nèi)這個問題也不好解決。在以后的學(xué)習(xí)生活中我會嘗試著完成這個BUG。在課程設(shè)計的過程中困難不時的出現(xiàn),很多時候覺得無可入手,想盡辦法也不知道該怎么解決。在這個過程中我深深感受到編程人員經(jīng)驗是多么的寶貴。由于之前已經(jīng)有過幾次關(guān)于MFC的課程設(shè)計,所以在軟件模塊設(shè)計方面比較容易解決。算法方面,自己嘗試著去做了但總是不如意,由于時間關(guān)系,還是參考了相關(guān)文檔。在實踐中感覺到了學(xué)數(shù)學(xué)將數(shù)學(xué)算法轉(zhuǎn)換成計算機算法
46、不是一件容易的事。信源編碼軟件的設(shè)計同樣具有一定的挑戰(zhàn)性,以往的程序大多是在“黑窗口”下完成的,寫一個算法也是一件比較難的事,但路就是這樣走過來的,沒有今天的一小步就沒有明天的一大步。不斷地設(shè)計,不斷的思索,慢慢的就發(fā)現(xiàn)自己學(xué)會很多。有些問題自然就邊的簡單了。本次課程設(shè)計比較有突破性的是引入了皮膚文件,以往的MFC編程都是在系統(tǒng)默認的背景下運行的,這樣的軟件總感覺不是很舒服。之前學(xué)會了給對話框添加背景圖片等一些簡單的美化,但還是感覺不夠好。于是自己花了一段時間學(xué)習(xí)了一下皮膚美化程序,功夫不負有心人,這回在這方面感覺小有成就了。不過這也不算什么真真的提高,學(xué)好編程的思想更為重要。當(dāng)然,軟件的開發(fā)
47、離不開好的資料和同學(xué)的交流。在這次課程設(shè)計中深深感受到了同學(xué)之間交流合作的重要性。交流不但可以發(fā)現(xiàn)新的問題,提高解決問題的效率,而且可以快速的學(xué)習(xí)到新的知識。最后,感謝同學(xué)在課程設(shè)計中給予我的幫助。讓我從中感受到了軟件開發(fā)時團隊的力量以及重要性。參 考 文 獻1 陳運. 信息論與編碼 M. 北京:電子工業(yè)出版社,2011.2 姚領(lǐng)田.精通MFC程序設(shè)計 M. 北京:人民郵電出版社,2006.附 錄源程序清單1 首頁Flash效果代碼:BOOL CMyDlg:OnInitDialog()CDialog:OnInitDialog();/ Add "About." menu it
48、em to system menu./ IDM_ABOUTBOX must be in the system command range.ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL)CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()pS
49、ysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);/ Set the icon for this dialog. The framework does this automatically/ when the application's main window is not a dialogSetIcon(m_hIcon, TRUE);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small icon/ TODO: Add extra initialization hereCRect layoutRect; GetClientRect(&layoutRect);
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度中美高新技術(shù)轉(zhuǎn)讓合同
- 《屈原故里端午習(xí)俗傳承與保護研究》
- 《我國大學(xué)生中式臺球賽事發(fā)展研究》
- 《新質(zhì)生產(chǎn)力涵蓋的行業(yè)和領(lǐng)域》范文
- 《異向旋轉(zhuǎn)葉片盤設(shè)計及對餐飲油煙顆粒物捕集的研究》
- 《InterTAN和股骨髓腔的匹配度與術(shù)后隱性失血關(guān)系的研究》
- 2024年度房地產(chǎn)買賣合同.do
- 2024年景德鎮(zhèn)從業(yè)資格證客運考試題庫
- 2024年昭通客運從業(yè)資格證模擬考
- 人教部編版六年級語文上冊第11課《宇宙生命之謎》精美課件
- 小學(xué)數(shù)學(xué)教學(xué)中數(shù)學(xué)模型的構(gòu)建與應(yīng)用
- 經(jīng)導(dǎo)管主動脈瓣置換術(shù)(TAVR)患者的麻醉管理
- 運籌學(xué)智慧樹知到答案2024年哈爾濱工程大學(xué)
- 行政執(zhí)法證專業(yè)法律知識考試題庫含答案(公路路政)
- 《人行自動門安全要求》標準
- 廣鐵集團校園招聘機考題庫
- 第一章、總體概述:施工組織總體設(shè)想、工程概述、方案針對性及施工標段劃分
- 2024-2030年中國語言服務(wù)行業(yè)發(fā)展規(guī)劃與未來前景展望研究報告
- 2024-2030年白玉蝸牛養(yǎng)殖行業(yè)市場發(fā)展現(xiàn)狀及發(fā)展前景與投資機會研究報告
- HGT 2902-2024《模塑用聚四氟乙烯樹脂》
- 2024 年上海市普通高中學(xué)業(yè)水平等級性考試 物理 試卷
評論
0/150
提交評論