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]:
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分析。
- cceps(x)执行复杂的倒谱。
- icceps(x)执行逆复数倒谱。
- 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]:
结论
MATLAB具有用于执行这些操作的内置函数。 在Engee中,您可以使用第三方库来完成此任务,例如DSP或FFTW来进行更复杂的信号操作。 同样重要的是要考虑到Engee在如何实现转换方面提供了更大的灵活性。 要简化Engee任务的这些操作,请使用本演示中描述的现成方法。
比较两种环境功能的另一个方面表明,MATLAB针对处理矩阵和信号进行了优化。 然而,如果考虑到这种环境的具体情况编写代码,Engee在计算方面通常会更快,这大大提高了大型系统中执行和测试算法的速度。

