سؤال

لدي سؤال بخصوص استخدام FFT. باستخدام وظيفة getBand(int i) مع الحد الأدنى يمكنني استخراج سعة تردد محدد والقيام بخرائط جميلة منه. يعمل بشكل رائع.

ومع ذلك ، هذا هو أكثر من سؤال الفضول. عندما أنظر إلى القيم المستخرجة من تشغيل نفس الأغنية اثنين مرتين باستخدام نفس التردد (لذلك يجب أن تكون السعة متطابقة) ولكن أحصل على قيم مختلفة للغاية - لماذا هذا؟

0.0,0.0,0.0,0.0,0.0,0.08706585,0.23708777,0.83046436,0.74603105,0.30447206
0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.08706585,0.4790409,0.9608221,0.83046436,0.74603105
هل كانت مفيدة؟

المحلول

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

نصائح أخرى

يمكن أن يكون فك تشفير MP3 قشاريًا و/أو يمكن أن يكون التخزين المؤقت لروتين FFT مفعم بالحيوية ، (طول الصمت مختلفًا يسبق السلسلة). في هذه الحالة ، يبدو أن الرصاص في حوالي خطوتين أكبر في الإخراج الثاني.

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

يجب أن يكون الموقف أكثر وضوحًا إذا تمكنت من زيادة "دقة الوقت" (كمية FFTs التي يتم إجراؤها لكل وقت معين) -أو زيادة حجم نافذة FFT ، وبالتالي فإن قياسات FFT لا تتم بشكل متقطع. من الواضح أنه ينبغي عليهم التداخل قبل أن نتوقع أن نطابق نمطًا بين عمليات الفحص التي تم إجراؤها خارج الخطوة.

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