2010-08-19 33 views
6

Tôi đang tìm kiếm một mã đơn giản (giả) mà phổ ngược tín hiệu âm thanh lấy mẫu. Lý tưởng nhất là C++Làm thế nào để Spectrum-nghịch đảo một tín hiệu âm thanh lấy mẫu

Mã nên hỗ trợ các mức mẫu khác nhau (16/32/48KHz).

+1

"Phổ ngược" là gì? Điều thú vị là, google tiết lộ câu hỏi của bạn ở đây là hit đầu tiên. Bạn muốn nghịch đảo của pha và biên độ cho mỗi tần số? Hay bạn đơn giản chỉ muốn một IFFT? Hoặc một cái gì đó hoàn toàn khác nhau? – zerm

+0

Xin lỗi vì từ vựng không chuyên nghiệp của tôi: Tôi muốn các tần số thấp trở thành tần số cao và ngược lại (DC offset sẽ trở thành sin với một nửa tần số lấy mẫu). –

+1

Bây giờ tôi rất tò mò muốn nghe những gì điều này sẽ giống như ... – PeterAllenWebb

Trả lời

6

Trộn tín hiệu bằng Fs/2 sẽ hoán đổi tần số cao và tần số thấp - nghĩ đến việc xoay phổ xung quanh vòng tròn đơn vị bằng nửa vòng. Bạn có thể đạt được điều này bằng cách nhân các mẫu khác với -1.

Trộn bằng Fs/2 tương đương với việc trộn theo exp(j*pi*n). Nếu x là đầu vào và y đầu ra,

y[n] = x[n] * exp(j*pi*n) = x[n] * [cos(pi*n) + j*sin(pi*n)] 

này đơn giản hóa một cách dễ dàng vì sin(pi*n) là 0, và cos(pi*n) được xen kẽ 1, -1.

+0

Vì vậy, đơn giản ... Unbelievable –

+2

Bí quyết này đi lên rất nhiều trong DSP. Ví dụ, nếu bạn muốn thiết kế một bộ lọc thông cao, nó thường dễ dàng hơn để thiết kế một bộ lọc thông thấp với tỷ lệ cắt giảm mong muốn, sau đó xoay nó quanh vòng tròn đơn vị để làm cho nó vượt qua cao. – mtrw

1

Để có được cái gì đó có cùng một loại cấu trúc thời gian như bản gốc, bạn cần phải

  • Tạo ảnh phổ (với một số kích thước cửa sổ)
  • Chọn một số giới hạn tần số trên và dưới đó bạn sẽ lật
  • lật cường độ của spectogram trong những giới hạn
  • Resynthesize một tín hiệu âm thanh phù hợp với những tần số

Vì đây là tín hiệu âm thanh nên việc chuyển pha sẽ bị hỏng hoàn toàn. Tuy nhiên, bạn thường không thể nghe thấy chúng. Ngoại trừ phần lật, ARSS thực hiện quá trình tạo phổ và tái tạo âm thanh.

Nếu không, bạn chỉ có thể lấy FFT, đảo ngược biên độ của các thành phần và lấy FFT nghịch đảo. Nhưng điều đó về cơ bản sẽ vô nghĩa, vì nó sẽ hoàn toàn tranh giành cấu trúc thời gian của âm thanh cũng như cấu trúc tần số.

+0

Cảm ơn bạn, ARSS sử dụng ngân hàng lọc tần số, vì vậy tất cả những gì tôi có thể làm là đảo ngược các thùng tần số.Tôi tự hỏi nếu có một số thao tác toán học đảo ngược tần số 'trơn tru' (không chia nó thành các thùng). –

+0

Bạn có thể sử dụng các wavelet không rõ ràng được binned, nhưng trong trường hợp của bạn mà hầu như không quan trọng. Âm thanh tần số thấp thay đổi chậm hơn nhiều so với tần số cao, do đó, lật sẽ thay đổi độ mượt mà. –

0

không có ý nghĩa gì khi sử dụng cosin. cho một tín hiệu kỹ thuật số nó không phải là cần thiết để chạy một ringmod thực sự ở đây, tại nyquist một consine là một hình vuông anyway.

vì vậy bạn chỉ cần nhân mỗi mẫu khác với * -1 và bạn đã hoàn tất.

không có độ trễ, không có bí danh, không có gì.

+0

Đây là câu trả lời được chấp nhận. –

Các vấn đề liên quan