信号关系和转换:将一个信号转换为另一个信号?

时间:2013-12-18 00:58:29

标签: algorithm matlab signal-processing fft ifft

我试图将近岸潮汐信号(点A )与长模型边界的3个点相关联(点B C D )。我想在 B C D 之间建立一种关系,我们可以将 A 预测转换为 B C D 。目前我正在做一个单相移,一个高于零的电平的幅度比,一个低于零的电平的幅度比和一个平均电平转换。

这会在峰值退潮和峰值洪水中的潮汐信号中产生扭结,导致模型超过预测落潮电流。我想知道是否有人知道这种转变的关系更为复杂?

我想要捕捉的一件事是高水位和低水位之间的相移差异(例如,对于不同的点,正数与负数期间的时间比例可能不同)。

当前流程的示例算法。

A = vector (size n x 1 ) units meters

time_A = vector (size n x 1 )

ph_B = phase shift for AvsB.

pos_amp_B = positive amplitude ration.
neg_amp_B = negative amplitude ration.

B_mean = long term mean of B.

A_mean = long term mean of A.

for i = 1:n
    a = A(i) - A_mean
    if a > 0
       B(i) = a*pos_amp_B
    else
       B(i) = a*neg_amp_B
    end
    time_B(i) = time_A(i) = ph_B
    B(i) = B(i) + B_mean
end
BTW:这种关系基于大约6个月的数据。

编辑1: 那么,首先只考虑两个正弦信号(即幅度,相移),但不是规则的,因此例如周期是12.5小时但是正半部和负半部的斜率和周期并不完全相同。您不需要任何上下文知识。我只是在寻找转换算法。

编辑2:

这是时间序列和fft比较的图片(fft专注于高能量频率(12.5小时(半日)),只是为了说明不是所有的频率都很好地缩放)。黑色是零绿色的A.绿色。

Water Level [m] timeseries (top) and fft analysis (bottom)

3 个答案:

答案 0 :(得分:2)

如果没有更详细的域名知识,很难为您提供明确的答案。我将在此假设您的潮汐行为是linear time invariant(LTI)系统。根据您在问题中显示的数据,这看起来是一个合理的假设。

现在,您可以通过对信号A应用幅度和相位调整来创建B,C和D信号。有几种方法可以做到这一点。下面我通过将A乘以一个复数来完成它。调整复数的幅度和相位以得到您需要的结果。这是一个用Matlab代码编写的例子:

% Create an example signal at location 'A'
t = 0:0.1:10;
A = 0.35.*sin(2.*pi.*0.5.*t) + 1.*sin(2.*pi.*0.5175.*t) + 0.3.*sin(0.5255.*t);

% We want a complex version of A, so let's apply a Hilbert transform to it
A = hilbert(A);

% Now we can create the other signals by transforming the amplitude and
% phase. Exactly what amplitude and phase to apply needs to be determined.
B = 0.9*exp(j*0.1).*A;
C = 0.8*exp(j*0.4).*A;
D = 0.7*exp(j*0.6).*A;

% Plot what these signals look like
figure(1); hold on;
plot(t,real(A),'k');
plot(t,real(B),'r');
plot(t,real(C),'g');
plot(t,real(D),'b');
xlabel('Time');
ylabel('Amplitude');
legend('A','B','C','D');

这将生成一个与您在问题中发布的图片非常相似的图。如果您的潮汐行为无法通过LTI系统近似,那么您可能必须执行一些更复杂的非线性建模。

希望有所帮助!

答案 1 :(得分:2)

潮汐预测模型非常复杂。

要获得更精确的预测,您需要更多数据。看看下面的论文(不幸的是用德语写的;我不知道英文翻译):

Das Nordseemodell der BAW zur Simulation der Tide in der Deutschen Bucht

幸运的是,这篇论文包含了许多可以在不懂德语的情况下理解的表格和图片。

总结:除了A,B,C,D点的潮汐水平,你当然需要一些 近似的海底深度剖面,您将需要风数据进行计算。只有六个月的现实世界数据还不够:您需要至少一年的数据才能涵盖所有季节。

本文第93页引用的软件已于2010年归入GPLv2,可以找到here

答案 2 :(得分:0)

这类似于强迫振荡(由月球驱动)和海气系统的干扰。

你能设置一个由四个ODE和一个外部力源组成的系统,如:

   <<< tidal force field >>>

|         |         |         |
o -vvvvv- o -vvvvv- o -vvvvv- o
A         B         C         D

-vvvvv-应该与机械弹簧类似。

所有的弹簧也会受到月球的影响,如果这些点相距较远,可能会有一些轻微的相移。

您可以通过使用随机微分方程中给出的一些方法-I-wish-I-know来确定系统结果矩阵中的常数。使用随机微分方程seems to be used in hydrology(付费墙)的方法,所以也许我不会太远。

如果你想生活在边缘,你可以尝试使耦合表现为略微非线性(即,当达到最大值时略微变平,这可以被认为是海面上升时增加的表面)