在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...