cmddenoise

Зависимое интервалом шумоподавление

Синтаксис

sigden = cmddenoise(sig,wname,level)
sigden = cmddenoise(sig,wname,level,sorh)
sigden = cmddenoise(sig,wname,level,sorh,nb_inter)
sigden = cmddenoise(sig,wname,level,sorh,nb_inter,thrParamsIn)
[sigden,coefs] = cmddenoise(___)
[sigden,coefs,thrParamsOut] = cmddenoise(___)
[sigden,coefs,thrParamsOut,int_DepThr_Cell] = cmddenoise(sig,wname,level,sorh,nb_inter)
[sigden,coefs,thrParamsOut,int_DepThr_Cell,BestNbofInt] = cmddenoise(sig,wname,level,sorh,nb_inter)

Описание

пример

sigden = cmddenoise(sig,wname,level) возвращает сигнал denoised, sigden, полученный из зависимого интервалом шумоподавления сигнала, sig, с помощью ортогонального или биоортогонального вейвлета и масштабируя фильтры, wname. пороги cmddenoise вейвлет (деталь) коэффициенты вниз, чтобы выровняться, level, и восстанавливают приближение сигнала с помощью измененных коэффициентов детали. cmddenoise делит сигнал на интервалы на основе точек перехода отклонения в первых коэффициентах детали уровня и порогах каждый интервал отдельно. Местоположение и количество точек перехода отклонения автоматически выбраны с помощью оштрафованной контрастной функции [2]. Минимальная задержка между точками перехода является 10 выборками. Пороги получены, использовав минимаксное пороговое правило, и мягкая пороговая обработка используется, чтобы изменить коэффициенты вейвлета [1].

пример

sigden = cmddenoise(sig,wname,level,sorh) возвращает сигнал denoised, sigden, с помощью метода задания порога, sorh, чтобы изменить коэффициенты вейвлета. Допустимым выбором для sorh является 's' для мягкой пороговой обработки или 'h' для трудной пороговой обработки.

пример

sigden = cmddenoise(sig,wname,level,sorh,nb_inter) возвращает сигнал denoised, sigden, с количеством интервалов шумоподавления как положительное целое число между 1 и 6: 1 ≤ nb_inter ≤6. Для nb_inter ≥ 2, cmddenoise оценивает местоположение точек перехода с контрастной функцией [2].

пример

sigden = cmddenoise(sig,wname,level,sorh,nb_inter,thrParamsIn) возвращает сигнал denoised, sigden, с интервалами шумоподавления и соответствующими порогами, заданными как массив ячеек матриц с длиной, равной level. Каждый элемент массива ячеек содержит интервал, и информация о пороге для соответствующего уровня вейвлета преобразовывают. Элементы thrParamsIn являются матрицами N-3 с N, равным количеству интервалов. 1-е и 2-е столбцы содержат начало и конечные индексы интервалов, и 3-й столбец содержит соответствующее пороговое значение. Если вы задаете thrParamsIn, cmddenoise игнорирует значение nb_inter.

пример

[sigden,coefs] = cmddenoise(___) возвращает приближение (масштабирование) и деталь (вейвлет) коэффициенты, coefs. Организация coefs идентична структуре, возвращенной wavedec. Этот синтаксис может включать любой из входных параметров, используемых в предыдущих синтаксисах.

пример

[sigden,coefs,thrParamsOut] = cmddenoise(___) возвращает массив ячеек, thrParamsOut, с длиной, равной level. Каждый элемент thrParamsOut является матрицей N-3. Размерность строки элементов матрицы является количеством интервалов и определяется значением входных параметров. Каждая строка матрицы содержит начало и конечные точки (индексы) порогового интервала и соответствующего порогового значения.

пример

