Làm cách nào để tạo một tần số so với âm mưu thời gian?


9

Tôi là một kỹ sư hóa học, không phải là EE, nên điều này hơi khó khăn.

Tôi đang cố gắng tìm ra cách lấy biên độ và dữ liệu thời gian và biến nó thành tần số theo thời gian. Bản năng đầu tiên của tôi là cắt dữ liệu của mình thành các khối, thực hiện FFT trên mỗi khối và sau đó vẽ biểu đồ đó. Thật không may, vì thời lượng của mỗi lát cắt gần bằng 0, không còn đủ thông tin để có được thông tin tần số chính xác (tần số thấp yêu cầu nhiều hơn một lát thời gian rất nhỏ). Vậy ... làm thế nào để tôi làm điều này? Tôi chắc chắn đây là một số vấn đề nổi tiếng mà ai đó đã giải quyết.

Đây là loại biến đổi mà tôi đang tìm kiếm, được minh họa bằng một sóng âm thanh (piano note G). Như bạn có thể thấy, biểu đồ này là ba trục, với trục thứ ba được thể hiện bằng màu sắc.

Cảm ơn!

nhập mô tả hình ảnh ở đây

Câu trả lời:


5

Độ phân giải thời gian và tần số là một vấn đề nổi tiếng và thực sự có những cách tiếp cận để khắc phục nó. Đối với tín hiệu âm thanh, một số kỹ thuật thường được sử dụng bao gồm: phương pháp tham số; độ phân giải thích ứng (phân tích với các cấu hình thời gian / tần số khác nhau và vá các kết quả lại với nhau - Wen X. và M. Sandler, "Phổ đồ tổng hợp sử dụng nhiều biến đổi Fourier"); wavelet / phân hủy trên cơ sở quá đầy đủ; và sử dụng thông tin pha để trích xuất vị trí chính xác của các tần số đỉnh (IFgram).

Tuy nhiên, có vẻ như biểu đồ bạn đã hiển thị không sử dụng một số kỹ thuật này; Vì vậy, tôi nghi ngờ đây không phải là những gì bạn có thể đang tìm kiếm. Dường như có một số "bôi nhọ" trên trục hoành (ví dụ tại t = 1,2s) và đây là một dấu hiệu chắc chắn rằng phân tích đã được thực hiện với sự chồng chéo cao giữa các khối.

Thật vậy, thời lượng chunk và số khung phân tích mỗi giây không phải liên kết với nhau nếu bạn cho phép các khung trùng nhau. Vì vậy, nếu bạn muốn sử dụng khung phân tích dài 40ms, lưới của bạn không phải là:

khung 1: t = 0..t = 40ms; khung 2: t = 40ms..t = 80ms

Nó rất có thể là:

khung 1: t = 0..t = 40ms; khung 2: t = 10ms..t = 50ms

Sự chồng chéo này có thể tạo ảo giác về độ phân giải thời gian cao hơn mà không làm giảm quá nhiều kích thước cửa sổ FFT. Lưu ý rằng điều này chỉ có thể giúp định vị chính xác một sự kiện trên trục thời gian - nó sẽ không giúp giải quyết kịp thời hai sự kiện ... Giống như việc tăng kích thước FFT có thể giúp xác định vị trí của tần số cực đại, nhưng không phải với độ phân giải của hai đỉnh tần số liền kề.


Làm thế nào bạn sẽ đi theo con đường khác (chuyển đổi từ phổ tần sang tín hiệu âm thanh)
pete

4

Vâng, nhiều người đã làm việc về phân tích tần số thời gian.

Cách tiếp cận "cắt dữ liệu của tôi thành các khối, thực hiện FFT trên mỗi khối" là một ý tưởng hay. Áp dụng "chức năng cửa sổ" trên mỗi khối, ngay trước khi thực hiện FFT, giúp tránh nhiều hiện vật. Cho phép chunk để chồng chéo cũng giúp. Sau những điều chỉnh đó, bạn kết thúc với biến đổi Gabor , dường như là biến đổi Fourier thời gian ngắn phổ biến nhất (STFT).

Như bạn đã chỉ ra, và như bài viết trên Wikipedia chỉ ra, tất cả các kỹ thuật biến đổi Fourier trong thời gian ngắn đều có sự đánh đổi:

  • khi bạn cắt chuỗi thời gian thành các đoạn rất ngắn, bạn sẽ có được thông tin thời gian chính xác cao như chính xác khi âm bắt đầu và dừng, nhưng thông tin tần số rất mờ.
  • Khi bạn cắt chuỗi thời gian thành các đoạn rất dài, bạn sẽ có được thông tin tần số chính xác cao về tần số chính xác của âm, nhưng thời gian chính xác nó bắt đầu và dừng lại bị mờ.

Đây là một vấn đề nổi tiếng, nhưng than ôi, không chỉ chưa được giải quyết, nó đã được chứng minh rằng sự không chắc chắn giữa hai điều này là không thể tránh khỏi - giới hạn Gabor, giới hạn Gabis của Heisenberg, nguyên tắc không chắc chắn , v.v.

Nếu tôi là bạn, tôi sẽ bắt đầu với một trong nhiều thư viện sẵn có để tính toán biến đổi Gabor và thử nghiệm cắt chuỗi thời gian thành nhiều độ dài khác nhau. Có một cơ hội khá tốt, bạn sẽ gặp may mắn và cuối cùng bạn sẽ có một khoảng thời gian phù hợp với việc bản địa hóa thời gian thích hợp và phân biệt tần số đầy đủ .

Nếu điều đó không hiệu quả với ứng dụng này, thì tôi sẽ chuyển sang các cách tiếp cận khác để biểu diễn tần số thời gianphân tích tần số thời gian - biến đổi wavelet, biến đổi chirplet , biến đổi Fourier phân đoạn (FRFT), v.v.

EDIT: Một số mã nguồn để tạo sơ đồ phổ / biểu đồ thác nước từ dữ liệu âm thanh:

Image to Spectrogram đi theo hướng ngược lại với các tiện ích trên.


Biến đổi Gabor chỉ với các cửa sổ Gaussian. Nếu bạn sử dụng một cửa sổ khác, nó chỉ là một STFT. (Và các cửa sổ Gaussian thực sự không tồn tại trong kỹ thuật số vì chúng giảm dần đến vô cùng.)
endolith

@endolith: Bạn nói đúng. Biến đổi Gabor sử dụng "hàm cửa sổ Gaussian" được cắt ngắn theo chiều dài hữu hạn - nó khá gần, nhưng không giống với toán học, một Gaussian lý tưởng.
David Cary

Tôi nghĩ rằng biến đổi Gabor là một biến đổi liên tục, sử dụng một tích phân, vì vậy nó có thể có một Gaussian không bị cắt cụt như cửa sổ?
endolith

@endolith: Có, về nguyên tắc, một người có thể sử dụng Gaussian không cắt ngắn làm cửa sổ. Trong thực tế, vì thực tế tất cả năng lượng của Gaussian nằm trong một vài sigma của bướu trung tâm, sử dụng một cửa sổ cắt ngắn thực tế luôn làm cho không có sự khác biệt rõ ràng trong biểu đồ đầu ra. Do phần mềm tạo ra các biểu đồ thác nước phổ liên tục áp dụng cửa sổ Gaussian và sau đó thực hiện FFT cho mỗi cột của biểu đồ, "không cắt bớt" sẽ khiến phần mềm đó chậm một cách khó chịu.
David Cary
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.