gpt4 book ai didi

matlab - 在噪声信号中找到模型函数的稳健拟合

转载 作者:行者123 更新时间:2023-12-03 15:48:01 24 4
gpt4 key购买 nike

我有一个嘈杂的信号和一个模型函数,例如:

x=linspace(0,20);
w=[2 6 -4 5];
y=w(1)*besselj(0,x)+w(2)*besselj(1,x)+w(3)*besselj(2,x)+w(4)*besselj(3,x);
y(randi(length(y),[1 10]))=10*rand(1,10)-5;
plot(x,y,'x')
enter image description here
我想用 RANSAC 找到 w在我的模型中,因为这种方法在查找线时对噪声具有鲁棒性。然而,这不是一个线性问题,我无法得到合适的拟合,可能是因为我试图拟合的函数的振荡性质。
我看到 matlab 有一个 fitPolynomialRansac 函数,但即使对于 a+b*x+c*x^2+d*x^3 也失败了简单的情况(介于 -1 和 1 之间)。
任何想法如何驯服RANSAC?或不同的鲁棒噪声方法?

最佳答案

这只是实现@mikuszefski 的评论以使用软 L1 损失函数。它似乎确实更能抵抗噪音:

x = linspace(0,20);

% model function
yFun=@(w) w(1)*besselj(0,x)+w(2)*besselj(1,x)+w(3)*besselj(2,x)+w(4)*besselj(3,x);

% generate training data
N = 20; % number of noisy elements
w=[2 6 -4 5]; % true paramater values
y = yFun(w); % evaluate true model function
y(randi(length(y),[1 N])) = 10*rand(1,N)-5; % add noise

% standard loss function for least sqaure
d = @(w) yFun(w)-y;

v1 = lsqnonlin(d,[1 1 1 1]); % normal least squares
v2 = lsqnonlin(@(w) sqrt(2*(sqrt(1+d(w).^2)-1)),[1 1 1 1]) % soft L1 loss

关于matlab - 在噪声信号中找到模型函数的稳健拟合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64326777/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com