[sigden,coefs,thrParamsOut,int_DepThr_Cell] = cmddenoise(sig,wname,level,sorh,nb_inter) возвращает массив ячеек, int_DepThr_Cell, с длиной, равной 6. int_DepThr_Cell содержит интервал и информацию о пороге, принимающую количество диапазонов точек перехода от 0 до 5. Энный элемент int_DepThr_Cell является матрицей N-3, содержащей информацию об интервале, принимающую N-1 точки перехода. Каждая строка матрицы содержит начало и конечные точки (индексы) порогового интервала и соответствующего порогового значения. Попытка к выводу int_DepThr_Cell, если вы используете входной параметр, thrParamsIn, результаты по ошибке.

пример

[sigden,coefs,thrParamsOut,int_DepThr_Cell,BestNbofInt] = cmddenoise(sig,wname,level,sorh,nb_inter) возвращает оптимальное количество интервалов сигнала на основе предполагаемых точек перехода отклонения в коэффициентах детали уровня 1. Чтобы оценить количество точек перехода, cmddenoise принимает, что общее количество меньше чем или равно 6 и использует оштрафованный контраст [2]. Попытка к выводу BestNbofInt, если вы используете входной параметр, thrParamsIn, результаты по ошибке.

Примеры

свернуть все

Загрузите шумный сигнал блоков, nblocr1.mat. Сигнал состоит из кусочного постоянного сигнала в аддитивном белом Гауссовом шуме. Отклонение аддитивного шума отличается по трем непересекающимся интервалам.

load nblocr1;

Примените зависимое интервалом шумоподавление вниз к уровню 4 с помощью вейвлета Хаара. |cmddenoise автоматически определяет оптимальный номер и местоположения точек перехода отклонения. Постройте denoised и исходный сигнал для сравнения.

sigden = cmddenoise(nblocr1,'db1',4);
plot(nblocr1);
hold on;
plot(sigden,'r','linewidth',2);
axis tight;

Загрузите шумный сигнал блоков, nblocr1.mat. Сигнал состоит из кусочного постоянного сигнала в аддитивном белом Гауссовом шуме. Отклонение аддитивного шума отличается по трем непересекающимся интервалам.

load nblocr1;

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

sorh = 'h';
sigden = cmddenoise(nblocr1,'db1',4,sorh);
plot(nblocr1);
hold on;
plot(sigden,'r','linewidth',2);
axis tight;
legend('Original Signal','Denoised Signal','Location','NorthWest');

Создайте сигнал, выбранный на уровне 1 кГц. Сигнал состоит из серии ударов различных ширин.

t = [0.1 0.13 0.15 0.23 0.25 0.40 0.44 0.65 0.76 0.78 0.81];
h = [4  -5 3 -4 5  -4.2   2.1   4.3  -3.1   5.1  -4.2];
h  = abs(h);
len = 1000;
w  = 0.01*[0.5 0.5 0.6 1 1 3 1 1 0.5 0.8 0.5];
tt = linspace(0,1,len);
x = zeros(1,len);
for j=1:11
  x = x + ( h(j) ./ (1+ ((tt-t(j))/w(j)).^4));
end

Добавьте белый Гауссов шум с различными отклонениями к двум непересекающимся сегментам сигнала. Добавьте нулевой средний белый Гауссов шум с отклонением, равным 2 к сегменту сигнала от 0 до 0,3 секунд. Добавьте нулевой средний белый Гауссов шум с модульным отклонением к сегменту сигнала от 0,3 секунд до 1 секунды. Установите генератор случайных чисел на настройки по умолчанию для восстанавливаемых результатов.

rng default;
nv1 = sqrt(2).*randn(size(tt)).*(tt<=0.3);
nv2 = randn(size(tt)).*(tt>0.3);
xx = x+nv1+nv2;
sigden = cmddenoise(xx,'sym5',5,'s',2);

Примените зависимое интервалом шумоподавление с помощью Добечиса меньше всего - асимметричный вейвлет с 5 исчезающими моментами вниз к уровню 3. Определите номер интервалов к 2. Постройте сигнал с шумом, исходный сигнал и сигнал denoised для сравнения.

sigden = cmddenoise(xx,'sym5',3,'s',2);
subplot(211)
plot(tt,xx); title('Noisy Signal');
subplot(212)
plot(tt,x,'k-.','linewidth',2);
hold on;
plot(tt,sigden,'r','linewidth',2);
legend('Original Signal','Denoised Signal','Location','SouthEast');

