matlab_HDB3編碼譯碼數字信號調制解調_第1頁
matlab_HDB3編碼譯碼數字信號調制解調_第2頁
matlab_HDB3編碼譯碼數字信號調制解調_第3頁
matlab_HDB3編碼譯碼數字信號調制解調_第4頁
matlab_HDB3編碼譯碼數字信號調制解調_第5頁
已閱讀5頁,還剩8頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、一、 HDB3碼的編碼和譯碼1、實驗要求:掌握HDB3碼的編碼規則,利用MATLAB設計并實現HDB3碼的編碼和譯碼。2、原理簡述:編碼規則 :1) 先將消息代碼變換成AMI 碼,若 AMI 碼中連 0 的個數小于4,此時的 AMI 碼就是HDB3 碼;2) 若 AMI 碼中連 0 的個數大于3, 則將每 4 個連 0 小段的第4 個 0 變換成與前一個非0 符號 (+1 或 -1) 同極性的符號,用表示 (+1+,-1-);3) 為了不破壞極性交替反轉,當相鄰符號之間有偶數個非0 符號時,再將該小段的第 1 個 0 變換成 B 或 -B, 符號的極性與前一非零符號的相反,并讓后面的非零符號從

2、符號開始再交替變化。例如 :消息代碼 :1000010000 11000011AMI 碼:+10000-10000 +1-10000+1-1HDB3 碼:+1000+V-1 000-V +1-1+B00+V-1+1 簡易編碼方法:原理: HDB3 碼既要包含AMI 的交替特性使輸出無直流特性,又要不出現四個以上的連 0 ,因此可以先滿足后者。1)把 "0000" 換為取代節。規則:先將 "0000" 分離開來,第一個"0000" 直接變為 "000V" ,然后數相鄰兩個"0000"之間 &quo

3、t;1" 的個數,奇數則變為"000V" ,偶數則變為" B00V"。2)更新符號。根據教材有: B 總是與其前面的1 或 V 符號相反, V 總是與前面的1 或 B 相符號相同,1 總是與前面的V 或 B 符號相反,就可以編符號了。例如 :消息代碼: 1000010000 110000110000 00001110000 1中間碼:1000V1000V 11B00V11B00VB00V111000V 1HDB3 碼:+1000+V-1000-V +1-1+B00+V-1+1-B00-V +B00+V-1+1-1000-V +1解碼規則:1 )

4、雖然編碼很復雜,但解碼規則很簡單,若3 連 “ 0前”后非零脈沖同極性,則將最后一個非零元素譯為零,如+1000+1就應該譯成 “10000”;若 2 連 “0前”后非零脈沖極性相同,則兩零前后都譯為零,如-100-1 ,就應該譯為0000.2 )再將所有的-1 變換成 +1 后,就可以得到原消息代碼。3、程序運行結果運行程序可自定義二進制序列,第一個窗口顯示所輸入的二進制碼元,第二個窗口為 HDB3 編碼后的結果,最后一個窗口為解碼后的窗口。4、程序源代碼% ch7example6prog1.m% AMI碼的編碼xn=1 0 1 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0

