علوم وفضاء

correlate: هل يكفي عكس القالب دون مرافقته؟

أربع إزاحات وقيم مختلفة للعكس وحده.
العكس والمرافق أعادا قائمة الارتباط في المثال.

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

ثبت المرافق والفهرسة

correlate تجمع عناصر الأول المزاحة مع مرافق عناصر الثاني، بصفر خارج الحدود. [1]

نكتب التعريف c(k)=Σ_n A(n+k)conj(V(n))؛ هذا هو اتجاه الإزاحة الذي سنستعمله. [1]

نختار A=np.array([3+2j,-2+1j,4-3j],dtype=np.complex128) وV=np.array([-1+2j,2-3j],dtype=np.complex128). الشكلان (3,) و(2,)، والقيم مؤلفة بلا وحدات أو تسجيل إشارة حقيقية.

شغّلنا NumPy 2.3.5 على CPython 3.12.14. ثبتنا mode="full" في كل استدعاء للارتباط والالتفاف، فلم نقارن خيارات قص مختلفة أو افتراضات الخيار الافتراضي.

نسمي V قالب المقارنة في شرح المثال؛ مرافقه [-1-2j,2+3j]. المرافق يغير إشارة الجزء التخيلي لكل عنصر في حسابنا، بينما عكس الترتيب يبدل مواضع العناصر. نحتفظ بالعمليتين منفصلتين.

في مثال الطولين 3 و2، نسجل أربع إزاحات من -1 إلى 2. موضع القائمة صفر يحمل قيمة الإزاحة -1؛ لا نحول رقم الموضع إلى الإزاحة نفسها دون هذا الوسم.

العكس وحده يغير الجداءات

أعطى C=np.correlate(A,V,mode="full") القيم [13j,-6-12j,21+9j,-10-5j] من complex128 وبالشكل (4,). نعرضها بالترتيب مع الإزاحات -1 وصفر و1 و2.

عند k=-1، يدخل العنصر الأول من A مع مرافق العنصر الثاني من V: (3+2j)(2+3j)=13j. أما عند k=0 فندخل جداءين، (3+2j)(-1-2j)=1-8j و(-2+j)(2+3j)=-7-4j؛ مجموعهما -6-12j.

عند k=1، المساهمتان 4+3j و17+6j، فالمجموع 21+9j. وعند k=2 يبقى (4-3j)(-1-2j)=-10-5j. يحفظ جدولنا العناصر المتقابلة، لا عددها فقط.

convolve تجمع الجداءات وفق مجموع الفهرسين؛ full يحفظ N+M-1 موضعًا. [2]

عكس V وحده يعطي V[::-1]=[2-3j,-1+2j]. شغّلنا np.convolve(A,V[::-1],mode="full") فخرج [12-5j,-8+12j,-1-23j,2+11j] من complex128 وشكل (4,).

مثلًا الجداء الطرفي الأول صار (3+2j)(2-3j)=12-5j، مختلفًا عن 13j. بقي طول القائمة أربعة، لكن تساوي الطول لم يحفظ القيمة لأن إشارة الجزء التخيلي في القالب مختلفة.

أما np.conjugate(V[::-1]) فأعطى [2+3j,-1-2j]. الالتفاف مع هذا القالب أعاد [13j,-6-12j,21+9j,-10-5j] كاملة من complex128 وشكل (4,).

نربط في المثال فهرس الالتفاف t بالإزاحة k=t-1، لأن طول القالب اثنان. عند t=0 نقرأ k=-1، وعند t=1 نقرأ k=0. تطابق القيم لا يجيز محو اختلاف تسمية الفهرسين.

للتحكم الإضافي، الالتفاف مع V دون أي تحويل أعطى [-7+4j,12-10j,1+19j,-1-18j]. إذن لدينا ثلاث قوائم مختلفة في المثال: قالب كما هو، ومعكوس وحده، ومعكوس ومرافق.

التبديل والتحكم ذو القيم الحقيقية

شغّلنا np.correlate(V,A,mode="full") فظهر [-10+5j,21-9j,-6+12j,-13j] من complex128 وشكل (4,). إزاحات هذا الترتيب هي -2 و-1 وصفر و1.

للمراجعة في قيمنا، خذ قائمة C من نهايتها إلى بدايتها، ثم غيّر إشارة كل جزء تخيلي. آخر C وهو -10-5j يصبح أول القائمة الجديدة -10+5j؛ وأول C وهو 13j يصبح آخرها -13j.