Загрузите сигнал в качестве примера nbumpr1.mat. Отклонение аддитивного шума отличается по трем непересекающимся интервалам.

load nbumpr1.mat;

Используйте анализ мультиразрешения уровня 5. Создайте массив ячеек длины 5 состоящий из 3х3 матриц. Первые два элемента каждой строки содержат начало и конечные индексы интервала, и последний элемент каждой строки является соответствующим порогом.

wname = 'sym4';
level = 5;
sorh = 's';
thrParamsIn =  {...
    [...
    1     207      1.0482; ...
    207   613      2.5110; ...
    613   1024     1.0031; ...
    ]; ...
    [...
    1    207      1.04824; ...
    207  613      3.8718; ...
    613  1024     1.04824; ...
    ]; ...
    [...
    1    207      1.04824; ...
    207  613      1.99710; ...
    613  1024     1.65613; ...
    ]; ...
    [...
    1    207      1.04824; ...
    207  613      2.09117; ...
    613  1024     1.04824; ...
    ]; ...
    [...
    1    207      1.04824; ...
    207  613      1.78620; ...
    613  102      1.04824; ...
    ]; ...
    };

Denoise сигнал с помощью пороговых настроек и Добечис меньше всего - асимметричный вейвлет с 4 исчезающими моментами. Используйте мягкое правило пороговой обработки. Постройте шумное и сигналы denoised для сравнения.

wname = 'sym4';
level = 5;
sorh = 's';   sigden = cmddenoise(nbumpr1,wname,level,sorh,...
   NaN,thrParamsIn);
plot(nbumpr1); hold on;
plot(sigden,'r','linewidth',2); axis tight;
legend('Noisy Signal','Denoised Signal','Location','NorthEast');

Загрузите сигнал в качестве примера nblocr1.mat. Используйте вейвлет Хаара и анализируйте сигнал вниз к уровню 2. Получите дискретный вейвлет, преобразовывают и denoise сигнал. Возвратите коэффициенты вейвлета сигналов denoised и шумного.

load nblocr1.mat;
[sigden,coefs] = cmddenoise(nblocr1,'db1',2);
[C,L] = wavedec(nblocr1,2,'db1');

Постройте реконструкции на основе приближения уровня 2 и коэффициентов детали уровня 2 и уровня 1 для сигнала с шумом.

app = wrcoef('a',C,L,'db1',2);
subplot(3,1,1);
plot(app); title('Approximation Coefficients');
for nn = 1:2
    det = wrcoef('d',C,L,'db1',nn);
    subplot(3,1,nn+1)
    plot(det); title(['Noisy Wavelet Coefficients - Level '...
          num2str(nn)]);
end

Постройте реконструкции на основе приближения и детализируйте коэффициенты для сигнала denoised на тех же уровнях.

figure;
app = wrcoef('a',coefs,L,'db1',2);
subplot(3,1,1);
plot(app); title('Approximation Coefficients');
for nn = 1:2
    det = wrcoef('d',coefs,L,'db1',nn);
    subplot(3,1,nn+1)
    plot(det); 
    title(['Thresholded Wavelet Coefficients-Level '...
         num2str(nn)]);
end

Коэффициенты приближения идентичны в шумном и сигнале denoised, но большинство коэффициентов детали в сигнале denoised близко к нулю.

Создайте сигнал, выбранный на уровне 1 кГц. Сигнал состоит из серии ударов различных ширин.

t = [0.1 0.13 0.15 0.23 0.25 0.40 0.44 0.65 0.76 0.78 0.81];
h = [4  -5  3  -4 5  -4.2  2.1  4.3  -3.1  5.1  -4.2];
h  = abs(h);
len = 1000;
w  = 0.01*[0.5 0.5 0.6 1 1 3 1 1 0.5 0.8 0.5];
tt = linspace(0,1,len);  x = zeros(1,len);
for j=1:11
  x = x + ( h(j) ./ (1+ ((tt-t(j))/w(j)).^4));
