시끄러운 음성 신호에서 메시지 필터링


9

매우 시끄러운 오디오 파일 (.wav)에 숨겨진 메시지를 해독하려고합니다 (추가 드론이있는 백색 잡음이라고 생각합니다). 메시지는 6 자리 숫자 입니다. 노이즈에 대한 자세한 내용은 없습니다.

나는 대부분의 더 높은 주파수를 제거하면 숫자를들을 수 있기를 희망하면서 저역 통과 필터를 사용하려고 시도했지만, 저음 무인 항공기를 충분히 제거하여 음성을 충분히들을 수 없었습니다. 내 시도는 다음과 같습니다 (사용 된 기능 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

신호 스펙트럼의 플롯 : 그림


작업중인 샘플을 제공 할 수 있습니까? 그리고 아마도 당신의 결과는?
penelope

나는 플롯 이미지 (충분하지 점)을 업로드하고 파일을 링크 할 수있는 방법이 없다 할 수없는
user1825494

1
주석에 링크를 넣으면 누군가가 기꺼이 편집 할 수 있습니다. 그리고 파일을 어딘가에 업로드하고 링크를 제공 할 수있는 방법을 찾으면 그 링크로 다시 돌아가십시오.
penelope

2
그래프가 로그 로그로 표시되면 그래프가 훨씬 유익합니다. 그대로, 약 1.5 kHz에서 22.5 kHz의 광대역 잡음이 있고 약 2 kHz의 협 대역 톤이있는 것처럼 보입니다. 내가 생각하는 것은 "음성"신호이며, 상당한 DC 오프셋으로 보이는 것은 상당히 조용한 "구멍"에있다. 적절한 대역 통과 필터로 분리하기가 어려운 것은 아닙니다.
Dave Tweed

답변:


1

몇 가지 사항 :

  1. 주파수 영역에서의 필터링은 복잡하며 시간 영역 앨리어싱을 피하기 위해 오버랩 추가와 같은 실제 알고리즘이 필요합니다. 시간 영역에서 직접 필터링하는 것이 훨씬 쉽습니다. [b, a] = butter (1,100 / (SampleRate / 2); y_filtered = filter (b, a, y); 훨씬 낫습니다
  2. 드론 주파수에 노치 필터를 설치하고 싶을 것입니다.
  3. 광대역 고정 잡음의 경우 좋은 방법은 Wiener 필터링 또는 스펙트럼 감산입니다. 이에 관한 많은 논문이 발표되었습니다.

0

저역 통과 필터 사용에 대해 언급했지만 주석 작성자 중 한 사람이 저역 잡음을 필터링하기 위해 대역 통과 필터를 사용하는 것이 좋습니다. 기존 솔루션에 관심이있는 경우 타사 라이브러리에도 노이즈 감소 필터가 있습니다.


0

인간의 목소리에는 도움이 될만한 특성이 있습니다. 예를 들어, 여성의 음성은 약 200Hz, 남성은 낮아지기 때문에 고역 통과 필터 를 사용하면 약간 도움이 될 것입니다. 도 참조 음향 기능 - 구별 - 더 - 남성과 여성으로 음성을 .

또한 히스토그램을 통해 드론 주파수를 식별하십시오.

코드에서이 모든 작업을 수행하는 것은 약간 성가신 일입니다. Audacity 와 같은 오디오 프로그램을 고려 했습니까 ?

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.