سؤال

كتبت بعض خوارزميات معالجة الصوت البسيطة في MATLAB التي سأتأتخدمها لتطبيق Android. أواجه بعض المتاعب ترجمة تنفيذ FFT إلى Java.

أحاول استخدام إصدار Java من fftpack ، والتي يقال إنها فعالة، ولكن أيضا من الخفف قليلا بالنسبة لي، ربما لأن بلدي عدم وجود فهم قوي على FFT بشكل عام.

لدي ببساطة صفيفا مزدوجا وأريد إنتاج مجموعة مرتفعة من الأرقام المعقدة التي تمثل FFT. الحساب الوحيد الذي سأفعله على FFT هو أخذ القيمة المطلقة لعناصرها.

من أجل الوضوح، إليك رمز MATLAB الأساسي الذي أود النسخ المتماثل باستخدام Java FFTPACK:

giveacodicetagpre.

أتوقع أن هذا بسيط إلى حد ما، لكن لا يمكنني تحديد نقاط الدخول إلى FFTPACK.


حلها:

الإجابة أدناه من Lutzl Works، ولكن إنشاء كائن Complex1D هو في الواقع غير ضروري لأن FFTPACK يدعم صفيف مزدوج كمدخل:

giveacodicetagpre.

هل كانت مفيدة؟

المحلول

القراءة من SourceForge JFFPACK مستودع

قمت بتهيئة كائن FFT جديد عبر

giveacodicetagpre.

ثم تستخدم التحويل الأمامي لكائن FFT مع

giveacodicetagpre.

ويمكن بعد ذلك الوصول إلى القيم المطلقة مثل

giveacodicetagpre.

قام بتقسيمها بشكل اختياريا بواسطة GuidacodicetAchcode لتطبيع FFFT.

إضافة تصريحات متغيرة مناسبة.


تنطبق الاتفاقيات المعتادة، إذا تم أخذ عينات إشارة مع تردد أخذ العينات FS، فإن الإدخال X. (XY) [K] يمثل مكون التردد في K * FS / N for K= N / 2 إلى N-1. < / ص>


قد ترغب في البحث عن تطبيق FFT مختلف، بشكل أفضل يتم دعمه في جافا النقي، وليس ذلك معقدا لتنفيذ FFT للأطوال الضوئية. المضاعفات الوحيدة تأتي عند تنفيذ التحول في مكانه للحصول على عامل تسريع آخر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top