end
plot(tt,x);
title('Original Signal');
hold on;

Добавьте белый Гауссов шум с различными отклонениями к двум непересекающимся сегментам сигнала. Добавьте нулевой средний белый Гауссов шум с отклонением, равным 2 к сегменту сигнала от 0 до 0,3 секунд. Добавьте нулевой средний белый Гауссов шум с модульным отклонением к сегменту сигнала от 0,3 секунд до 1 секунды. Установите генератор случайных чисел на настройки по умолчанию для восстанавливаемых результатов.

rng default;
nv1 = sqrt(2).*randn(size(tt)).*(tt<=0.3);
nv2 = randn(size(tt)).*(tt>0.3);
xx = x+nv1+nv2;
plot(tt,xx);
title('Noisy Signal');

Примените зависимое интервалом шумоподавление с помощью Добечиса меньше всего - асимметричный вейвлет с 4 исчезающими моментами вниз к уровню 5. Автоматически выберите количество интервалов и выведите результат.

[sigden,coefs,thrParamsOut] = cmddenoise(xx,'sym4',5);
thrParamsOut{1}
ans = 2×3
103 ×

    0.0010    0.2930    0.0036
    0.2930    1.0000    0.0028

cmdnoise идентифицирует одну точку перехода отклонения в 1-х коэффициентах детали уровня, задающих два интервала. Первый интервал содержит выборки 1 - 293. Второй интервал содержит выборки 293 - 1 000. Это близко к истинной точке перехода отклонения, которая происходит в демонстрационных 299.

Загрузите сигнал в качестве примера, nbumpr1.mat. Разделите сигнал на 1 - 6 интервалов, принимающих от 0 до 5 точек перехода. Вычислите пороги для каждого интервала. Используя Добечиса меньше всего - асимметричный вейвлет с 4 исчезающими моментами возвращают интервалы и соответствующие пороги. Отобразите результаты.

load nbumpr1.mat;
[sigden,~,~,int_DepThr_Cell] = cmddenoise(nbumpr1,'sym4',1);
format bank;
disp('          Begin        End          Threshold ');
          Begin        End          Threshold 
cellfun(@disp,int_DepThr_Cell,'UniformOutput',false);
          1.00       1024.00          1.36

          1.00        613.00          1.73
        613.00       1024.00          1.00

          1.00        207.00          1.05
        207.00        613.00          2.51
        613.00       1024.00          1.00

          1.00        207.00          1.05
        207.00        597.00          2.52
        597.00        627.00          1.69
        627.00       1024.00          0.97

          1.00        207.00          1.05
        207.00        613.00          2.51
        613.00        695.00          1.20
        695.00        725.00          0.59
        725.00       1024.00          1.05

          1.00        207.00          1.05
        207.00        597.00          2.52
        597.00        627.00          1.69
        627.00        695.00          1.19
        695.00        725.00          0.59
        725.00       1024.00          1.05

Загрузите сигнал в качестве примера, nbumpr1.mat. Сигнал имеет две точки перехода отклонения, который приводит к трем интервалам. Используйте cmddenoise, чтобы обнаружить количество точек перехода.

load nbumpr1.mat;
[sigden,~,thrParamsOut,~,bestNbofInt] = ...
       cmddenoise(nbumpr1,'sym4',1);
fprintf('Found %d change points.\n',bestNbofInt-1);
Found 2 change points.

Входные параметры

свернуть все

Входной сигнал, заданный как 1D строка или вектор-столбец. sig является входным сигналом с действительным знаком для зависимого интервалом шумоподавления. Элементы sig приняты, чтобы быть равномерно распределенными вовремя или пробел. Если sig содержит неравноценно-выборочные-данные, cmddenoise не является соответствующим. Используйте поднимающееся преобразование вместо этого. Смотрите lwt для деталей.

Типы данных: double

Имя вейвлета, заданное как вектор символов или скаляр строки. wname является любым допустимым ортогональным или биоортогональным вейвлетом. Можно использовать команду: wtype = wavemngr('fields',wname,'type','file');, чтобы определить, допустимо ли имя вейвлета, чтобы использовать с cmddenoise. Допустимые имена вейвлета возвращают 1 или 2 для wtype.

