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

Этот пример показывает различие между дискретным вейвлет (DWT) и непрерывным вейвлет (CWT).

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

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

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

DWT и CWT сигнала с пропуском

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

load freqbrk; 
signal = freqbrk;

Выполните дискретное вейвлет-преобразование (DWT) на уровне 5 с помощью вейвлет Haar.

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.

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