المطابقة هنا تشمل الإزاحة أيضًا: القيمة عند k في الطلب الجديد تقابل مرافق القيمة عند -k في الطلب الأول. لا نقارن العمودين بحسب رقم صف واحد عندما تختلف بداية نطاق الإزاحات.

لا نستخدم هذا التبديل لتقدير تأخير جهاز أو اختيار قمة. النتيجة قائمة مركبة خام في مثالنا؛ لم نطرح متوسطًا أو نطبعها أو نضع معدل عينات لتحويل الإزاحة إلى ثوانٍ.

أنشأنا التحكم Ar=[3,-2,4] وVr=[-1,2] داخل مصفوفتين من complex128، بأجزاء تخيلية صفرية. الارتباط والالتفاف مع القالب المعكوس وحده أعطيا [6,-7,10,-4] مع صفر تخيلي لكل عنصر.

وفي هذا التحكم، أخذ مرافق القالب المعكوس لم يغيره؛ فتطابق المسار الثالث كذلك. هذه مساواة مفيدة لكشف سبب اختلاف المثال الأول: غياب الجزء التخيلي يخفي أثر المرافق على قيم القالب.

لم نغير النوع إلى float64 في التحكم. سجلنا complex128 وشكل (4,) للمخرجات؛ وجود صفر تخيلي في العرض لا يحدد وحده نوع المصفوفة.

راجعنا ثبات بايتات A وV في الاستدعاءات. لم نكتب في ناتج أو نختبر أثره على تخزين مشترك؛ لا نحول ثبات المدخل إلى حكم ملكية ذاكرة.

قالبان مختلفان وتحكم تخيلي صفري.
التحكم ذو الأجزاء التخيلية الصفرية أخفى الفرق.

مرجع الأجزاء الصحيحة وحدوده

يحفظ مرجع Python كل عنصر كزوج (x,y) للجزأين الحقيقي والتخيلي. ضرب (x+yj) في مرافق (u+vj) يعطي الزوج (xu+yv,yu-xv)؛ والضرب دون مرافق يعطي (xu-yv,xv+yu). نحسب بالأعداد الصحيحة.

للارتباط، يمر المرجع على الإزاحات من -(M-1) إلى N-1، ثم يجمع مساهمات A(n+k) وV(n) عندما يكون عنوان الأول داخل القائمة. المواضع الخارجية لا تضيف شيئًا.

وللالتفاف، يمر المرجع على كل زوج عناصر من القائمتين، ويضع مساهمته في خانة مجموع الفهرسين. لا يستدعي correlate أو convolve أو conjugate أو FFT، ولا يستعمل ضرب أعداد Python المركبة لبناء التوقع.

للشبكة، اخترنا العناصر من الأزواج (-1,0) و(0,1) و(2,-1)، والأطوال 1 و2 و3. عدد المتجهات 3+9+27=39؛ الأزواج المرتبة 39×39=1521، وتتضمن تقديم الأطول أو الأقصر أولًا.

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

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

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

الحساب (1521+2)×7+3=10664، ومرت جميع الفحوص. قارنا الأجزاء مساواةً دقيقة لأن قيمنا الصحيحة صغيرة؛ لا نستنتج ضمان مساواة بلا سماح لكل بيانات عائمة كبيرة أو كسرية.

النطاق متجهات غير فارغة من complex128، بالأطوال والقيم الصحيحة الأجزاء المعلنة، وبخيار full فقط. لم نفحص same أو valid أو الخيار الافتراضي أو نوعًا حقيقيًا أو NaN أو اللانهاية أو أطوالًا أكبر.

لم نقس الأداء أو FFT أو ملكية ذاكرة، ولم نفسر قمة ارتباط أو زمن تأخير أو تطبيع. السؤال المحدد هو أثر المرافق عند تحويل القالب بين المسارين، مع حفظ الفهرسة ونوع الخرج.

إزاحة kcorrelateعكس فقطعكس ومرافق
-10+13j12-5j0+13j
0-6-12j-8+12j-6-12j
121+9j-1-23j21+9j
2-10-5j2+11j-10-5j

للتوسع: الأجزاء المركبة والمرافق.

المراجع

  1. NumPy 2.3 — correlate
  2. NumPy 2.3 — convolve

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