Пример: 'bior2.2', 'db4', 'sym4'

Типы данных: char

Вейвлет преобразовывает (анализ мультиразрешения) уровень, заданный как положительное целое число. level дает уровень разложения мультиразрешения входного сигнала с помощью подкошенного 1D дискретного вейвлета, преобразовывают, wavedec.

Типы данных: double

Правило пороговой обработки, заданное как символьный массив. sorh является пороговым правилом, использованным в модификации коэффициентов детали. Допустимым выбором для sorh является 's' (значение по умолчанию) и 'h' для мягкой и трудной пороговой обработки.

Количество интервалов, заданных как положительное целое число меньше чем 7. cmddenoise делит входной сигнал на интервалы nb_inter. cmddenoise определяет местоположение точек перехода nb_inter с помощью контрастной функции [2]. Если вы вводите NaN для nb_inter, cmddenoise игнорирует вход. Если вы используете входной параметр thrParamsIn, cmddenoise игнорирует любое значение, вы вводите для nb_inter.

Типы данных: double

Интервалы и пороги уровнем, заданным как массив ячеек матриц, равняются в длине level. Каждый элемент thrParamsIn содержит интервал и информацию о пороге для соответствующего уровня анализа мультиразрешения. Элементы thrParamsIn являются матрицами N-3 с N, равным количеству интервалов. 1-е и 2-е столбцы содержат начало и конечные индексы интервалов, и 3-й столбец содержит соответствующее пороговое значение. Если вы задаете thrParamsIn, вы не можете задать выходные аргументы int_DepThr_Cell или BestNbofInt.

Типы данных: cell

Выходные аргументы

свернуть все

sigden является denoised версией входа sig. sigden является 1D вектором - строкой, равным в длине к sig.

coefs является вектором - строкой из приближения (масштабирование) и пороговая деталь (вейвлет) коэффициенты. Упорядоченное расположение приближения и коэффициентов детали уровнем в coefs совпадает с выводом wavedec. cmddenoise не применяет пороговую обработку к коэффициентам приближения.

Типы данных: double

thrParamsOut является массивом ячеек матриц, равных в длине к level. Каждый элемент массива ячеек содержит интервал и информацию о пороге для соответствующего уровня анализа мультиразрешения. Элементы thrParamsOut являются матрицами N-3 с N, равным количеству интервалов. N определяется значением входных параметров. 1-е и 2-е столбцы содержат начало и конечные индексы интервалов, и 3-й столбец содержит соответствующее пороговое значение.

Типы данных: cell

int_DepThr_Cell содержит интервал и информацию о пороге, принимающую количество диапазонов точек перехода от 0 до 5. Энный элемент int_DepThr_Cell является матрицей N-3, содержащей информацию об интервале, принимающую N-1 точки перехода. Каждая строка матрицы содержит начало и конечные индексы порогового интервала и соответствующего порогового значения. Попытка к выводу int_DepThr_Cell, если вы вводите количество интервалов и порогов, thrParamsIn, результатов по ошибке. int_DepThr_Cell{BestNbofInt} или int_DepThr_Cell{nb_inter} равны элементам матрицы thrParamsOut.

Типы данных: cell

BestNbofInt является оптимальным количеством интервалов на основе предполагаемых точек перехода в отклонении коэффициентов детали уровня 1. Номер и местоположение точек перехода оцениваются с помощью оштрафованного контрастного метода [2]. Попытка к выводу BestNbofInt, если вы вводите количество интервалов и порогов, thrParamsIn, результатов по ошибке.

Ссылки

[1] Donoho, D. и Джонстон, я. “Идеальная пространственная адаптация уменьшением вейвлета”, Biometrika, 1994, 81,3, 425–455.

[2] Lavielle, M. “Обнаружение нескольких изменений в последовательности зависимых переменных”, Стохастические процессы и их Приложения, 1999, 83, 79–102.

Смотрите также

Функции

Приложения

Представленный в R2010a