Tôi cần một số trợ giúp để hiểu đầu ra của tính toán DFT/FFT.Hiểu đầu ra FFT
Tôi là kỹ sư phần mềm có kinh nghiệm và cần giải thích một số chỉ số gia tốc trên điện thoại thông minh, chẳng hạn như tìm tần số chính. Thật không may, tôi đã ngủ qua hầu hết các lớp học đại học EE của tôi mười lăm năm trước, nhưng tôi đã đọc lên trên DFT và FFT trong vài ngày qua (ít có ích).
Vui lòng không trả lời "đi tham gia lớp học EE". Tôi đang thực sự lên kế hoạch để làm điều đó nếu chủ nhân của tôi sẽ trả tiền cho tôi. :)
Vì vậy, đây là vấn đề của tôi:
Tôi đã ghi lại tín hiệu ở 32 Hz. Đây là một mẫu thứ hai của 32 điểm, mà tôi đã xếp hạng trong Excel.
sau đó tôi có một số FFT code viết bằng Java từ Đại học Columbia (sau khi làm theo những gợi ý trong một bài đăng trên "Reliable and fast FFT in Java").
Kết quả của chương trình này như sau. Tôi tin rằng nó đang chạy một FFT tại chỗ, vì vậy nó tái sử dụng cùng một bộ đệm cho cả đầu vào và đầu ra.
Before:
Re: [0.887 1.645 2.005 1.069 1.069 0.69 1.046 1.847 0.808 0.617 0.792 1.384 1.782 0.925 0.751 0.858 0.915 1.006 0.985 0.97 1.075 1.183 1.408 1.575 1.556 1.282 1.06 1.061 1.283 1.701 1.101 0.702 ]
Im: [0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ]
After:
Re: [37.054 1.774 -1.075 1.451 -0.653 -0.253 -1.686 -3.602 0.226 0.374 -0.194 -0.312 -1.432 0.429 0.709 -0.085 0.0090 -0.085 0.709 0.429 -1.432 -0.312 -0.194 0.374 0.226 -3.602 -1.686 -0.253 -0.653 1.451 -1.075 1.774 ]
Im: [0.0 1.474 -0.238 -2.026 -0.22 -0.24 -5.009 -1.398 0.416 -1.251 -0.708 -0.713 0.851 1.882 0.379 0.021 0.0 -0.021 -0.379 -1.882 -0.851 0.713 0.708 1.251 -0.416 1.398 5.009 0.24 0.22 2.026 0.238 -1.474 ]
Vì vậy, tại thời điểm này, tôi không thể tạo đầu hoặc đuôi của đầu ra. Tôi hiểu các khái niệm DFT, chẳng hạn như phần thực là biên độ của sóng cosin thành phần và phần ảo là biên độ của sóng sin thành phần. Tôi cũng có thể làm theo sơ đồ này từ cuốn sách tuyệt vời "The Scientist and Engineer's Guide to Digital Signal Processing":
Vì vậy, câu hỏi cụ thể của tôi là:
Từ đầu ra của FFT, làm thế nào để tìm ra 'hầu hết các tần số xảy ra' ? Đây là một phần trong phân tích dữ liệu gia tốc kế của tôi. Tôi có nên đọc các mảng thực (cosin) hoặc ảo (sin) không?
Tôi có đầu vào 32 điểm trong miền thời gian. Không nên đầu ra của FFT là một mảng 16 phần tử cho thực và một mảng 16 phần tử cho tưởng tượng? Tại sao chương trình cho tôi kết quả đầu ra mảng thực và tưởng tượng cả hai kích thước 32?
Liên quan đến câu hỏi trước, làm cách nào để phân tích cú pháp các chỉ mục trong mảng đầu ra? Với đầu vào của tôi 32 mẫu được lấy mẫu ở 32 Hz, sự hiểu biết của tôi là đầu ra mảng 16 phần tử nên có chỉ số của nó thống nhất lên tới 1/2 tốc độ lấy mẫu (32 Hz), vì vậy tôi hiểu chính xác từng phần tử của mảng đại diện (32 Hz * 1/2)/16 = 1 Hz?
Tại sao đầu ra FFT có giá trị âm? Tôi nghĩ rằng các giá trị đại diện cho biên độ của một xoang. Ví dụ, đầu ra của Real [3] = -1.075 nên có nghĩa là biên độ -1.075 cho một làn sóng cosin của tần số 3. Có đúng không? Biên độ có thể âm tính như thế nào?
Bạn muốn tính toán gì từ các chỉ số gia tốc: vận tốc, khoảng cách? Tiếng ồn của các bài đọc gia tốc theo sau sự phân bố Gaussian và tôi không thể thấy sự phù hợp của sóng sin sẽ khắc phục điều đó như thế nào. – Ali
Thẻ java nên được loại bỏ vì nó chung chung hơn một ngôn ngữ cụ thể – user3791372