मैं एक बहुत शोर ऑडियो फ़ाइल (.wav) के भीतर छिपे एक संदेश को समझने की कोशिश कर रहा हूं (मुझे लगता है कि यह एक अतिरिक्त कम ड्रोन के साथ सफेद शोर है)। संदेश छह अंकों की संख्या है । शोर के बारे में मेरे पास और कोई विवरण नहीं है।
मैंने इस उम्मीद में एक कम-पास फिल्टर का उपयोग करने का प्रयास किया कि अधिकांश उच्च आवृत्तियों को समाप्त करने से मुझे संख्याओं को सुनने की अनुमति मिलेगी लेकिन, मुझे लगता है कि आवाज को अच्छी तरह से सुनने के लिए कम ड्रोन से छुटकारा पाने में भी असमर्थ होना चाहिए। मेरा प्रयास इस प्रकार था (नियोजित कार्य freq_space_low_pass_filter
अंत में शामिल है):
[data, SampleRate, NbitsPerSample]=wavread('noisy_msg6.wav');
y=data(:,1); % we will work only with one channel in this demo
N=length(y); %number of sample points
t=( (1:N)*1/SampleRate ).'; % time spacing is 1/SampleRate and we want column vector
Y=fft(y);
spectrum_freq=fourier_frequencies(SampleRate, N);
Freq3db=100;
[spectrum_filtered,g_vs_freq]=freq_space_low_pass_filter(Y, SampleRate, Freq3db);
y_filtered=ifft(spectrum_filtered);
y_filtered=real(y_filtered);
wavwrite(y_filtered/(0.1+max(y_filtered)), SampleRate, NbitsPerSample,
'noisy_msg6_filtered.wav');
%%%%%%%%down sampling%%%%%%%%
indexes=(abs(spectrum_freq) < 10*Freq3db);
spectrum_freq_down_sampled = spectrum_freq(indexes);
spectrum_down_sampled = spectrum_filtered(indexes);
N_down_sampled = length(spectrum_down_sampled);
spectrum_down_sampled=spectrum_down_sampled*N_down_sampled/N;
SampleRate_down_sampled=SampleRate*N_down_sampled/N;
y_down_sampled=real(ifft(spectrum_down_sampled));
t_down_sampled = ( (1:N_down_sampled)*1/SampleRate_down_sampled ).';
sound(y_down_sampled, SampleRate_down_sampled)
function [spectrum_filtered,g]=freq_space_low_pass_filter(spectrum, SampleRate, Freq3db)
%% applies low pass filter in the frequency domain
% spectrum - result of fft on time series data (column vector is expected)
% SampleRate - measured in Hz, 1/dt where dt spacing of the points in time domain
% Freq3db - desired 3db roll off point in Hz
N=length(spectrum);
function G=filter_gain(freq, Freq3db)
G=1./(1+1i*freq/Freq3db); % this corresponds to low pass RC filter
end
spectrum_freq=fourier_frequencies(SampleRate, N);
% calculate filter gain for each spectrum frequency
g=filter_gain(spectrum_freq, Freq3db);
spectrum_filtered=spectrum.*g;
end
सिग्नल स्पेक्ट्रम का प्लॉट: