Я хочу восстановить 1D аудиосигнал, установив пороговые значения вейвлет-коэффициентов.Прежде всего, я прочитал звуковой сигнал и нормализовал его.После этого я добавил белый гауссовский шум.Впоследствии я вычислил максимальный уровень громкости для разложения.
Я применил многоуровневое вейвлет-разложение к шумному сигналу с помощью вейвлета db8
и получил приблизительные и подробные коэффициенты.Для расчета порога с использованием universal threshold formula
я получил пороговое значение для жесткого порога и применил этот порог к коэффициентам вейвлета.В конце я использую waverec
для восстановления исходного сигнала с использованием новых коэффициентов.
clear all
close all
clc
[x,Fs] = audioread('audio8.wav'); %Read cough sound
sound(x,Fs)
figure
plot(x(1:end,1))
grid on
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)
grid on
title('Normalized Cough Sound')
xlabel('Frequency (Hz)')
ylabel('Amplitude')
gauss_noise = awgn(x,20,'measured'); %Adding White Gaussian Noise
sound(gauss_noise,Fs)
noisy_snr = snr(gauss_noise,Fs); %SNR of Noisy Cough Sound
figure
plot(gauss_noise)
grid on
title('Noisy Cough Sound')
xlabel('Frequency (Hz)')
ylabel('Amplitude')
len = length(gauss_noise);
disp(len)
level = fix(log2(len));
disp(level)
wn = 'db8';
[c,l] = wavedec(gauss_noise,level,wn);
%calculate threshold
sigma = median(abs(c))/0.6745;
thresh = sqrt(2*log(length(gauss_noise)))*sigma;
disp(thresh)
for i = 1:level
det = detcoef(c,l,i);
y_det_hard = wthresh(det,'h',thresh);
figure
plot(y_det_hard)
grid on
end
for j = 1:level
app = appcoef(c,l,'db8',j);
% y_app_hard = wthresh(app,'h',thresh);
figure
plot(app)
grid on
end
app_last = appcoef(c,l,'db8',level);
app_last_hard = wthresh(app_last,'h',thresh);
disp(app_last_hard)
figure
plot(app_last_hard)
grid on
new_coeff = [app_last_hard + y_det_hard];
len2 = length(new_coeff);
y_rec = waverec(new_coeff,len2,'db8'); %Perform wavelet reconstruction on new coefficients after thresholding
figure
plot(y_rec)
grid on
Я получаю сообщение об ошибке, которое ожидало, что N
будет скаляром со значением <= -1
.Правильно ли я применил порог к вейвлет-коэффициентам?И почему я не могу восстановить сигнал?