?? phaspa2voltcoef.m
字號:
function [Un,len_filter] = PhaSpa2VoltCoef(xn,p)
% 構(gòu)造 Volterra 自適應(yīng) FIR 濾波器的輸入信號矢量 Un
% [Un, len_filter] = PhaSpa2VoltCoef(xn, p)
% 輸入?yún)?shù):
% xn 相空間中的點序列(每一列為一個點)
% p Volterra 級數(shù)階數(shù)
% 輸出參數(shù):
% Un Volterra 自適應(yīng) FIR 濾波器的輸入信號矢量 Un
[m,xn_cols] = size(xn); % m 為重構(gòu)維數(shù),xn_cols 為訓(xùn)練樣本個數(shù)
Un(1,:) = ones(1,xn_cols); % FIR 濾波器的抽頭輸入信號矢量 Un (第一個系數(shù)為 1)
h_cols_1 = 0;
for k = 1:p
clear h;
h(1,:) = zeros(1,k); % k 階 Volterra 核的下標(biāo) (第一個為 0,0,0... )
i = 1;
% 當(dāng)上一行最后一列數(shù)值達到 m-1 結(jié)束循環(huán)
while h(i,end)<m-1
i = i + 1;
% 從后往前考察上一行每一列
for j = k:-1:1
% 當(dāng)上一行第 j 列數(shù)值達到 m-1 時,這一行的第 1 至第 j+1 列的數(shù)值均為上一行第 j+1 列數(shù)值加 1,其余不變
if (h(i-1,j)==m-1)
h(i,1:j+1) = ones(1,j+1) * (h(i-1,j+1)+1);
h(i,j+2:end) = h(i-1,j+2:end);
break;
end
% 當(dāng)上一行數(shù)值都沒有達到 m-1 時,這一行第 1 列數(shù)值加 1,其余不變
h(i,1) = h(i-1,1)+1;
h(i,2:end) = h(i-1,2:end);
end
end
%disp('------------------')
h; % 構(gòu)造 k 階 Volterra 核的下標(biāo)
h_cols_1 = [h_cols_1;h(:,1)];
index = m - h;
[index_rows,index_cols] = size(index);
un = zeros(index_rows,xn_cols);
%for q = 1:xn_cols
% vector = xn(:,q);
% array = vector(index); % 從列向量中提取出x(n),x(n-tau),x(n-2*tau)...
% un(:,q) = prod(array,2); % 計算x(n),x(n-tau),x(n-2*tau)...之間的乘積
%end
%------------------------------------------------
% 上面是原始算法,下面是優(yōu)化算法
for j = 1:index_rows
xn_rows_index = index(j,:);
xn_rows = xn(xn_rows_index,:);
un(j,:) = prod(xn_rows,1);
end
Un = [Un;un]; % FIR 濾波器的抽頭輸入信號矢量 Un
clear un;
end
len_filter = size(Un,1);
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -