基本原理
自相关函数
假设采样时距为
Δ
t
\Delta t
Δt,则海浪随机序列自相关函数可以写成
R
(
υ
Δ
t
)
=
1
N
−
υ
∑
n
=
1
N
−
υ
x
(
t
n
+
υ
Δ
t
)
x
(
t
n
)
R(\upsilon\Delta t)=\frac{1}{N-\upsilon}\sum\limits_{n=1}^{N-\upsilon}x(t_n+\upsilon\Delta t)x(t_n)
R(υΔt)=N−υ1n=1∑N−υx(tn+υΔt)x(tn)
τ
=
υ
Δ
t
,
υ
=
0
,
1
,
2
,
.
.
.
,
m
\tau=\upsilon\Delta t, \upsilon=0, 1, 2,..., m
τ=υΔt,υ=0,1,2,...,m
这样可以得到
R
(
υ
)
R(\upsilon)
R(υ)的m+1个值,他们具有等间隔
Δ
t
\Delta t
Δt。
粗谱
这里我们令
L
n
L_n
Ln代表频率
f
n
f_n
fn对应的谱初值,有
L
n
=
2
π
∑
τ
=
0
m
Δ
t
R
(
τ
)
c
o
s
ω
n
τ
d
τ
L_n=\frac{2}{\pi}\sum\limits_{\tau=0}^{m\Delta t}R(\tau)\rm cos\omega_n\tau \rm d\tau
Ln=π2τ=0∑mΔtR(τ)cosωnτdτ
谱平滑
谱的平滑可采用哈明窗(Hamming)或哈宁窗(Hanning)函数进行改进
哈明窗
S
(
ω
n
)
=
0.23
L
n
−
1
+
0.54
L
n
+
0.23
L
n
+
1
S(\omega_n)=0.23L_{n-1}+0.54L_{n}+0.23L_{n+1}
S(ωn)=0.23Ln−1+0.54Ln+0.23Ln+1
对于两个端点
S
(
ω
0
)
=
0.54
L
0
+
0.46
L
1
S(\omega_0)=0.54L_{0}+0.46L_{1}
S(ω0)=0.54L0+0.46L1
S
(
ω
n
)
=
0.46
L
m
−
1
+
0.54
L
m
S(\omega_n)=0.46L_{m-1}+0.54L_{m}
S(ωn)=0.46Lm−1+0.54Lm
哈宁窗
S
(
ω
n
)
=
0.25
L
n
−
1
+
0.5
L
n
+
0.25
L
n
+
1
S(\omega_n)=0.25L_{n-1}+0.5L_{n}+0.25L_{n+1}
S(ωn)=0.25Ln−1+0.5Ln+0.25Ln+1
对于两个端点,系数均为0.5。
%% Spectrum Analysis
% Code by JN_Cui
% Modified on 23/6/2020
%% Defination
% Three methods are included:
% 1. Self-Correlation Function (SCF) method
% 2. Fast Fourier Transform (FFT) method
% 3. Maximum Entropy Method (MEM)
% The function for these three methods are named as:
% 1. Spectrum_Analysis_SCF
% 2. Spectrum_Analysis_FFT
% 3. Spectrum_Analysis_MEM
%% Function Spectrum_Analysis_SCF
function [Spectrum,Frequency]=Spectrum_Analysis_SCF(Surf,fs,Method)
Data=Surf-mean(Surf);
N=length(Data);
dt=1/fs;
M=roud(N/30);
df=1/(2*M*dt);
% Self-correlation function
for v=0:M
R(v+1)=sum(Data(1+v:N).*Data(1:N-v))/(N-v);
end
% Spectrum
for n=0:M
L_sum=0;
for v=1:M-1
L_sum=R(v+1)*cos(2*pi*(n)*df*v*dt)+L_sum;
end
L(n+1)=2*dt/pi*(R(1)/2+L_sum+1/2*R(M+1)*cos(2*pi*n*df*M*dt));
end
% Smooth the spectrum by Hamming
if Method == ['Hamming']
for i=1:M-1
S1(i+1)=0.23*L(i)+0.54*L(i+1)+0.23*L(i+2);
end
S1(1)=0.54*L(1)+0.46*L(2);
S1(M+1)=0.46*L(M)+0.54*L(M+1);
x=0:1/(2*M*dt):1/(2*dt);
Spectrum=S1;
Frequency=x*2*pi;
% Hanning
elseif Method == ['Hanning']
for i=1:M-1
S2(i+1)=0.25*L(i)+0.5*L(i+1)+0.25*L(i+2);
end
S2(1)=0.5*L(1)+0.5*L(2);
S2(M+1)=0.5*L(M)+0.5*L(M+1);
x=0:1/(2*M*dt):1/(2*dt);
Spectrum=S2(2:end);
Frequency=x(1:end-1)*2*pi;
else
disp('wrong input')
Spectrum=NaN;
Frequency=NaN;
return
end