शोर वॉयस सिग्नल से मैसेज को फिल्टर करें


9

मैं एक बहुत शोर ऑडियो फ़ाइल (.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

सिग्नल स्पेक्ट्रम का प्लॉट: चित्र


आप हमें एक नमूना प्रदान कर सकते हैं जिसके साथ आप काम कर रहे हैं? और शायद आपका परिणाम?
पेनेलोप

मैं प्लॉट छवियों (पर्याप्त अंक नहीं) को अपलोड नहीं कर सकता और आपको फ़ाइल से लिंक करने का कोई तरीका नहीं है
user1825494

1
यदि आप टिप्पणियों में लिंक डालते हैं, तो कोई व्यक्ति ख़ुशी से उन्हें संपादित करेगा। और यदि आपको फ़ाइलों को कहीं अपलोड करने और लिंक प्रदान करने का कोई तरीका मिलता है, तो उसके साथ ही वापस आ जाएँ।
पेनेलोप

2
यदि यह लॉग-लॉग प्लॉट किया गया था, तो ग्राफ बहुत अधिक जानकारीपूर्ण होगा। जैसा कि यह है, ऐसा लगता है कि आपके पास लगभग 1.5 किलोहर्ट्ज़ से 22.5 किलोहर्ट्ज़ तक का चौड़ा शोर है, जिसमें लगभग 2 हर्ट्ज पर एक नैरोबैंड टोन है। मैं जो मानता हूं वह "आवाज" संकेत है, साथ ही जो एक महत्वपूर्ण डीसी ऑफसेट प्रतीत होता है, काफी शांत "छेद" में बैठता है। यह वास्तव में एक उपयुक्त बैंडपास फिल्टर के साथ अलग करने के लिए कठिन नहीं होना चाहिए।
डेव ट्वीड

जवाबों:


1

कुछ बिंदु:

  1. फ़्रीक्वेंसी डोमेन में फ़िल्टरिंग जटिल है और टाइम डोमेन एलियासिंग से बचने के लिए ओवरलैप ऐड जैसी वास्तविक एल्गोरिथ्म की आवश्यकता है। समय डोमेन में सीधे फ़िल्टर करना बहुत आसान है: [b], = मक्खन (१,१०० / (नमूना / २)); y_filtered = फ़िल्टर (b, a, y); बहुत अधिक है
  2. आप शायद ड्रोन फ्रीक्वेंसी पर नॉच फिल्टर लगाना चाहते हैं
  3. ब्रॉड-बैंड स्थिर शोर के लिए एक अच्छी विधि वीनर फ़िल्टरिंग या वर्णक्रमीय घटाव है। इस पर कई पत्र प्रकाशित हुए हैं।

0

आप एक कम पास फ़िल्टर का उपयोग करने का उल्लेख करते हैं, लेकिन जैसा कि टिप्पणीकारों में से एक ने उल्लेख किया है कि आप शायद कम आवृत्ति शोर को फ़िल्टर करने के लिए बैंड-पास फ़िल्टर के साथ भी बेहतर करेंगे। यदि आप पहले से मौजूद समाधानों में रुचि रखते हैं तो तृतीय-पक्ष पुस्तकालयों में शोर में कमी फिल्टर भी मौजूद है।


0

मानव आवाज में कुछ ख़ासियतें होती हैं जो मदद कर सकती हैं। एक के लिए, महिला आवाज लगभग 200 हर्ट्ज, पुरुष लोअर पर शुरू होती है, इसलिए यहां एक उच्च-पास फिल्टर करने से थोड़ी मदद मिलेगी। यह भी देखें ध्वनिक-सुविधाओं-भेद-पुरुष और महिला-आवाज

इसके अतिरिक्त, हिस्टोग्राम के माध्यम से ड्रोन आवृत्तियों की पहचान करें।

कोड में यह सब करना थोड़ा बोझिल है। क्या आपने ऑडेसिटी जैसे कुछ ऑडियो प्रोग्राम पर विचार किया है ?

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.