Как восстановить сигнал, применяя пороговое значение к вейвлет-коэффициентам? - PullRequest
0 голосов
/ 03 сентября 2018

Я хочу восстановить 1D аудио сигнал, установив пороговые значения вейвлет-коэффициентов. Прежде всего, я прочитал звуковой сигнал и нормализовал его. После этого я добавил белый гауссовский шум. Впоследствии я рассчитал максимальный уровень громкости для разложения.

Я применил многоуровневое вейвлет-разложение к зашумленному сигналу с помощью вейвлета db2 и получил приблизительные и подробные коэффициенты. Для расчета порогового значения с использованием wdencmp я получаю пороговое значение, используя мягкое определение порогового значения, и применяю этот порог к коэффициентам вейвлета. В конце я использую waverec для восстановления исходного сигнала, используя новые коэффициенты.

[x,Fs] = audioread('audio8.wav');   %Read cough sound
sound(x,Fs)
figure
plot(x(1:end,1))
title('Original Cough Sound')
xlabel('Frequency (Hz)')
ylabel('Amplitude')

x = x/abs(max(x));      %Normalization of Cough Sound
normalized_snr = snr(x,Fs);    %SNR of Normalized Cough Sound
figure
plot(x)
title('Normalized Cough Sound')
xlabel('Frequency (Hz)')
ylabel('Amplitude')

gauss_noise = awgn(x,20,'measured');  %Adding White Gaussian Noise 20db
sound(gauss_noise,Fs)
disp(length(gauss_noise))
noisy_snr = snr(gauss_noise,Fs);     %SNR of Noisy Cough Sound
figure
plot(gauss_noise)
title('Noisy Cough Sound')
xlabel('Frequency (Hz)')
ylabel('Amplitude')

level = floor(log2(length(gauss_noise))); %Get the maximum level for decomposition
disp(level)

[c,l] = wavedec(gauss_noise,level,'db2'); %multi level wavelet decomposition
figure
plot(c)
grid on
title('Wavelet Coefficients')

[thr,sorh,keepapp] = ddencmp('den','wv',gauss_noise); %Values for denoising like thr = value of thresholding, sorh = soft/hard thrsholding, keepapp = keep the approximation coefficients as it is.
clean = wdencmp('gbl',c,l,'db2',level,thr,sorh,keepapp); %Denoise the signal
snr_clean = snr(clean,Fs);
sound(clean,Fs)
figure
subplot(211)
plot(x); title('Original Signal');
subplot(212)
plot(clean); title('Denoised Signal After thresholding');

xrec = waverec(c,l,'db2'); %Perform wavelet reconstruction on new coefficients after thresholding 
rec_snr = snr(xrec,Fs);
figure
plot(xrec)
grid on
title('Reconstructed Signal')
sound(xrec,Fs)

Правильно ли я применил порог к вейвлет-коэффициентам? И восстановлен ли сейчас правильный сигнал?

...