Matlab 倍频程:如何使用倍频程将正弦曲线拟合到数据中?

Matlab 倍频程:如何使用倍频程将正弦曲线拟合到数据中?,matlab,octave,data-fitting,trigonometry,Matlab,Octave,Data Fitting,Trigonometry,我的目标是使用倍频程将正弦曲线拟合到数据记录器的数据中。 数据记录器记录使用excenter产生的力,因此理论上应为正弦波 我找不到任何关于如何在其他地方这样做的暗示 目前,我正在使用函数“splinefit”后跟“ppval”来拟合我的数据,但我并没有从中得到我所希望的结果。。。 有人知道如何将正弦曲线拟合到数据中吗 以下是我当前用于拟合数据的代码和结果的摘要: ## splinefit force left spfFL = splinefit(XAxis,forceL,50); fi

我的目标是使用倍频程将正弦曲线拟合到数据记录器的数据中。 数据记录器记录使用excenter产生的力,因此理论上应为正弦波

我找不到任何关于如何在其他地方这样做的暗示

目前,我正在使用函数“splinefit”后跟“ppval”来拟合我的数据,但我并没有从中得到我所希望的结果。。。 有人知道如何将正弦曲线拟合到数据中吗

以下是我当前用于拟合数据的代码和结果的摘要:

## splinefit force left
spfFL = splinefit(XAxis,forceL,50);    
fitForceL=ppval(spfFL,XAxis);

##middle force left
meanForceL=mean(fitForceL);
middleedForceL=fitForceL-meanForceL;
结果样条拟合

在X轴上,我有30000个测量点或日志

在Y轴上,我有实际测得的力值

数据来自.csv文件中的数据记录器,如下所示


您可以使用
fminsearch

% sine to fit (in your case your data)
x = 0:0.01:50;
y = 2.6*sin(1.2*x+3.1) + 7.3 + 0.2*rand(size(x)); % create some noisy sine with known parameters

% function with parameters
fun = @(x,p) p(1)*sin(p(2)*x+p(3)) + p(4);  % sine wave with 4 parameters to estimate
fcn = @(p) sum((fun(x,p)-y).^2);            % cost function to minimize the sum of the squares

% initial guess for parameters
p0 = [0 0 0 0];

% parameter optimization
par = fminsearch(fcn, p0);

% see if estimated parameters match measured data
yest = fun(x, par)
plot(x,y,x,yest)

用数据替换
x
y
par
变量包含正弦参数,如
fun

中所定义。您可以使用(时间)输入的正弦和余弦作为回归特征进行简单回归

这里有一个例子

%让我们从已知的正弦曲线生成一个数据集作为示例
N=1000;
范围=100;
w=0.25;%已知频率(例如,来自规范或傅立叶分析)
输入=随机数(范围[N,1]);
目标=0.5*sin(w*输入+pi/3)+0.05*randn(大小(输入));

%Y=A+B sin(wx)+C cos(wx);嗨,谢谢你的即时回复!我试着去实现它,但是鼻窦的灵敏性太小了,频率太高了。如何解决这个问题?您可以将初始猜测值
p0
更改为更接近预期频率和振幅的值。在这种情况下,由于您已经有了平均值和峰-峰振幅,您可以从参数估计中忽略它们,或者相应地设置初始猜测值。PS。请注意,您始终可以使用标准三角恒等式从Bsin(x)+Ccos(x)系数返回到单个正弦()谢谢您的回答!这可能是一个愚蠢的问题,但我对这个话题很陌生。。。我在您的解决方案中的输入X和Y具体放在哪里?@S.Hug将
输入
替换为您的输入(即
X
,时间点),并将
目标
替换为您试图使模型适合的目标(即
Y
,您的信号)。和
N
以及观察次数。这假设脉动为
1
,如
wt=t
。有没有办法通过你的方法来确定脉搏/周期?@Hoki谢谢你指出这一点,我本想提一下,但忘了!从问题的性质来看,频率似乎是已知的;但如果不是这样,我个人只会首先从原始信号的傅里叶分析中获得它,然后直接插入,而不是对它进行单独的优化。听起来像是xy问题。你真正想做什么?您是否只想获得采样值的频率(可能还有振幅和相位)?请参阅FFT,了解此测量,可能还有过零的周期测量。请逐字添加数据,永远不要将代码或数据添加为屏幕截图。