C 正弦曲线的线性/非线性拟合
我已经看了一眼了 但我有一个稍微不同的问题。我知道我的数据是一条正弦曲线,周期未知,振幅未知,带有加性非高斯分布噪声 我试图用C语言中的非线性算法来拟合它,但是拟合效果非常糟糕。我想知道我是否(错误地)使用了非线性拟合算法,而我应该使用线性拟合算法 如何判断特定数据集需要线性算法还是非线性算法 编辑:我的曲线非常嘈杂,因此使用FFT计算频率可能会导致误报和不匹配。我正在寻找一种更为稳健的拟合方式 如你所见,上面的图大约有170个点,下面的图大约有790个点 噪声明显是非高斯的,与数据的振幅相比较大。我在高斯分布噪声上尝试过FFT,我的拟合非常好。在这里,它的失败相当严重C 正弦曲线的线性/非线性拟合,c,algorithm,curve-fitting,C,Algorithm,Curve Fitting,我已经看了一眼了 但我有一个稍微不同的问题。我知道我的数据是一条正弦曲线,周期未知,振幅未知,带有加性非高斯分布噪声 我试图用C语言中的非线性算法来拟合它,但是拟合效果非常糟糕。我想知道我是否(错误地)使用了非线性拟合算法,而我应该使用线性拟合算法 如何判断特定数据集需要线性算法还是非线性算法 编辑:我的曲线非常嘈杂,因此使用FFT计算频率可能会导致误报和不匹配。我正在寻找一种更为稳健的拟合方式 如你所见,上面的图大约有170个点,下面的图大约有790个点 噪声明显是非高斯的,与数据的振幅相
添加:链接到时间序列数据。文件中的每列都是不同的时间序列 如果在sin上进行回归,可以使用FFT进行傅里叶变换 编辑 试着用过滤器去除噪音。若你们有像传感器这样的物理源,那个么在传感器上安装低通滤波器。FFT是相对较差的滤波器 EDIT2-此测量值完全错误 这可能是,你做了错误的测量。根据您的采样频率过低,或输入频率过高。这将导致错误的解决方案,因为如果您使用5kHz采样进行3kHz采样,您将根据该定理测量2kHz
我确信你不能通过这种测量来判断正确的输入频率。Kitchi:你能提供一些样本数据吗?您必须使用的典型信号有多长时间?(根据采样数和正弦波周期数)以dB为单位的信噪比是多少
1.9727 % amp. for column 11
0.1323 % freq. for column 11
2.3231 % amp. for column 13
0.1641 % freq. for column 13
博士学位验证:
我还做了另一个测试,在那里我知道振幅和频率的值,然后添加噪声,看看PHD是否能从噪声信号中正确估计值。该信号由两条附加正弦曲线组成,频率分别为50 Hz和120 Hz,振幅分别为0.7和1.0。在下图中,红色的曲线是原始曲线,蓝色的曲线带有附加噪声。(图已裁剪)
PHD估计安培/频率值为:
0.7493 % amp wave 1 (actual 0.7)
0.9257 % amp wave 2 (actual 1.0)
58.5 % freq wave 1 (actual 50)
123.8 % freq wave 2 (actual 120)
对于相当多的噪声来说,这并不坏,而且只知道信号包含的波的数量
回复@Alex:
是的,它是一个n
Fs = 1000; % Sampling frequency
T = 1/Fs; % Sample time
L = 1000; % Length of signal
t = (0:L-1)*T; % Time vector
% Sum of a 50 Hz sinusoid and a 120 Hz sinusoid
x = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t);
y = x + 0.4*randn(size(t)); % Sinusoids plus noise
figure;
plot(Fs*t(1:100),y(1:100)); hold on; plot(Fs*t(1:100),x(1:100),'r')
title('Signal Corrupted with Zero-Mean Random Noise (Blue), Original (Red)')
[A, f] = pisar(y',2);
disp(A)
disp(f/Fs)
0.7493 % amp wave 1 (actual 0.7)
0.9257 % amp wave 2 (actual 1.0)
58.5 % freq wave 1 (actual 50)
123.8 % freq wave 2 (actual 120)