簡體   English   中英

如何在matlab中擬合曲線到阻尼正弦波

[英]How to fit a curve to a damped sine wave in matlab

我做了一些測量,它應該是一個阻尼正弦波,但我找不到任何關於如何用Matlab的曲線擬合工具制作(如果可能的話)良好的阻尼正弦波的信息。

這是我使用“平滑樣條曲線”得到的:

圖片http://s21.postimg.org/yznumla1h/damped.png

編輯1 :這是我使用“自定義方程式”選項得到的:

在此輸入圖像描述

編輯2 :我已經以csv格式將數據上傳到pastebin ,其中第一列是幅度,第二列是時間。

可以使用以下代碼創建阻尼sin函數:

f=f*2*pi;
t=0:.001:1;
y=A*sin(f*t + phi).*exp(-a*t);

plot(t,y);
axis([0 1 -2.2 2.2]);

現在您可以使用matlab中的“cftool”並加載數據,然后將方程式設置為自定義並輸入阻尼sin函數的公式。 在這里你可以看到我到目前為止所發現的......

在此輸入圖像描述

我認為數據的分布使得擬合工具很難做到合適。 它可能需要更多數據或更多分布式數據。 此外,還有其他工具和方法,例如現在檢查:docstoc.com/docs/74524947/Mathcad-Damped-sine-fit-mcd

對於實際嘗試搜索並找到局部最優值的所有這些方法(對於每個擬合參數),最重要的是初始條件。 我相信如果你選擇一個良好的初始條件(初始猜測),擬合工具效果很好。

祝好運

我不會使用曲線擬合工具箱,我會使用曲線擬合函數,例如lsqcurvefit 這是我做了一段時間的例子:

% Define curve model functions
expsin = @(a, f, phi, tau, t)a * sin(omega * t + phi) .* exp(-tau * t);
lsqexpsin = @(p, t)expsin(p(1), p(2), p(3), p(4), t);

% Setup data params
a = 1;          % gain
f = 10;         % frequency
phi = pi/2;     % phase angle
tau = 0.9252523;% time constant

fs = 100;   % sample rate
N = fs;     % length
SNR = 10;   % signal to noise ratio

% Generate time vector
dt = 1/fs; 
t = (0:N-1)*dt; 

omega = 2 * pi * f; % angular freq
noiseGain = 10^(-SNR/20); % gain for given SNR

% Generate dummy data: decaying sinusoid plus noise
x = expsin(a, omega, phi, tau, t);
noise = noiseGain * rand(size(x));
noise = noise - mean(noise);
x = x + noise;

close all; figure; hold on;
plot(t, x, 'k-', 'LineWidth', 2);

% Count zero crossings to find frequency
zCross = find(x(1:end-1) .* x(2:end) < 0);
T = mean(diff(zCross) * dt) * 2;
fEstimate = 1 / T;
omegaEstimate = 2 * pi * fEstimate;

% Fit model to data
init = [0.5, omegaEstimate, 0, 0.5];
[newparams, err] = lsqcurvefit(lsqexpsin, init, t, x);

plot(t, lsqexpsin(newparams, t))

這里生成一些已知參數的數據,並添加一些隨機噪聲; 繪制數據。 從數據估計參數[a, phi, tau] ,並且在頂部繪制具有估計參數的曲線。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM