Lọc tin nhắn từ tín hiệu thoại ồn ào


9

Tôi đang cố gắng giải mã một tin nhắn ẩn trong một tệp âm thanh rất ồn (.wav) (Tôi nghĩ đó là tiếng ồn trắng với một máy bay không người lái thấp bổ sung). Tin nhắn là một số sáu chữ số . Tôi không có thêm thông tin chi tiết nào về tiếng ồn.

Tôi đã cố gắng sử dụng bộ lọc thông thấp với hy vọng loại bỏ hầu hết các tần số cao hơn sẽ cho phép tôi nghe được các con số, nhưng dường như tôi cũng không thể loại bỏ đủ âm lượng thấp để nghe giọng nói đủ tốt. Cố gắng của tôi là như sau (chức năng được sử dụng freq_space_low_pass_filterđược bao gồm ở cuối):

[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

Âm mưu của phổ tín hiệu: hình ảnh


bạn có thể cung cấp cho chúng tôi mẫu bạn đang làm việc không? và có thể kết quả của bạn?
Penelope

Tôi không thể tải lên hình ảnh cốt truyện (không đủ điểm) và không có cách nào để liên kết bạn với tệp
user1825494

1
nếu bạn đặt liên kết trong các bình luận, ai đó sẽ sẵn sàng chỉnh sửa chúng. Và nếu bạn tìm cách tải lên các tệp ở đâu đó và cung cấp liên kết, hãy quay lại với điều đó.
Penelope

2
Biểu đồ sẽ có nhiều thông tin hơn nếu nó được vẽ log-log. Như vậy, có vẻ như bạn có nhiễu dải tần rộng từ khoảng 1,5 kHz đến 22,5 kHz, với âm tần hẹp ở khoảng 2 kHz. Những gì tôi đoán là tín hiệu "giọng nói", cùng với tín hiệu bù DC đáng kể, nằm trong một "lỗ" khá yên tĩnh. Thật khó để tách biệt với bộ lọc thông dải phù hợp.
Dave Tweed

Câu trả lời:


1

Một vài điểm:

  1. Lọc trong miền tần số rất phức tạp và cần một thuật toán thực tế như thêm chồng chéo để tránh hiện tượng răng cưa thời gian. Việc lọc trực tiếp trong miền thời gian dễ dàng hơn nhiều: [b, a] = butter (1.100 / (SampleRate / 2); y_filtered = filter (b, a, y); tốt hơn nhiều
  2. Bạn có thể muốn đặt bộ lọc notch vào tần số drone
  3. Đối với nhiễu tĩnh cố định băng rộng, một phương pháp tốt là lọc Wiener hoặc trừ phổ. Nhiều bài báo đã được công bố về điều này.

0

Bạn đề cập đến việc sử dụng bộ lọc thông thấp, nhưng như một trong những người bình luận đã đề cập, có lẽ bạn sẽ làm tốt hơn với bộ lọc thông dải để lọc nhiễu tần số thấp. Ngoài ra còn có các bộ lọc giảm tiếng ồn trong các thư viện của bên thứ ba nếu bạn quan tâm đến các giải pháp có sẵn.


0

Giọng nói của con người có một số đặc thù có thể giúp ích. Đối với một, giọng nữ bắt đầu ở khoảng 200Hz, nam thấp hơn, do đó, thực hiện bộ lọc thông cao ở đây sẽ giúp một chút. Xem thêm âm thanh-tính năng-phân biệt-nam-nam-nữ .

Ngoài ra, xác định tần số drone thông qua biểu đồ.

Làm tất cả điều này trong mã là một chút rườm rà. Bạn đã xem xét một số chương trình âm thanh như Audacity ?

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.