1. 程式人生 > 其它 >【數字基帶訊號】基於matlab數字雙相碼模擬【含Matlab原始碼 989期】

【數字基帶訊號】基於matlab數字雙相碼模擬【含Matlab原始碼 989期】

一、簡介

雙相碼,又名曼徹斯特碼,其編碼規則是:將資訊程式碼 0 編碼為線路碼“01”,將資訊程式碼1為線路碼“10”雙相碼常用於區域網傳輸,每一位的中間的跳變,既作時鐘訊號,又作資料訊號。

二、原始碼

close all
clear all
%取樣點數的設定
k=14;
%每碼元取樣數的設定
L=128;
N=2^k;
M=N/L;%M為碼元個數
dt=1/L;%時域取樣間隔
T=N*dt;%時域截斷區間
df=1.0/T;%頻域取樣間隔
Bs=N*df/2;%頻域截斷區間
t=linspace(-T/2,T/2,N);%產生時域取樣點
f=linspace(-Bs,Bs,N);%產生頻域取樣點
EP1=zeros(size(f));
EP2=zeros(size(f));
EP3=zeros(size(f));
for x=1:1000                   % 取樣1000次
  K=round(rand(1,M));          %產生一個長度為M的隨機序列K,0和1等概出現
  original=zeros(L,M);           %產生一個L行M列的original矩陣,初始化為全0矩陣
  Manchester =zeros(L,M);    %產生一個L行M列的Manchester矩陣,初始化為全0矩陣
  for i=1:M 
      if K(i)==1
          original (:,i)=1;%原碼
          Manchester (1:L/2,i)=1;  %使manchester矩陣第i列前L/2個元素為1
      else
          original (:,i)=0;%原碼
          Manchester (:,i)=1;    %使manchester矩陣第i列為1
          Manchester (1:L/2,i)=0; %使manchester矩陣第i列前L/2個元素為0
      end
  end
    %分別重排nrz、manchester矩陣為1行N列的矩陣
    original =reshape(original,1,N);
    Manchester =reshape(Manchester,1,N);
     %做傅立葉變換並算出功率譜密度
    ORIGINAL =t2f(original,dt);
    P1=ORIGINAL.*conj(ORIGINAL)/T;
    MANCHESTER=t2f(Manchester,dt);
    P2=MANCHESTER.*conj(MANCHESTER)/T;
    %求功率譜密度的均值
    EP1=(EP1*(x-1)+P1)/x;
    EP2=(EP2*(x-1)+P2)/x;
end
figure(1)                      %開啟一個編號為1的繪圖視窗
subplot(2,2,1);
plot(t,original);                 %畫原碼的時域圖
axis([-3,3,min(original)-0.1,max(original)+0.1]);
title('原碼','fontsize',12);
xlabel('t(ms)','fontsize',12);
ylabel('original(t)','fontsize',12);
grid on
subplot(2,2,2);
function X=t2f(x,dt)
    X=fftshift(fft(x))*dt;

三、執行結果

四、備註

版本:2014a
完整程式碼或代寫加1564658423