تقنية

fftfreq: هل d هو معدل أخذ العينات؟

المعدل والفاصل.
أعداد المثال المحفوظة.

يمثل d الفاصل بين العينات، وهو مقلوب معدلها. [1] نقارن فاصلًا محسوبًا بتمرير رقم المعدل نفسه.

حوّل المعدل إلى فاصل

تعيد fftfreq مراكز خانات التردد، وتكون وحدتها دورات لكل وحدة الفاصل. إذا كتبناه بالثواني، نحصل على دورات/ثانية. [1] العدد المدخل وحده لا يحمل بطاقة وحدة.

نعلن معدلًا تعليميًا R=8 عينات/ثانية. لأخذ منتظم تكون المسافة الزمنية بين القراءتين 1/8 ثانية، أي 0.125. نثبت ثماني خانات n=8، ولا نستخدم جهازًا أو ملف صوت.

الأوقات التي يمكن أن نختارها لهذا النموذج هي 0 و0.125 و0.250 ثم كل 0.125 ثانية. لا نمرر هذه القائمة إلى الدالة في الفحص؛ نمرر عدد الخانات والفاصل فقط.

شغلنا np.fft.fftfreq(8,d=0.125) على NumPy 2.3.5. أعاد [0,1,2,3,−4,−3,−2,−1] بنوع float64 وشكل (8,). هذه عناوين خانات، وليست سعات أو قيم عينات.

لا تقول القائمة إن إشارة مقاسة تحتوي ترددًا قدره 3 هرتز. لم نعط الدالة إشارة أصلًا، ولم نحسب مقدار تحويل. الذي تحققنا منه هنا هو ربط المعلمات بالأرقام التي تعيدها.

افحص أثر إدخال رقم المعدل

في المصدر البرمجي للإصدار 2.3.5، يكوّن التنفيذ فهارس صحيحة موجبة وسالبة، ثم يضربها في 1/(n×d). لا يستنتج الفاصل من رقم معدل منفصل. [3]

في مثال الثماني، الفهارس الموقعة هي [0,1,2,3,−4,−3,−2,−1]. بالفاصل 1/8 نحصل على n×d=8×1/8=1؛ لذلك يبقى كل فهرس رقمه نفسه بعد القسمة.

إذا مررنا d=8 بدلًا من 1/8، يصبح المقام 64. أعاد التشغيل [0,0.015625,0.03125,0.046875,−0.0625,−0.046875,−0.03125,−0.015625]. لم يحدث خطأ إدخال يمنع هذا الاستدعاء في النطاق المفحوص.

مثلًا الخانة عند الفهرس 1 كانت 1 في المسار الأول و1/64 في الثاني. الخانة عند الفهرس 4 كانت −4 ثم −1/16. وجود الطول نفسه وبداية صفرية لا يكشف أن الفاصل المدخل لا يصف توقيتنا المعلن.

إذا نسبنا d إلى ثوانٍ، فإن 8 تعني هنا ثماني ثوانٍ بين العينات، لا ثماني عينات في الثانية. نسبة الفاصلين 8/(1/8)=64؛ لذلك تكون شبكة الحالة الثانية أصغر عدديًا بهذا العامل. هذا تفسير لوحدة اخترناها صراحة.

احتفظ بالمعدل والفاصل ووحدة الزمن بأسماء منفصلة في بيانات المثال. كتابة المتغير fs ثم تمريره إلى d لا تغير ما تقرأه الدالة من المعلمة؛ الاسم الذي اخترناه خارجها ليس تحويل وحدات.

ميّز ترتيب الخانات عن القياس

ترتيب FFT المعتاد يبدأ بالصفر ثم الجزء الموجب، ويتبعه الجزء السالب؛ الطرف في الطول الزوجي يختلف عن الفردي. [2] نراجع الأعداد الفعلية بدل ترتيبها تصاعديًا ثم نسيان فهارسها.

عند n=5 وR=8، يبقى الفاصل 1/8 ثانية. الفهارس الموقعة [0,1,2,−2,−1]، والمقام 5/8. ينتج [0,8/5,16/5,−16/5,−8/5]، أي [0,1.6,3.2,−3.2,−1.6].

أما تمرير d=8 للطول نفسه فأعاد [0,0.025,0.05,−0.05,−0.025]؛ المقام 40. تغير الطول لم يصحح الخلط بين المعدل والفاصل، ونسبة القيم غير الصفرية ما زالت 64.

في الثماني توجد خانة −4، بينما في الخمس أكبر مقدار ظاهر 3.2. لا نستنتج من هذا الفرق ترددًا حقيقيًا مجهولًا أو قدرة جهاز على اكتشافه؛ نحن نقارن شبكتين من معلمات معلومة.

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

الطول الفردي والتحكم.
خانات المثالين.

التحكم وحدود التشغيل

مع n=1 وR=8 أعاد المساران [0]، رغم اختلاف الفاصلين. لا توجد خانة غير صفرية تكشف عامل الفرق في هذه الحالة. نجاح مقارنة قصيرة لا يحدد معنى d.

وعند المعدل المفترض عينة واحدة/ثانية، يساوي رقم الفاصل ثانية واحدة أيضًا. مع n=8 أعاد المساران [0,0.125,0.25,0.375,−0.5,−0.375,−0.25,−0.125]. التطابق العددي لا يجعل «المعدل» و«الفاصل» اسمين للكمية نفسها.

أخذنا الأطوال الصحيحة من 1 إلى 17، وستة معدلات مفترضة {1,2,4,8,16,32}. عدد الأزواج المختلفة 17×6=102. لكل زوج نفذنا استدعاءً بالفاصل 1/R وآخر برقم R: الإجمالي 204 استدعاءات للدالة المساعدة.

حفظنا 1836 عنصر مخرج حقيقي. قارناها بكسور مستقلة دقيقة لكل فهرس؛ أكبر فرق عن تحويل تلك الكسور إلى أعداد عائمة كان نحو 1.78×10⁻¹⁵، ضمن حد مطلق 10⁻¹². تحققنا من الأشكال والأنواع أيضًا.

اتفق المساران بالضبط في 22 زوجًا: 17 حالة معدلها واحد، وخمس حالات إضافية طولها واحد. اختلفا في 80 زوجًا. هذا عد لمجموعة مؤلفة، وليس نسبة خطأ قياس أو اختبارًا لكل قيم d الممكنة.

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

الطولالفاصل الممررالخانة عند الفهرس 1
80.125 ثانية1 دورة/ثانية
88 ثوان1/64 دورة/ثانية
50.125 ثانية1.6 دورة/ثانية
58 ثوان0.025 دورة/ثانية

للتوسع: معدل أخذ العينات.

المراجع

  1. NumPy fftfreq
  2. NumPy DFT
  3. NumPy 2.3.5 fftfreq source

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