Engee 文档
Notebook

Kepstra分析

本示例旨在比较Engee和MATLAB中kepstra分析的功能。 以下是每个环境的两个代码。

在Engee中,用于执行傅立叶变换的FFTW包和标准函数可用于执行kepstra分析。
以下是我们实现的功能。

In [ ]:
using FFTW  # Для выполнения быстрого преобразования Фурье

# Комплексный кепстр
function cceps(x::Vector{Float64})
    X = fft(x,1)                     # Фурье-преобразование
    p = atan.(imag(X), real(X))
    log_mag = complex.(log.(abs.(X)),p) # Логарифм модуля спектра (добавляем малое значение для стабильности)
    cepstrum = real(ifft(log_mag,1)) # Обратное преобразование Фурье
    return cepstrum
end
# Обратный комплексный кепстр
function icceps(c::Vector{Float64})
    exp_spectrum = exp.(fft(c,1))    # Экспонента спектра
    signal = real(ifft(exp_spectrum,1)) # Обратное преобразование Фурье
    return signal
end
# Действительный кепстр
function rceps(x::Vector{Float64})
    X = fft(x,1)
    log_mag = log.(abs.(X) .+ 1e-10) # Логарифм модуля (с добавлением стабилизатора)
    cepstrum = real(ifft(log_mag)) 
    return cepstrum
end
Out[0]:
rceps (generic function with 1 method)
In [ ]:
x = sin.(1:0.5:100)  # Входной сигнал

cepstrum = cceps(x)
restored_signal = abs.(icceps(cepstrum))
real_cepstrum = abs.(rceps(x))

# # Визуализация
p1 = plot(abs.(cepstrum), title="Cepstrum", ylabel="Magnitude")
p2 = plot(abs.(restored_signal), title="Restored Signal", ylabel="Amplitude")
p3 = plot(abs.(real_cepstrum), title="Real Cepstrum", ylabel="Amplitude")
plot(p1, p2, p3, layout=(3,1), legend=false)
Out[0]:

在MATLAB中,标准函数可用于执行kepstra分析。

  1. cceps(x)执行复杂的倒谱。
  2. icceps(x)执行逆复数倒谱。
  3. rceps(x)执行有效的cepstr。
In [ ]:
using MATLAB
mat"""
% Комплексный кепстр
ccep = cceps($(x));
% Обратный комплексный кепстр
iccep = icceps(ccep);
% Действительный кепстр
rcep = rceps($(x));

% Визуализация результатов
subplot(3,1,1), plot(abs(ccep)), title('Cceps');
subplot(3,1,2), plot(abs(iccep)), title('Icceps');
subplot(3,1,3), plot(abs(rcep)), title('Rceps');
saveas(gcf, 'cep.jpg'); % Сохраняет текущую фигуру как JPG
"""
In [ ]:
load("$(@__DIR__)/cep.jpg")
Out[0]:
No description has been provided for this image

结论

MATLAB具有用于执行这些操作的内置函数。 在Engee中,您可以使用第三方库来完成此任务,例如DSP或FFTW来进行更复杂的信号操作。 同样重要的是要考虑到Engee在如何实现转换方面提供了更大的灵活性。 要简化Engee任务的这些操作,请使用本演示中描述的现成方法。

比较两种环境功能的另一个方面表明,MATLAB针对处理矩阵和信号进行了优化。 然而,如果考虑到这种环境的具体情况编写代码,Engee在计算方面通常会更快,这大大提高了大型系统中执行和测试算法的速度。