5、 1 0;%輸入單極性碼yn=xn;%輸出 yn 初始化num=0;%計數器初始化for k=1:length(xn)if xn(k)=1num=num+1;% "1" 計數器if num/2 = fix(num/2) %奇數個 1 時輸出 -1,進行極性交替yn(k)=1;elseyn(k)=-1;endendend% HDB3 編碼num=0;% 連零計數器初始化yh=yn;% 輸出初始化sign=0; %極性標志初始化為0V=zeros(1,length(yn);% V脈沖位置記錄變量B=zeros(1,length(yn);% B脈沖位置記錄變量for k=1:le

6、ngth(yn)if yn(k)=0num=num+1;% 連“ 0”個數計數if num=4% 如果 4 連“ 0”num=0;% 計數器清零yh(k)=1*yh(k-4);% 讓 0000 的最后一個 0 改變為與前一個非零符號相同極性的符號V(k)=yh(k);% V 脈沖位置記錄if yh(k)=sign% 如果當前V 符號與前一個V 符號的極性相同yh(k)=-1*yh(k); %則讓當前V 符號極性反轉 , 以滿足 V 符號間相互極性反轉要求yh(k-3)=yh(k);% 添加 B 符號 ,與 V 符號同極性B(k-3)=yh(k);% B 脈沖位置記錄V(k)=yh(k);% V

7、 脈沖位置記錄yh(k+1:length(yn)=-1*yh(k+1:length(yn);% 并讓后面的非零符號從V 符號開始再交替變化endsign=yh(k);%記錄前一個V 符號的極性endelsenum=0;% 當前輸入為“1”則連“0”計數器清零endend% 編碼完成re=xn',yn',yh',V',B'% 結果輸出 : xn AMI HDB3 V&B符號% HDB3 解碼input=yh;% HDB3 碼輸入decode=input;% 輸出初始化sign=0;% 極性標志初始化for k=1:length(yh)if inpu

8、t(k) = 0if sign=yh(k)% 如果當前碼與前一個非零碼的極性相同decode(k-3:k)=0 0 0 0;%則該碼判為V 碼并將 *00V 清零endsign=input(k);% 極性標志endenddecode=abs(decode);% 整流error=sum(xn'-decode');% 解碼的正確性檢驗,作圖subplot(3,1,1);stairs(0:length(xn)-1,xn);axis(0 length(xn) -2 2);subplot(3,1,2);stairs(0:length(xn)-1,yh);axis(0 length(xn)

9、 -2 2);subplot(3,1,3);stairs(0:length(xn)-1,decode);axis(0 length(xn) -2 2);二、數字帶通系統的調制解調1、實驗要求:利用 MATLAB程序設計語言實現數字帶通系統的調制解調。2、原理簡述:數字調制: 用數字基帶信號控制載波, 把數字基帶信號變換為數字帶通信號 (已調信號)的過程成為數字調制。數字調制與模擬調制的基本原理相同,但數字信號有離散取值的特點。因此數字調制技術有兩種方法: 利用模擬調制的方法實現數字調制,即把數字調制看成是模擬調制的特例把數字基帶信號當成是模擬信號的特殊情況處理;利用數字信號的離散取值特點通過開

10、關鍵控制載波,從而實現數字調制。這種方法稱為鍵控法,比如對載波的振幅,頻率和相位進行鍵控,便可得到振幅鍵控ASK,頻移鍵控FSK和相移鍵控PSK三種基本的數字調制方式。振幅鍵控ASK振幅鍵控利用載波的幅度變化來傳遞數字信息,而其頻率和初始相位保持不變。在 2ASK中,載波的幅度只有兩種變化狀態,分別為對應二進制信息“0”或“ 1”。常用的二進制振幅鍵控方式稱為通斷鍵控,2ASK信號的一般表達式為其中2ASK有兩種基本的解調方法:非相干解調和相干解調,解調方式如下:非相干解調方式:帶通濾波器全波整流器低通濾波器抽樣判決器輸出想干解調方式:帶通濾波器相乘器低通濾波器抽樣判決器輸出頻移鍵控FSK頻移

11、鍵控是利用載波的頻率變化來傳遞數字信息。在2FSK中,載波的頻率隨二進制基帶信號在f1 和 f2 兩個頻率點檢變化。 一個 2FSK信號可以看成是兩個不同載頻的2ASK信號的疊加。 其產生方式有兩種:采用模擬調頻來實現也可采用鍵控法實現,即在二進制基帶矩形序列的控制下通過開關電路對兩個不同的獨立頻率源進行選通。但相鄰碼元之間的相位不一定連續。2FSK 信號的常用解調方法也采用相干解調和非相干解調兩種方式。其解調原理是將2FSK信號分解為上下兩路2ASK信號分別進行解調,然后進行判決。相移鍵控PSK二進制相移鍵控2PSK相移鍵控是利用載波的相位變化來傳遞數字信息,而振幅和頻率保持不變。在 2PS

12、K中,通常用初始相位 0 和分別表示二進制“ 1”和“ 0”。與 2ASK信號的產生方式相比,只是對 s(t) 的要求不同,在 2ASK中是單極性的,而在 2PSK中是雙極性的基帶信號。2PSK信號的解調通常采用相干解調法。二進制差分相移鍵控2DPSK2PSK相干解調時, 由于載波恢復中相位有 0、模糊性, 導致解調過程出現 “反向工作”現象,恢復出的數字信號“ 1”“ 0”倒置,使得 2PSK難以實際應用。而 2DPSK是利用前后相鄰碼元的載波相對相位變化傳遞數字信息, 對于相同的基帶數字信息序列, 由于初始相位不同, 2DPSK的相位可以不同。也就是說, 2DPSK信號的相位并不直接代表基

13、帶信號,而前后碼元相對相位的差才唯一決定信號符號。2DPSK信號的解調方法為相干解調(極性比較法)加碼反變換法。其原理為:帶通濾波器相乘器低通濾波器抽樣判決器碼反變換輸出3、程序運行結果2ASK調制后的信號以及2ASK解調后的信號2PSK基帶信號, 2PSK調制后的信號以及2PSK解調后的信號2FSK調制后的信號以及使用2FSK解調后的信號隨機產生得二進制原始信號以及2DPSK調制之后得信號使用 2DPSK解調之后的信號4、程序源代碼2ASKclear all;clear;N=10;% 調制序列的長度fc=20;% 載波頻率datat=0.01;% 時域采樣間隔data=1/datat;df=

14、0.01;% 頻率分辨率t=0:datat:N;% 設每個碼元長度為1ms時間矢量:0:Nm=randint(1,N);% 產生調制序列fs=1/datat;c=cos(2*pi*fc*t);for i=1:length(m)if(m(i)=1)for j=1:1/datat;ask_pre(j+(i-1)*(1/datat)=1;endelseif(m(i=0)ask_pre(j+(i-1)*(1/datat)=0;endendask_pre=ask_pre,m(i);ask=ask_pre.*c;ask_F,ask,df1=fftseq(ask,datat,df);C,c,df1=ffts

15、eq(c,datat,df);M,ask_pre,df1=fftseq(ask_pre,datat,df);f=0:df1:df1*(length(c)-1)-fs/2;subplot(2,1,1);plot(t,ask_pre(1:length(t);axis(0,N,-1.5,1.5);xlabel('時間ms');title('未調信號');ylabel('幅值 :v');subplot(2,1,2);plot(t,ask(1:length(t);axis(0,N,-1.5,1.5);xlabel('時 間ms');titl

16、e('2ASK信 號 ');ylabel('幅值 :v');%-%-解調-%-ask_n=(ask_pre+rand(1,length(ask_pre).*c;% (高斯白噪聲)ask_NF,ask_n,df1=fftseq(ask_n,datat,df);f_strain=8;n_off=floor(f_strain/df1);f=0:df1:df1*(length(ask)-1)-fs/2;n0=floor(fc-8)/df1):floor(fc+8)/df1);BP=zeros(1,length(f);BP(min(n0):max(n0)=ones(1,l

17、ength(n0); %帶通濾波器設計BP(length(BP)-max(n0):length(BP)-min(n0)=ones(1,length(n0);H=zeros(1,length(f);H(1:n_off)=2*ones(1,n_off);% 矩形窗截取H(length(f)-n_off+1:length(f)=2*ones(1,n_off);%H(1:n_off)=2*hamming(n_off);%hamning窗截取%H(length(f)-n_off+1:length(f)=2*hamming(n_off);BP1=BP.*ask_F;BPN=BP.*ask_NF;ask_r

18、e1=ifft(BP1);ask_ren1=ifft(BPN);ask_re=2*ask_re1.*c;% 相干解調法ask_ren=2*ask_ren1.*c; %相干解調(高斯白噪聲)ask_reF,ask_re,df1=fftseq(ask_re,datat,df);ask_reNF,ask_ren,df1=fftseq(ask_ren,datat,df);D1=H.*ask_reF;DN=H.*ask_reNF;d1=ifft(D1);dn=ifft(DN);fori=1:length(m)% 判決if(d1(i-1)*(1/datat)+(1/(2*datat)>=0.5)決規

19、則 :d1>0.5=> 1%判m_de(i)=1;d1<0.5=> 0% 否則for j=1:1/datatd11(j+(i-1)*(1/datat)=1;% 為了畫解調波形需要elseendm_de(i)=0;for j=1:1/datatd11(j+(i-1)*(1/datat)=0;% 為了畫解調波形需要endendendfori=1:length(m)%判決if(dn(i-1)*(1/datat)+(1/(2*datat)>=0.5)決規則 :d1>0.5=> 1%判m_den(i)=1;d1<0.5=> 0%否則for j=1:1

20、/datatdnn(j+(i-1)*(1/datat)=1;% 為了畫解調波形需要elseendm_den(i)=0;for j=1:1/datatdnn(j+(i-1)*(1/datat)=0;% 為了畫解調波形需要endendendfigure(2);subplot(4,1,1);plot(t,ask(1:length(t);axis(0,N,-1.5,1.5);xlabel('時間 ');title(' 解調器接收波形');subplot(4,1,2);plot(t,ask_re1(1:length(t);axis(0,N,-1.5,1.5);xlabel

21、('時間 ');title(' 經過帶通濾波器波形');subplot(4,1,3);plot(t,d1(1:length(t);axis(0,N,-0.5,2.5);xlabel('時間 ');title(' 經過低通濾波器波形');subplot(4,1,4);plot(t(1:length(d11),d11);axis(0,N,-1.5,1.5);xlabel('時間 ');title(' 經過判決器波形');2FSKclear;N=20;% 調制序列的長度fc=5;% 載波基頻datat=0

22、.01;% 時域采樣間隔fs=1/datat;% 頻率分辨率df=0.01% 頻率縮放系數t=0:datat:N;% 設每個碼元長度為m=randint(1,N);% 產生調制序列for i=1:length(m)if(m(i)=1)for j=1:1/datat;fsk_f(j+(i-1)*(1/datat)=4;mm(j+(i-1)*(1/datat)=1;1ms時間矢量: 0:N%1 碼的載波基波倍頻系數% 為了畫碼元時域波形需要20hzendelseif(m(i)=0)for j=1:1/datat;fsk_f(j+(i-1)*(1/datat)=1;%0碼的載波基波倍頻系數5hzmm

23、(j+(i-1)*(1/datat)=0;% 為了畫碼元時域波形需要endendendif(m(i)=1)nn=4;elsenn=1;endfsk_f=fsk_f,nn;% 使 fsk_f 的長度與t 相同fsk_c=fsk_f*fc;% 根據不同的倍頻系數產生不同的載波頻率c=cos(2*pi*fsk_c.*t);%2fsk 信號產生C,c,df1=fftseq(c,datat,df);%2fsk 信號的傅立葉變換MM,mm,df1=fftseq(mm,datat,df);% 基帶信號的傅立葉變換f=0:df1:df1*(length(mm)-1)-fs/2;% 頻率作圖矢量figure(1

24、);subplot(2,1,1);plot(t,mm(1:length(t);axis(0,N,-1.5,1.5);xlabel('時間ms');title(' 未調信號 ');ylabel('v');subplot(2,1,2);plot(t,c(1:length(t);axis(0,N,-1.5,1.5);xlabel('時間ms');title('2FSK信號 ');ylabel('v');%-%-解調-%-B0=fc-2,fc+2;%0 碼頻帶寬B1=fc*4-2,fc*4+2;%1 碼頻帶

25、寬n0=floor(fc-2)/df1):floor(fc+2)/df1);n1=floor(4*fc-2)/df1):floor(4*fc+2)/df1);H0=zeros(1,length(C);H0(min(n0):max(n0)=ones(1,length(n0); %濾波器設計 (0 碼帶通濾波器 )H0(length(H0)-max(n0):length(H0)-min(n0)=ones(1,length(n0);H1=zeros(1,length(C);H1(min(n1):max(n1)=ones(1,length(n1); %濾波器設計 (1 碼帶通濾波器 )幅值:幅值:H1

26、(length(H1)-max(n1):length(H1)-min(n1)=ones(1,length(n1);n_off0=fc/df1;n_off1=4*fc/df1;L0=zeros(1,length(C);%(0 碼低通濾波器 )L0(1:n_off0)=2*ones(1,n_off0);L0(length(L0)-n_off0+1:length(L0)=2*ones(1,n_off0);L1=zeros(1,length(C);% %(1 碼低通濾波器L1(1:n_off1)=2*ones(1,n_off1);L1(length(L1)-n_off1+1:length(L1)=2*

27、ones(1,n_off1);C0=C.*H0;C1=C.*H1;m0=ifft(C0);m1=ifft(C1);mm0=abs(m0);% 包絡檢波mm1=abs(m1);MM0,mm0,df1=fftseq(mm0,datat,df);MM1,mm1,df1=fftseq(mm1,datat,df);MM0=MM0.*L0;MM1=MM1.*L1;mm0=ifft(MM0);mm1=ifft(MM1);)fori=1length(m)%比較器:判決if(abs(m0(i-1)*(1/datat)+(1/(2*datat)>=abs(m1(i-1)*(1/datat)+(1/(data

28、t*2)則:mo>m1 => 0% 判決規m_de(i)=0;=> 1%否則for j=1:1/datatm_anti(j+(i-1)*(1/datat)=0;% 為了畫解調波形需要elseendm_de(i)=1;for j=1:1/datatm_anti(j+(i-1)*(1/datat)=1;% 為了畫解調波形需要endendendm_anti=m_anti,m_de(i);figure(2)subplot(5,1,1);plot(t,m0(1:length(t);xlabel(' subplot(5,1,2);plot(t,m1(1:length(t); xl

29、abel(' subplot(5,1,3);plot(t,mm0(1:length(t);xlabel(' subplot(5,1,4);plot(t,mm1(1:length(t); xlabel('時間 ');title(' 經過帶通濾波器1 后波形 ');時間 ');title(' 經過帶通濾波器2 后波形 ');時間 ');axis(0,N,-0.1,2);title(' 經過低通濾波器時間 '); axis(0,N,-0.1,2); title('經過低通濾波器1 后波形 '

30、;);2 后波形 ');subplot(5,1,5);plot(t,m_anti(1:length(t); xlabel('時間 '); axis(0,N,-0.5,1.5); title('經過比較起判決后波形');2PSKclear;N=10;% 調制序列的長度fc=10;% 載波頻率datat=0.01;% 時域采樣間隔fs=1/datat;% 頻率分辨率df=0.01% 頻率縮放系數t=0:datat:N;% 設每個碼元長度為1ms時間矢量: 0:Nm=randint(1,N);% 產生調制序列%-%-調制-%-for i=1:length(m)

31、if(m(i)=1)for j=1:1/datat;psk_p(j+(i-1)*(1/datat)=pi;%1 碼的對應的相位為pi( 采用mm(j+(i-1)*(1/datat)=1;% 為了畫碼元時域波形需要a 方式 )endelseif(m(i)=0)for j=1:1/datat;psk_p(j+(i-1)*(1/datat)=0;mm(j+(i-1)*(1/datat)=0;%0碼的對應的相位為0( 采用 a 方式 )% 為了畫碼元時域波形需要endendendif(m(i)=1)nn=pi/2;elsenn=-(pi/2);endpsk_p=psk_p,nn;% 使 p 的長度與t

32、 相同 ,psk_p為根據不同碼元產生不同的調制相位c=cos(2*pi*fc*t+psk_p);%2psk 信號產生C,c,df1=fftseq(c,datat,df);%2fsk 信號的傅立葉變換MM,mm,df1=fftseq(mm,datat,df);% 基帶信號的傅立葉變換f=0:df1:df1*(length(mm)-1)-fs/2;% 頻率作圖矢量subplot(2,1,1);plot(t,mm(1:length(t);axis(0,N,-1.5,1.5);xlabel('時間ms');title(' 未調信號 ');ylabel('v&#

33、39;);subplot(2,1,2);plot(t,c(1:length(t);axis(0,N,-1.5,1.5);xlabel('時間ms');title('2PSK信號 ');ylabel('v');%-%-解調-%-carwav=2*cos(2*pi*fc.*t);幅值:幅值:CF,carwav,df1=fftseq(carwav,datat,df);n_off=(fc-1)/df;n0=floor(fc-2)/df1):floor(fc+2)/df1);BP=zeros(1,length(f);BP(min(n0):max(n0)=ones(1,length(n0); %帶通濾波器設計BP(length(BP)-max(n0):length(BP)-min(n0)=ones(1,length(n0);H=zeros(1,length(f);H(1:n_off)=2*ones(1,n_off);%低通濾波器設計(矩

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論