


收稿日期:2023-11-28
基金項目:廣西高等教育本科教學改革工程項目(2018JGB280)
DOI:10.19850/j.cnki.2096-4706.2024.04.040
摘? 要:針對“通信原理”課程的重要教學內容——信源編譯碼技術具有概念抽象、理論性強、應用方法靈活等特點,以培養應用型人才為出發點,對該課程的教學改革進行了研究,引入MATLAB軟件對重要的教學內容進行建模仿真和性能分析,在信源編譯碼技術教學中應用MATLAB軟件演示了兩種主要的信源編譯碼方法——脈沖編碼調制和增量調制的程序和波形,提高了教學直觀性及趣味性,促進了學生對信源編譯碼的基本方法和主要特點的理解和掌握,取得了較好的教學效果。
關鍵詞:教學改革;信源編譯碼;應用型人才培養
中圖分類號:TP391;G642? ? ? 文獻標識碼:A? 文章編號:2096-4706(2024)04-0195-04
Research on Application of MATLAB to Information Source Encoding and Decoding Technology Teaching
YANG Xiaofeng
(School of Physics and Telecommunication Engineering, Yulin Normal University, Yulin? 537000, China)
Abstract: The content of information source encoding and decoding schemes in Communications Theory course is abstract and complicated. To keep pace with the trends of application-oriented talents cultivation, the author conducted teaching reform in Communications Theory course and applied MATLAB simulation to important teaching contents. When teaching information source encoding and decoding schemes, the author performed MATLAB simulation demo of two primary information source encoding and decoding schemes, that is, Pulse Code Modulation and Delta Modulation, which improve teaching intuitiveness and teaching quality a lot.
Keywords: teaching reform; information source encoding and decoding; application-oriented talents cultivation
0? 引? 言
“通信原理”是通信工程、電子信息工程等信息類專業重要的一門專業課程,是后續學習“計算機通信網絡”“移動通信”等專業課程的基礎,也是信息類專業考研的必考專業科目[1-3]。該課程主要講授通信系統的基本原理、分析方法和設計方法,信源編譯碼技術是該課程的重點教學內容,主要講授在數字通信系統發送端將模擬信源轉化為數字信號、在接收端將接收到的數字信號還原回模擬信號的原理和方法,具有概念抽象、理論性強、應用方法靈活等特點。對于應用型本科高校信息類專業的學生來說,由于數學基礎比較薄弱,理解和掌握這部分內容比較困難。
根據應用型本科高校的人才培養目標和因材施教的基本原則,筆者在進行信源編譯碼技術的教學時進行了如下教學改革:重點講解基本理論的物理意義和應用方法,淡化公式的數學推導,引入MATLAB軟件對重要的理論內容進行建模仿真和性能分析。利用MATLAB 軟件強大的數值分析、信號處理和圖形顯示的功能,將其與信源編譯碼技術的教學相結合,可以提高教學直觀性及趣味性,使學生從繁重的數學運算與推導中解脫出來,增強學生對理論知識的理解程度和應用能力[4,5]。
1? PCM編譯碼的教學
脈沖編碼調制(Pulse Code Modulation, PCM)是最常用的一種信源編碼方法[6-8]。教學重點為A律13折線PCM編碼。首先介紹其基本原理:將輸入信號抽樣值歸一化到[-1,+1]之間,將正、負區間各劃分為不均勻的8段,每段均勻劃分為16個量化間隔,一共2×8×16 = 256 = 28個量化間隔,可編為8位二進制碼。然后介紹該8位碼的編碼方法:最高位為表示信號極性的1位極性碼,正極性信號的極性碼編為1,負極性信號的極性碼編為0;極性碼后面3位是表示信號所在段落的段落碼;最低4位為表示信號所在該段落內量化間隔的段內碼。段落碼和段內碼的編碼方法如表1和表2所示。以最小量化間隔Δ=1/2 048為量化單位,各段起始電平和各段內量化間隔長度如表1所示。教學難點為如何確定信號所在段落和該段落內量化間隔的序號。重點介紹該問題的解決方法:將歸一化的輸入信號抽樣值和各段起始電平進行比較,最接近且不大于輸入信號抽樣值的段落起始電平對應的段落即為信號所在段落;輸入信號抽樣值減去所在段落起始電平再除以該段內量化間隔長度的商即為所在該段落內量化間隔的序號。PCM編碼的MATLAB實現子程序如下:
function [out]=pcm_encode(xq)
% xq為量化信號即PCM編碼輸入
n=length(xq);
for i=1:n
% PCM極性碼編碼:
if xq(i)>0
out(i,1)=1;
else
out(i,1)=0;
end
% PCM段落碼編碼:
if abs(xq(i))>=0 & abs(xq(i))<16
out(i,2)=0;out(i,3)=0;out(i,4)=0;step=1;st=0;
elseif 16<=abs(xq(i)) & abs(xq(i))<32
out(i,2)=0;out(i,3)=0;out(i,4)=1;step=1;st=16;
elseif 32<=abs(xq(i)) & abs(xq(i))<64
out(i,2)=0;out(i,3)=1;out(i,4)=0;step=2;st=32;
elseif 64<=abs(xq(i)) & abs(xq(i)) <128
out(i,2)=0;out(i,3)=1;out(i,4)=1;step=4;st=64;
elseif 128<=abs(xq(i)) & abs(xq(i))<256
out(i,2)=1;out(i,3)=0;out(i,4)=0;step=8;st=128;
elseif 256<=abs(xq(i)) & abs(xq(i))<512
out(i,2)=1;out(i,3)=0;out(i,4)=1;step=16;st=256;
elseif 512<=abs(xq(i)) & abs(xq(i))<1024
out(i,2)=1;out(i,3)=1;out(i,4)=0;step=32;st=512;
elseif 1024<=abs(xq(i)) & abs(xq(i))<2048
out(i,2)=1;out(i,3)=1;out(i,4)=1;step=64;st=1024;
else
out(i,2)=1;out(i,3)=1;out(i,4)=1;step=64;st=1024;
end
% PCM段內碼編碼:
tmp=floor((abs(xq(i))-st)/step);
t=dec2bin(tmp,4) - 48;
out(i,5:8)=t(1:4);
end
% PCM編碼輸出:
out=reshape(out',1,8*n);
表1? PCM段落碼編碼方法
段落序號 段落碼 段落范圍(Δ) 段落起始
電平(Δ) 段內量化
間隔(Δ)
8 1 1 1 1 024~2 048 1 024 64
7 1 1 0 512~1 024 512 32
6 1 0 1 256~512 256 16
5 1 0 0 128~256 128 8
4 0 1 1 64~128 64 4
3 0 1 0 32~64 32 2
2 0 0 1 16~32 16 1
1 0 0 0 0~16 0 1
表2? PCM段內碼編碼方法
量化級序號 段內碼 量化級序號 段內碼
15 1 1 1 1 7 0 1 1 1
14 1 1 1 0 6 0 1 1 0
13 1 1 0 1 5 0 1 0 1
12 1 1 0 0 4 0 1 0 0
11 1 0 1 1 3 0 0 1 1
10 1 0 1 0 2 0 0 1 0
9 1 0 0 1 1 0 0 0 1
8 1 0 0 0 0 0 0 0 0
PCM譯碼方法為:將極性碼譯為信號極性;根據表1將段落碼譯為信號所在段落,根據表2將段內碼譯為信號所在該段落內量化間隔的序號,然后根據表3用信號所在段落的起始電平加上該段落內量化間隔長度乘以所在量化間隔的序號再加上所在該段落內半個量化間隔的長度計算出信號的譯碼電平。PCM譯碼的MATLAB實現子程序如下:
function [out]= pcm_decode(y,v)
% y為輸入信號的PCM編碼,v為量化區間長度
n=length(y);
y=reshape(y',8,n/8)';
%各段落起始電平:
sg(1)=0;sg(2)=16;sg(3)=32;sg(4)=64;sg(5)=128;sg(6)=256;sg(7)=512;sg(8)=1024;
%各段落內量化間隔長度:
step(1)=1;step(2)=1;step(3)=2;step(4)=4;step(5)=8;step(6)=16;step(7)=32;step(8)=64;
for i=1:n/8
%極性碼譯碼:
ss=2*y(i,1)-1;
%段落碼譯碼:
sn=y(i,2)*4+y(i,3)*2+y(i,4)+1;
st=sg(sn);
%段內碼譯碼:
sl=(y(i,5)*8+y(i,6)*4+y(i,7)*2+y(i,8))*step(sn)+0.5*step(sn);
% PCM譯碼輸出:
out(i)=ss*(st+sl)/4096*v;
end
下面以輸入信號x=sin(100πt)+0.5sin(300πt)為例說明如何運用MATLAB對該信號進行PCM編譯碼。MATLAB實現主程序如下,作圖如圖1所示。
clear all
close all
ts=0.001;? ? ? ? ? ? ? ? ? ? ? ? ?%采樣時間間隔
t=0:ts:20*ts;? ? ? ? ? ? ? ? ? ? %仿真時間序列
x=sin(100*pi*t)+0.5*sin(300*pi*t);
%輸入信號
v=max(x)-min(x);? ? ? ? ? ?%量化區間長度
xn=x/v;? ? ? ? ? ? ? ? ? ? ? ? ? ?%輸入信號歸一化
xq=floor(xn*4096);? ? ? ? %量化信號
y=pcm_encode(xq);? ? ? ? % PCM編碼
xd=pcm_decode(y,v);? ? ?% PCM譯碼
%作圖:
subplot(311)
plot(t,x);ylim([-1.5 1.5]);title('輸入信號');
subplot(312)
stairs(y);ylim([-1.5 1.5]);title('PCM編碼輸出');
subplot(313)
plot(t,xd);ylim([-1.5 1.5]);title('PCM譯碼輸出');
圖1? PCM編譯碼
從圖1可以看出,PCM譯碼波形和原輸入信號波形比較相似,驗證了PCM編譯碼的有效性,但是由于一個信號抽樣值編為8位PCM碼,需要較大傳輸帶寬和傳輸速率。在教學中利用MATLAB仿真軟件演示PCM編譯碼的程序和波形,可以幫助學生深入理解PCM編譯碼的方法和特點。
2? DM編譯碼的教學
增量調制(Delta modulation, DM)是PCM的一種改進方法[6-8]。在相同的信噪比條件下,DM比PCM具有更少的編碼位數、更小的傳輸帶寬和傳輸速率。首先介紹其基本原理:PCM是對每個信號樣值獨立編碼,因為信號樣值的取值范圍較大,所以PCM需要較多的編碼位數、較大的傳輸帶寬和傳輸速率。而DM利用相鄰信號樣值的相關性減少信息冗余即對相鄰信號樣值的差值進行編碼,因為相鄰信號樣值的差值取值范圍較小,所以DM需要較少的編碼位數、較小的傳輸帶寬和傳輸速率。重點介紹DM編碼方法:如果相鄰信號樣值的差值為正,則編為1;如果相鄰信號樣值的差值為負,則編為0。然后介紹DM譯碼方法:對應1碼的譯碼電平上升一個量化臺階,對應0碼的譯碼電平下降一個量化臺階,得到階梯形的譯碼輸出,再經過平滑濾波器得到平滑的譯碼輸出。
下面以與PCM編譯碼案例相同的輸入信號x=sin(100πt)+0.5sin(300πt)為例說明如何運用MATLAB對該信號進行DM編譯碼。MATLAB實現程序如下,作圖如圖2所示。從圖2可以看出,DM譯碼波形和原輸入信號波形比較相似,驗證了DM編譯碼的有效性。
clear all
close all
ts=0.001;? ? ? ? ? ? ? ? ? ? ? ? ? %采樣時間間隔
t=0:ts:20*ts;? ? ? ? ? ? ? ? ? ? ?%仿真時間序列
x=sin(2*pi*50*t)+0.5*sin(2*pi*150*t);
%輸入信號
% DM編碼:
delta=0.4;? ? ? ? ? ? ? ? ? ? ? ? ?%量化臺階
ql1(1+length(t))=0;? ? ? ? ? %編碼量化電平初始化
for k=1:length(t)
e(k)=x(k)-ql1(k);? ? ? ? ? %量化誤差
eq1(k)=delta*(2*(e(k)>=0)-1);
%編碼量化電平增量
ql1(k+1)=eq1(k)+ql1(k);
%編碼量化電平更新
y(k)=(eq1(k)>0);? ? ? ? ? % DM編碼輸出
end
% DM譯碼:
ql2(1+length(t))=0;
%譯碼量化電平初始化
for k=1:length(t)
eq2(k)=delta*(2*y(k)-1);
%譯碼量化電平增量
xd(k)=eq2(k)+ql2(k);? ? ? ? ?%譯碼輸出
ql2(k+1)=xd(k);? ? ? ? ? ? ? ? ?%譯碼量化電平更新
end
%作圖:
subplot(311)
plot(t,x);ylim([-1.5 1.5]);title('輸入信號');
subplot(312)
stairs(y);ylim([-1.5 1.5]);title('DM編碼輸出');
subplot(313)
stairs(t,xd);hold on;
plot(t,smooth(xd,'sgolay'));hold off;
ylim([-1.5 1.5]);title('DM譯碼輸出');
圖2? DM編譯碼
最后,引導學生對比PCM和DM編譯碼輸出的波形圖,總結這兩種信源編譯碼方法的不同特點:對于同樣的21個采樣值的輸入信號,PCM編碼輸出168位碼,DM編碼輸出21位碼,DM所需的傳輸帶寬和傳輸速率更小、傳輸有效性更高;而PCM譯碼輸出比DM譯碼輸出更接近原輸入信號的波形,因為信源編譯碼方法的抗量化噪聲性能隨編碼位數的增加指數級增長,PCM編碼位數為8位,DM編碼位數為1位,因此PCM比DM具有更高的抗量化噪聲性能、譯碼準確性更高。另外,DM量化臺階的取值同時影響量化噪聲和過載噪聲,量化臺階越大,則量化噪聲越大,而過載噪聲越小,所以應根據量化噪聲和過載噪聲折中選取合適的量化臺階[9,10]。
以上詳細介紹了利用MATLAB實現PCM和DM兩種信源編譯碼方法,兩者的波形圖直觀地展示了各自不同特點,給學生留下深刻的印象。
3? 結? 論
筆者根據通信技術的發展趨勢和因材施教的基本原則合理取舍教學內容,將MATLAB仿真引入“通信原理”課程教學中,利用MATLAB演示信源編譯碼方法PCM和DM的程序和波形,將重難點知識形象化,加強了課程內容之間的相互聯系,能夠充分調動學生的學習積極性與主動性,促進了學生對信源編譯碼的基本方法和主要特點的理解和掌握。通過上述教學改革,本課程的教學內容更加合理,教學方法更加科學,教學效果更加優良。
參考文獻:
[1] 王玲玲,尹愛兵.應用型本科高校通信原理課程教學方法改革 [J].現代信息科技,2023,7(20):173-176.
[2] 謝玉鵬.智慧三色“學導思辯研”的通信原理教學探索 [J].計算機教育,2023(10):174-178+184.
[3] 宋俊慷,楊秀增,樊東紅,等.一流本科專業建設背景下工程教育混合式教學改革探索——以現代通信原理課程為例 [J].大學教育,2023(12):82-84.
[4] 楊小鳳.MATLAB在數字濾波器教學中的應用 [J].教育教學論壇,2018(18):207-209.
[5] 張謝馥,李健,于國龍.基于MATLAB的通信原理課程教學研究與實踐 [J].創新創業理論研究與實踐,2023,6(15):168-170.
[6] 樊昌信,曹麗娜. 通信原理:第7版 [M].北京:國防工業出版社,2021.
[7] 曹麗娜,樊昌信. 通信原理:第7版 學習輔導與考研指導 [M].北京:國防工業出版社,2021.
[8] 郭文彬,楊鴻文,桑林,等.通信原理 基于Matlab的計算機仿真:第2版 [M].北京:北京郵電大學出版社,2021.
[9] 許書凱.藍牙音頻信號處理算法研究 [D].西安:西安電子科技大學,2020.
[10] 王欣,陶杰,康朝紅.基于MATLAB/Simulink的DM和ADM編解碼系統實驗仿真 [J].通信技術,2020,53(10):2588-2595.
作者簡介:楊小鳳(1984—),女,漢族,廣西玉林人,副教授,碩士,主要研究方向:智能算法設計及應用。