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

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

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

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