詳解matlab均衡演算法equalize

2021-09-09 09:01:25 字數 3728 閱讀 4240

在matlab中,有乙個常用的均衡器物件來均衡基帶訊號,它就是equalize()。

先來上乙個例子看看具體的功效唄;

原始碼1:

clc

close all

clear

% set up parameters.

m = 16; % alphabet size for modulation

sigconst = step(comm.rectangularqammodulator(m),(0:m-1)');

% signal constellation for 16-qam

chan = [1 0.45 0.3+0.2i]; % channel coefficients

hmod = comm.rectangularqammodulator(m); % qammodulator system object

% set up equalizers.

eqrls = lineareq(6, rls(0.99,0.1)); % create an rls equalizer object.

eqrls.sigconst = sigconst'; % set signal constellation.

eqrls.resetbeforefiltering = 0; % maintain continuity between iterations.

eqlms = lineareq(6, lms(0.003)); % create an lms equalizer object.

eqlms.sigconst = sigconst'; % set signal constellation.

eqlms.resetbeforefiltering = 0; % maintain continuity between iterations.

eq_current = eqrls; % point to rls for first iteration.

% main loop

for jj = 1:4

msg = randi([0 m-1],500,1); % random message

modmsg = step(hmod,msg); % modulate using 16-qam.

% set up training sequence for first iteration.

if jj == 1

ltr = 200; trainsig = modmsg(1:ltr);

else

% use decision-directed mode after first iteration.

ltr = 0; trainsig = ;

end% introduce channel distortion.

filtmsg = filter(chan,1,modmsg);

% equalize the received signal.

s = equalize(eq_current,filtmsg,trainsig);

% plot signals.

h = scatterplot(filtmsg(ltr+1:end),1,0,'bx'); hold on;

scatterplot(s(ltr+1:end),1,0,'g.',h);

scatterplot(sigconst,1,0,'k*',h);

legend('received signal','equalized signal','signal constellation');

title(['iteration #' num2str(jj) ' (' eq_current.algtype ')']);

hold off;

% switch from rls to lms after second iteration.

if jj == 2

eqlms.weightinputs = eq_current.weightinputs; % copy final inputs.

eqlms.weights = eq_current.weights; % copy final weights.

eq_current = eqlms; % make eq_current point to eqlms.

endend

結果如下圖,這是對乙個干擾較為嚴重的基帶訊號,經lms均衡後,有極佳的效果。

來吧,刨析一波這個equalize()方法。

以下是matlab2018a中help的解釋:

首先,它的使用語法有:

y = equalize(eqobj,x)

y = equalize(eqobj,x,trainsig)

[y,yd] = equalize(...)

[y,yd,e] = equalize(...)

equalize方法用均衡器物件eqobj處理基帶訊號向量x,並返回均衡的訊號向量y 。

在程序結束時,eqobj包含更新的狀態資訊,如均衡器權重值和輸入緩衝值。若要構造eqobj,請使用lineareq或dfe函式,如自適應演算法中所述。

比如可以這樣寫:

eq_signal = equalize(lineareq(8, rls(0.99, 1e-2)),baseband_signal, training_signal);
其中上述training_signal是傳送端為被干擾的訊號,baseband_signal是接收端已被通道干擾,需要被均衡的訊號。

均衡器函式假定訊號x是按每個符號的nsamp取樣進行取樣的,其中nsamp是eqobj的nsamppersym屬性的值。對於cma以外的自適應演算法,均衡器使用由eqobj的sigconst屬性指定的檢測器在判決定向模式下進行自適應。均衡器的延遲為(eqobj.reftap-1)/eqobj.nsamppersym,如「來自均衡的延遲」中所述。

請注意,(eqobj.reftap-1)必須是nsamppersym的整數倍。對於分數間隔均衡器,抽頭在符號週期的分數處間隔。參考抽頭屬於訓練符號,因此必須與所有符號(即每個符號取樣的整數)重合。reftap=1對應於第乙個符號,eqobj.reftap=nsamppersym+1對應於第二個符號,依此類推。因此(eqobj.reftap-1)必須是nsamppersym的整數倍。

如果eqobj.resetbeforefilting為0,則equize在啟動均衡操作時使用eqobj中的現有狀態資訊。因此,equize(eqobj,[x1 x2])等價於[equize(eqobj,x1)equize(eqobj,x2)]。若要手動重置eqobj,請將重置功能應用於eqobj。

如果eqobj.resetbeforefilting為1,則在開始均衡操作之前,均衡重置eqobj,覆蓋eqobj中以前的任何狀態資訊。

y=equalize(eqobj,x,traing)最初使用訓練序列來調整均衡器。在對訓練序列進行處理後,均衡器在判決引導模式下自適應。traing的向量長度必須小於或等於長度(x)-(eqobj.reftap-1)/eqobj.nsamppersym。

[y,yd]=equalize(...)返回檢測到的資料符號的向量yd。

[y,yd,e]=equalize(...)返回錯誤計算中描述的錯誤計算的結果。對於cma以外的自適應演算法,e是y和參考訊號之間的誤差向量,其中參考訊號由訓練序列或檢測到的符號組成。

Nginx負載均衡配置及演算法詳解

筆記 專欄收錄該內容 36 篇文章1 訂閱 訂閱專欄 如果你的nginx伺服器給2臺web伺服器做 負載均衡演算法採用輪詢,那麼當你的一台機器web程式關閉造成web不能訪問,那麼nginx伺服器分發請求還是會給這台不能訪問的web伺服器,如果這裡的響應連線時間過長,就會導致客戶端的頁面一直在等待響...

負載均衡詳解(2)

本文是負載均衡詳解的第一篇文章,介紹負載均衡演算法,硬體負載均衡。部分內容摘自讀書筆記。常用的負載均衡演算法有,輪詢,隨機,最少鏈結,源位址雜湊,加權等方式 將所有請求,依次分發到每台伺服器上,適合伺服器硬體同相同的場景。優點 伺服器請求數目相同 缺點 伺服器壓力不一樣,不適合伺服器配置不同的情況 ...

Nginx負載均衡詳解

下面將介紹nginx開源版內建的4種負載均衡策略和2種三方負載均衡策略,他們分別是 本文只是展示了部分nginx實現負載均衡時可以使用的策略模組,另外在nginx商業版中還存在其他內建的策略模組。負載均衡的三方策略可以在三方模組列表這裡找到。輪詢 nginx將所有請求均勻的分給集群中的每台伺服器。u...