Tạo một quang phổ


10

Tôi đã cố gắng tìm ra logic cho nhiệm vụ này và lên kế hoạch sử dụng gói nguồn KissFFT để thực hiện chuyển đổi phạm vi nhanh. Xin vui lòng cho tôi biết nếu điều này có vẻ đúng:

  1. Phân bổ một cấu trúc FFT, tức là. kiss_fft_alloc(N,0,NULL,NULL) Trong trường hợp Nlà kích thước cửa sổ Tôi đang sử dụng. Bộ đệm đầu vào sẽ là một mảng các Nphần tử của loại kiss_fft_scalar. Bộ đệm đầu ra sẽ là một mảng các N/2 + 1phần tử của loại kiss_fft_cpx.
  2. Giải mã N(kích thước cửa sổ) số lượng mẫu PCM.
  3. Đối với mỗi mẫu PCM, trung bình biên độ của mỗi kênh (các mẫu không dấu) và tỷ lệ từ 0 đến 2 (chia cho 65536.0), lưu kết quả vào bộ đệm đầu vào.
  4. Thực hiện cửa sổ (tức là Hanning) trên bộ đệm đầu vào.
  5. Thực hiện chuyển đổi Fourier nhanh trên bộ đệm đầu vào, lưu trữ vào bộ đệm đầu ra. Vì tôi đang sử dụng các giá trị thực làm đầu vào, tôi có thể sử dụng kiss_fftr().
  6. Đối với các N/2giá trị đầu ra, lấy độ lớn bình phương của dữ liệu được chuyển đổi và chuyển đổi các giá trị thành thang đo dB theo công thức sau: 10 * log10 (re * re + im * im)
  7. Vẽ các N/2giá trị từ bước 6.
  8. Hủy bỏ nửa đầu của bộ đệm đầu vào, giải mã các mẫu PCM tiếp theo (kích thước cửa sổ / 2) và thực hiện chia tỷ lệ và cửa sổ cho dữ liệu. Điều này sẽ trượt hiệu quả cửa sổ nhập và tránh phải làm lại toán trên các mẫu PCM đã xử lý.
  9. Lặp lại bước 5, lặp lại các bước này cho đến khi tất cả các mẫu được xử lý.
  10. Giải phóng bộ nhớ đã sử dụng từ kiss_fft_alloc().

Có ý kiến ​​cho rằng tôi trừ một giá trị khỏi cửa sổ nhập trước khi tôi thực hiện FFT, để giá trị DC kết quả có độ lớn bằng không. Tôi nên trừ trung bình hoặc trung bình từ dữ liệu đầu vào?

Ngoài ra, những điều tôi cần xem xét khi tôi chọn kích thước cửa sổ là gì? Bên cạnh đó, nó phải là một số chẵn theo hướng dẫn của KissFFT, có lợi ích gì khi sử dụng kích thước cửa sổ nhỏ, tức là. nó sẽ cung cấp cho một đồ thị tốt hơn? Tôi giả định rằng kích thước cửa sổ lớn làm giảm số lượng FFT phải được thực hiện, đó có phải là lợi ích duy nhất để sử dụng kích thước cửa sổ lớn?

Cuối cùng, khi tôi đến điểm mà dữ liệu đã sẵn sàng để vẽ, làm thế nào để tôi đi về âm mưu? Khi tôi làm việc với một số logic đồ thị dạng sóng trong quá khứ, tôi chỉ vẽ 3 giá trị cho mỗi pixel dọc theo -axis (biên độ cực tiểu, biên độ cực đại, biên độ RMS), nhưng tôi không biết tôi phải làm gì với dữ liệu phổ.x

Cảm ơn bạn trước cho bất kỳ và tất cả các hướng dẫn bạn có thể cung cấp.

Câu trả lời:


8

Nhìn có vẻ khá tốt đối với tôi. Tuy nhiên, trong bước 3, bạn thực sự muốn chia tỷ lệ tín hiệu từ -1 thành 1, nếu không, bạn đang thêm DC. Bạn đã đề cập đến việc trừ đi giá trị trung bình - Tôi không khuyên bạn nên làm điều này cho một quang phổ, vì đó là cách lọc DC hiệu quả, mà biểu đồ phổ phải hiển thị nếu nó ở đó.

Chọn kích thước cửa sổ là tất cả về sự đánh đổi. Một cửa sổ lớn hơn sẽ cung cấp cho bạn độ phân giải tần số sắc nét hơn, nhưng độ phân giải thời gian mờ hơn. Một cửa sổ ngắn hơn sẽ cho bạn điều ngược lại: độ phân giải thời gian sắc nét hơn nhưng độ phân giải tần số mờ hơn. Sự lựa chọn kích thước cửa sổ phù hợp sẽ phụ thuộc vào dữ liệu bạn đang cố gắng phân tích. Thông thường, nó sẽ có sức mạnh bằng 2 chỉ vì các FFT có xu hướng thích sức mạnh của 2. Một nguyên tắc nhỏ là cửa sổ của bạn phải dài gấp đôi khoảng thời gian tần số thấp nhất bạn muốn có thể chính xác giải quyết.

Bạn có thể tự hỏi liệu có thể đối phó tốt hơn với sự đánh đổi này hay không, và có những kỹ thuật cho việc đó: chúng thường liên quan đến việc tính toán phổ với nhiều kích thước FFT khác nhau cùng một lúc và kết hợp chúng. Có một số thông tin hình ảnh tốt trên trang web này: http://www.izotope.com/tech/aes_adapt/

Nếu kích thước cửa sổ của bạn quá nhỏ, hai tần số rất gần nhau có thể không thể phân biệt được với nhau vì cả hai đều nằm trong cùng một thùng FFT. Nếu kích thước cửa sổ của bạn quá lớn, hai sự kiện gần đúng lúc, có thể được kết hợp hoặc thoáng qua có thể biến thành một cuộc tấn công dần dần. Kiểm tra trang web mà tôi đã đăng cho một số cách để hình dung điều này.

Kích thước cửa sổ lớn hơn không nhất thiết phải giảm số lượng FFT. Bạn đã chọn tính toán phổ bằng cách sử dụng biến đổi Fourier thời gian ngắn trong đó có sự chồng lấp của một nửa kích thước FFT. Bạn có thể sử dụng hệ số trùng lặp cao hơn nếu bạn muốn. Chọn kích thước cửa sổ là vấn đề tạo ra sự đánh đổi thời gian / tần số nhiều hơn nhiều so với số lượng FFT bạn phải tính toán. Khi thiết kế một phổ (hoặc bất kỳ STFT nào), bạn có thể nghĩ đến việc chọn kích thước cửa sổ và kích thước hop , khoảng cách giữa các khối, làm tham số độc lập.

Khi bạn vẽ đồ thị, thời gian thường ở trục x, tần số nằm trên trục y (thường là thang đo log, thang Mel, v.v., chứ không phải thang đo tuyến tính), và sau đó cường độ được biểu thị bằng cường độ màu, nghĩa là màu rất tối tương ứng với cường độ nhỏ và màu rất sáng tương ứng với cường độ lớn.


Liên kết của bạn dường như đã chết. Bạn có thể cập nhật nó?
Daniel Wolf
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.