exponenta event banner

Непрерывный и дискретный вейвлет-анализ разрыва частоты

В этом примере показана разница между дискретным вейвлет-преобразованием (DWT) и непрерывным вейвлет-преобразованием (CWT).

Когда непрерывный анализ более подходит, чем дискретный?

Чтобы ответить на этот вопрос, рассмотрим связанные вопросы: Нужно ли знать все значения непрерывного разложения, чтобы точно восстановить сигнал? Можете ли вы выполнить нерезервируемый анализ? Когда энергия сигнала является конечной, не все значения разложения необходимы для точного восстановления исходного сигнала, при условии, что вы используете вейвлет, который удовлетворяет некоторым условиям допустимости. Обычные вейвлеты удовлетворяют этому условию. В этом случае сигнал непрерывного времени характеризуется знанием дискретного преобразования. В таких случаях достаточно дискретного анализа, а непрерывный анализ является избыточным.

Непрерывный анализ часто легче интерпретировать, поскольку его избыточность имеет тенденцию усиливать признаки и делает всю информацию более заметной. Особенно это касается очень тонкой информации. Таким образом, анализ повышает «читаемость» и простоту интерпретации того, что он теряет с точки зрения экономии пространства.

DWT и CWT сигнала с разрывом частоты

Показать, как анализ с использованием вейвлетов может обнаружить точный момент изменения сигнала. Используйте прерывистый сигнал, который состоит из медленной синусоидальной волны, за которой резко следует средняя синусоидальная волна.

load freqbrk; 
signal = freqbrk;

Выполните дискретное вейвлет-преобразование (DWT) на уровне 5, используя вейвлет Хаара.

lev   = 5;
wname = 'db1'; 
nbcol = 64; 
[c,l] = wavedec(signal,lev,wname);

Разверните дискретные вейвлет-коэффициенты для графика.

len = length(signal);
cfd = zeros(lev,len);
for k = 1:lev
    d = detcoef(c,l,k);
    d = d(:)';
    d = d(ones(1,2^k),:);
    cfd(k,:) = wkeep(d(:)',len);
end
cfd =  cfd(:);
I = find(abs(cfd)<sqrt(eps));
cfd(I) = zeros(size(I));
cfd    = reshape(cfd,lev,len);
cfd = wcodemat(cfd,nbcol,'row');

h211 = subplot(2,1,1);
h211.XTick = [];
plot(signal,'r'); 
title('Analyzed signal.');
ax = gca;
ax.XLim = [1 length(signal)];
subplot(2,1,2);
colormap(cool(128));
image(cfd);
tics = 1:lev; 
labs = int2str(tics');
ax = gca;
ax.YTickLabelMode = 'manual';
ax.YDir = 'normal';
ax.Box = 'On';
ax.YTick = tics;
ax.YTickLabel = labs;
title('Discrete Transform, absolute coefficients.');
ylabel('Level');

Figure contains 2 axes. Axes 1 with title Analyzed signal. contains an object of type line. Axes 2 with title Discrete Transform, absolute coefficients. contains an object of type image.

Выполнение непрерывного вейвлет-преобразования (CWT) и визуализация результатов

figure;
[cfs,f] = cwt(signal,1,'waveletparameters',[3 3.1]);
hp = pcolor(1:length(signal),f,abs(cfs)); hp.EdgeColor = 'none'; 
set(gca,'YScale','log');
xlabel('Sample'); ylabel('log10(f)');

Figure contains an axes. The axes contains an object of type surface.

Если вы просто посмотрите на коэффициенты CWT самого лучшего масштаба, вы можете точно локализовать изменение частоты.

plot(abs(cfs(1,:))); grid on;

Figure contains an axes. The axes contains an object of type line.

Этот пример показывает важное преимущество вейвлет-анализа по сравнению с Фурье. Если бы тот же самый сигнал был проанализирован преобразованием Фурье, мы бы не смогли обнаружить момент, когда частота сигнала изменилась, тогда как здесь он отчетливо виден.