В этом примере показано, как использовать DyadicAnalysis
и DyadicSynthesis
Системные объекты, чтобы удалить шум из сигнала.
Вейвлеты имеют важное приложение в шумоподавлении сигнала. После разложения вейвлета высокочастотные поддиапазоны содержат большую часть шумовой информации и мало информации сигнала. В этом примере мягкая пороговая обработка применяется к различным поддиапазонам. Порог устанавливается к более высоким значениям для высокочастотных поддиапазонов и нижним значениям для низкочастотных поддиапазонов.
Создание и инициализация Системных объектов, прежде чем они будут использоваться в цикле обработки, очень важны в получении оптимальной эффективности.
load dspwlets; % load wavelet coefficients and noisy signal Threshold = [3 2 1 0];
Создайте SignalSource
Системный объект, чтобы вывести сигнал с шумом.
signalGenerator = dsp.SignalSource(noisdopp.', 64);
Создайте и сконфигурируйте DyadicAnalysisFilterBank
Системный объект для разложения вейвлета сигнала.
dyadicAnalysis = dsp.DyadicAnalysisFilterBank( ... 'CustomLowpassFilter', lod, ... 'CustomHighpassFilter', hid, ... 'NumLevels', 3);
Создайте три Delay
Системные объекты, чтобы компенсировать системную задержку, введенную компонентами вейвлета.
delay1 = dsp.Delay(3*(length(lod)-1)); delay2 = dsp.Delay(length(lod)-1); delay3 = dsp.Delay(7*(length(lod)-1));
Создайте и сконфигурируйте DyadicSynthesisFilterBank
Системный объект для реконструкции вейвлета сигнала.
dyadicSynthesis = dsp.DyadicSynthesisFilterBank( ... 'CustomLowpassFilter', lor, ... 'CustomHighpassFilter', hir, ... 'NumLevels', 3);
Создайте Системный объект осциллографа времени, чтобы построить оригинал, denoised и остаточные сигналы.
scope = timescope('Name', 'Wavelet Denoising', ... 'SampleRate', fs, ... 'TimeSpanSource','property',... 'TimeSpan', 13, ... 'LayoutDimensions',[3 1], ... 'TimeAxisLabels', 'Bottom'); pos = scope.Position; scope.Position = [pos(1) pos(2)-(0.5*pos(4)) 0.9*pos(3) 2*pos(4)]; % Set properties for each display scope.ActiveDisplay = 1; scope.Title = 'Input Signal'; scope.ActiveDisplay = 2; scope.Title = 'Denoised Signal'; scope.ActiveDisplay = 3; scope.Title = 'Residual Signal';
Создайте цикл обработки к denoise входной сигнал. Этот цикл использует Системные объекты, которых вы инстанцировали выше.
for ii = 1:length(noisdopp)/64 sig = signalGenerator(); % Input noisy signal S = dyadicAnalysis(sig); % Dyadic analysis % separate into four subbands S1 = S(1:32); S2 = S(33:48); S3 = S(49:56); S4 = S(57:64); % Delay to compensate for the dyadic analysis filters S1 = delay1(S1); S2 = delay2(S2); S1 = dspDeadZone(S1, Threshold(1)); S2 = dspDeadZone(S2, Threshold(2)); S3 = dspDeadZone(S3, Threshold(3)); S4 = dspDeadZone(S4, Threshold(4)); % Dyadic synthesis (on concatenated subbands) S = dyadicSynthesis([S1; S2; S3; S4]); sig_delay = delay3(sig); % Delay to compensate for analysis/synthesis. Error = sig_delay - S; % Plot the results scope(sig_delay, S, Error); end release(scope);
Этот пример использовал Системные объекты обработки сигналов, такие как DyadicAnalysisFilterBank
и DyadicSynthesisFilterBank
к denoise сигнал с шумом с помощью заданных пользователями порогов. Окно Input Signal показывает исходный сигнал с шумом, окно Denoised Signal показывает сигнал после подавления шума, и окно Residue Signal отображает ошибку между сигналом denoised и оригиналом.