تقنية

irfft: هل يعيد الطول الفردي تلقائيًا؟

الطول المحفوظ مع العكسين.
القيم المقربة للعرض.

يفترض irfft طولًا زوجيًا دون n. [1] نقارن عكس طيف خمس قيم بالطول الافتراضي والطول المحفوظ.

ثلاث خانات لا تحفظ اختيار الطول

يعيد rfft للمدخل الحقيقي الجزء غير السالب من الطيف، بطول floor(N/2)+1 لعدد N من القيم. [2]

أما irfft دون n فيختار طولًا قدره 2(m−1)، حيث m عدد خانات الطيف المدخل. [1]

جرب العد وحده: عند N=4 نجد floor(4/2)+1=3. وعند N=5 نجد floor(5/2)+1=3 أيضًا. لذلك لا يكفي عدد الخانات الثلاث للتمييز بين هذين الطولين. هذه مقارنة عدّية؛ لم نقل إن طيفي كل متتاليتين يتساويان.

نختار x=[2,−1,4,0,3]، بفهرسة من صفر، وقيم بلا وحدة فيزيائية. نحفظ طولها، وهو خمس قيم، بجانب الطيف بدل محاولة استنتاجه من طول الطيف لاحقًا. لم نحدد معدل أخذ عينات ولا محورًا بالهرتز.

باستخدام NumPy 2.3.5 ومدخل float64، أعاد rfft ثلاث قيم complex128: S[0]=8، وS[1]≈−0.618034+1.453085i، وS[2]≈1.618034+6.155367i. هذه معاملات المثال الذي شغلناه؛ i هي الوحدة التخيلية.

الأعداد المقربة هنا للقراءة. ملف الحساب يحفظ الأجزاء الحقيقية والتخيلية كاملة بالدقة التي أعادها التشغيل. لا نعكس الأعداد المقطوعة في النص ثم نطالبها بمطابقة اختبار استخدم القيم المحفوظة.

العكس الافتراضي غيّر القيم أيضًا

مررنا S نفسه إلى np.fft.irfft(S)، ثم إلى np.fft.irfft(S,n=5). أعاد الأول شكلًا (4,)، والثاني شكلًا (5,). لم نعد حساب الطيف بين الاستدعاءين.

الناتج الافتراضي كان [2.0954915028125263,0.8689489748071655,2.713525491562421,2.3220340308178873]. قيمته الأولى وحدها تختلف عن 2؛ إذن وصفه بأنه الأصل بعد حذف القيمة الأخيرة غير صحيح في هذا المثال.

مع الطول المعلن كانت النتيجة [2.0,−0.9999999999999997,4.0,3.552713678800501×10⁻¹⁶,3.0]. الموضع الرابع يقترب من الصفر، لكنه ليس صفرًا مطابقًا على مستوى التمثيل الثنائي. المقارنة المستخدمة سماحية مطلقة 10⁻¹².

كتبنا n=len(x) في المسار الذي بقي فيه المدخل متاحًا. إذا حفظنا S في ملف مستقل، فإن حفظ العدد 5 معه يتيح الاستدعاء نفسه لاحقًا. هذا ترتيب بيانات نقترحه للمثال، وليس ادعاء بأن الطيف يحمل ذلك العدد داخله.

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

الخانة الأخيرة يتغير معناها

عند الطول الزوجي تكون الخانة الأخيرة في rfft معامل نايكويست الحقيقي؛ عند الطول الفردي يمكن أن تكون مركبة. [2]

يعتمد تفسير irfft للطرف الأخير على n؛ افتراض الطول الزوجي يعامله طرفًا حقيقيًا. [1]

في S المختار، الجزء التخيلي الأخير نحو 6.155367، وهو ليس صفرًا صغيرًا من التقريب. عند بناء عكس الأربع نقاط، قرأنا الطرف الأخير كقيمة حقيقية، وأكملنا الزوج المرافق للخانة الداخلية. وعند بناء عكس الخمس، حافظنا على الخانة المركبة الأخيرة وأضفنا مرافقها في الطرف السالب.

للتحقق استخدمنا تعريف التحويل الأمامي بمؤشر أس سالب بلا قسمة، والعكسي بمؤشر أس موجب وقسمة على N؛ هذه اتفاقية التطبيع الافتراضية هنا. [3]

حسابنا المرجعي مكتوب في Python من المدخل الأصلي: جمع مباشر لتعريف التحويل الكامل، ثم إكمال المرافق بالطول المختار، ثم جمع مباشر للعكس. لم نستعمل خرج FFT الفعلي بوصفه النتيجة المنتظرة.

في عكس الخمس تتزاوج الخانتان 1 و4، والخانتان 2 و3. في عكس الأربع يتزاوج 1 و3، وتبقى الخانة 2 طرفًا منفردًا حقيقيًا. وصفنا هذين البناءين تحديدًا؛ لم نجرّب إعادة أخذ عينات أو حشوًا أو خيارات تطبيع أخرى.

الطرف في الطولين والتحكم.
اختلاف تفسير الخانة الأخيرة.

تحكم زوجي وحدود التحقق

للمقارنة اخترنا المدخل الزوجي [2,−1,4,3] بطول أربع قيم. طيفه المختصر [8,−2+4i,4]، والخانة الأخيرة حقيقية فعلًا. أعاد كل من العكس الافتراضي والعكس مع n=4 القائمة [2,−1,4,3] في التشغيل المحفوظ.

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

شمل التحقق 245 حالة: المثال الفردي، وجميع المتتاليات الخمسية من المجموعة {−2,0,3} وعددها 243، وتحكمًا زوجيًا واحدًا. نفذنا ثلاثة استدعاءات FFT لكل حالة: rfft ثم عكسًا افتراضيًا ثم عكسًا بالطول الأصلي؛ المجموع 735.

حفظت النتائج 2939 عنصر مصفوفة: 735 عنصرًا مركبًا للطيف، و2204 عناصر حقيقية للعكسين. العنصر المركب يعد واحدًا، حتى حين نسجل جزأيه في JSON. إنشاء 245 مصفوفة مدخل مستقلة خارج عدد استدعاءات FFT.

أكبر فرق عن المرجع المباشر كان نحو 2.66×10⁻¹⁵، أقل من السماحية المختارة 10⁻¹². تحققنا أيضًا من بقاء بايتات المدخل والطيف دون تغيير بعد الاستدعاءات. استعمل كل زوج من العكسين الطيف نفسه داخل حالته.

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

المدخل المختارالطول الأصليعدد خانات Sالعكس الافتراضيالعكس بالطول الأصلي
[2,−1,4,0,3]534 قيم مختلفة5 قيم ضمن السماحية
[2,−1,4,3]43[2,−1,4,3][2,−1,4,3]

للتوسع: ميزات فورييه العشوائية.

المراجع

  1. NumPy irfft
  2. NumPy rfft
  3. NumPy DFT

أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.