В этом примере показана разница между дискретным вейвлет-преобразованием (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');

Выполнение непрерывного вейвлет-преобразования (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)');

Если вы просто посмотрите на коэффициенты CWT самого лучшего масштаба, вы можете точно локализовать изменение частоты.
plot(abs(cfs(1,:))); grid on;
Этот пример показывает важное преимущество вейвлет-анализа по сравнению с Фурье. Если бы тот же самый сигнал был проанализирован преобразованием Фурье, мы бы не смогли обнаружить момент, когда частота сигнала изменилась, тогда как здесь он отчетливо виден.