資源簡介
利用MATLAB對通信原理中迫零均衡進行了仿真,驗證了迫零均衡的效果,并畫出了眼圖,對均衡前后的信號進行了對比
代碼片段和文件信息
%實驗四?迫零均衡
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%本程序包括四部分,分別實現了迫零均衡,信號產生,繪制眼圖以及誤碼率的計算
%%執行時可以分步執行,但特別注意該部分中的兩個判決電平要根據前面眼圖得到,及時進行修改
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%第一部分迫零算法?求解抽頭系數
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
N=1;%抽頭個數確定?2N+1
%h=input(‘請輸入均衡器輸入的個抽樣點的值h(n)‘)
%h=[-0.001?0.0178?0.15??-0.32??1?0.318?0.19?0.097?-0.001];
h=[0.1?-0.25?1?-0.25?0.1];%信道1
%h=[-0.2?0.5?1?0.5?-0.2];%信道2
center=find(h==1);%尋找均衡器輸入的零時刻值得坐標位置,定位h(0)
M1=center-1;
L=length(h);
M2=length(h)-center;
if?M1>M2????%0左邊抽樣值大于右邊
????y=zeros(12*M1+1);
????y=[hzeros(1M1-M2)];%右邊補零構成奇數個,其關于
????????h=y;
elseif?M2>M1
????y=zeros(12*M2+1);
????y=[hzeros(1M2-M1)];
????????h=y;
end???????
L=length(h);%計算修正后的長度
M=max(M1M2);%修正后的輸入長度為2M+1
x=zeros(14*N+1);
if?2*N<=center-1%如果輸入在零負時刻抽樣點個數大于2*N
????x(1:2*N+1)=h(center-2*N:center);
else
????x(1:2*N+1)=[zeros(12*N-center+1)h(1:center)];
end
if?2*N<=L-center%如果輸入在零負時刻抽樣點個數大于2*N
????x(2*N+2:4*N+1)=h(center+1:center+2*N);
else
????x(2*N+2:4*N+1)=[h(center+1:L)zeros(12*N+center-L)];%如果輸入在零正時刻抽樣點個數大于2*N
end??
x
subplot(311)
stem(h)
title(‘均衡前輸入單脈沖響應波形h(n)‘)
subplot(312)
stem(x)
title(‘均衡前單脈沖響應波形(x(-2N)~x(2N)‘)
A=zeros(2*N+11);%迫零原理,y0=1.剩余2N個值為零
A(N+1)=1;
X=zeros(2*N+12*N+1);
for?i=1:2*N+1??????????????????%構造抽樣值矩陣
????X(i:)=fliplr(x(i:2*N+i));
end
display(‘所得抽頭系數為:‘)
C=inv(X)*A
%利用迫零算法求解抽頭系數
y=conv(xC‘);%均衡后的輸出值
subplot(313)
stem(y)
title(‘均衡后輸出單脈沖響應波形y(n)‘)
%%%%%%
%計算峰值失真。
display(‘均衡前輸入峰值失真‘)
d0=sum(abs(h))/max(abs(h))-1%輸入峰值失真\
display(‘均衡后輸出峰值失真‘)
d1=sum(abs(y))/max(abs(y))-1%輸出峰值失真
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%
評論
共有 條評論