⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tls.m

📁 基于最小二乘法和奇异值-总体最小二乘法(SVD-TLS)的 ARMA模型谐波频率估计
💻 M
字号:
% -----------------------------------------------------------------
%------------------王程  2008-12-10--------------------------------
%------------------仿真作业一:总体最小二乘-------------------------
%-----------------------------------------------------------------
q = 1 ;
num = 1000 ;        %重复计算次数
lumda = 1 ;
T = 128 ;
M = 40 ;
p = 7 ;            %取未知参数个数为14个,即2p=14
n = 1 : T ;
delta = 0.008 ;    %求解有效秩使用的域值
A = zeros(40, 2*p) ;
b = zeros(40, 1) ;

while q <= num                       %重复1k次

x = sqrt(20) * sin(2*pi*0.2*n) + sqrt(2) * sin(2*pi*0.213*n) + randn(1, T);  %  generate signals
r = xcorr(x, 'biased');             %有偏的自相关函数
for m = 1 : M
    A(m, : ) = r(T+m+2*p-1 : -1 : T+m) ;
    b(m) = -r(T+2*p+m) ;
end
%------------以下使用SVD-TLS---------------
B = [-b, A] ;
[U, S, V] = svd(B) ;                %对B进行奇异值分解
R = 0 ;                             %有效秩
for j = 1 : 2*p+1
    sigma(j) = S(j, j) / S(1, 1) ;  %计算归一化奇异值
    if (sigma(j) > delta)
        R = R + 1 ;
    end
end
Sp = zeros(R+1, R+1) ;
y = zeros(1, R) ;
v = zeros(R+1, 1) ;
for j = 1 : R
    for i = 1 : 2*p+1-R
        v(1 : R+1,1) = V(i : i+R, j) ;
        Sp = Sp + S(i, i) * S(i, i) * v * v' ;
    end
end
if (rank(Sp) < R+1)
    continue ; 
else    
    Sp_inv = inv(Sp) ;
end
for i = 1 : R
    y(i) = Sp_inv(i+1, 1) / Sp_inv(1, 1) ;
end 
%------------------------------------------
a = zeros(1, R+1) ;
for i = 1 : R
    a(i) = y(R-i+1) ;
end
a(R+1) = 1 ;
z = roots(a) ; 
for i = 1 : R
    z(i) = 1 / z(i) ;               %求出极点

end

for i = 1 : floor(R/2)
    fi(i) =  atan( abs( imag(z(2*i-1)) / real(z(2*i-1)) ) ) / (2*pi) ;        %求解谐波频率
    if fi(i) ~= 0 
        f(lumda) = fi(i) ;
        lumda = lumda + 1 ;
    end
end

q = q + 1 ;
end

figure, hist(f, 100) ;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -