سؤال

لدي سؤال حول ترميز خوارزمية لجهاز Texas Instruments TMS320C64xx DSP في MATLAB:

لقد حصلت على تنفيذ قذر عملي لمرشحي في MATLAB.هدفي هو استخدام MATLAB Embedded Coder لتحويل هذه الخوارزمية إلى لغة C والتي يمكنني بعد ذلك استيرادها إلى Code Composer Studio وتحميلها على DSP.

للقيام بذلك، أعلم أن هناك أشياء معينة يجب أن أفعلها لكود MATLAB الخاص بي.على سبيل المثال، أحتاج إلى تخصيص مساحة مسبقًا للمصفوفات حتى تعرف حجمها (إلا إذا كنت أرغب في الاهتمام بالبيانات ذات الحجم المتغير).أنا أفهم كل هذا التدليك لكود MATLAB إلى كود C'ish حتى يتمكن برنامج MATLAB من تحويله.ومع ذلك، ليس لدي أي فكرة عن كيفية التأكد من أن أنواع البيانات الخاصة بي (على سبيل المثال معاملات الفلتر الخاص بي) هي نقطة ثابتة وليست نقطة عائمة بحيث يقوم MATLAB Embedded Coder بتحويل الكود الخاص بي إلى C والذي يتضمن فقط أنواع بيانات النقطة الثابتة.

لذلك أعتقد أن أسئلتي العامة هي:

1) إذا تم تحديد C64xx كنقطة ثابتة DSP 32 بت، فهذا يعني أن المترجم الخاص به سوف يلقي خطأ إذا حاولت استخدام نوع البيانات العائمة؟

2) هل هناك طريقة للتأكد من أن MATLAB Embedded Coder لا يقوم بإنشاء أنواع بيانات عائمة؟

3) هل أحتاج إلى استخدام MATLAB Fixed Point Toolbox؟

شكرًا لكم جميعًا، واسمحوا لي أن أعرف إذا كان هناك المزيد من المعلومات اللازمة للإجابة على سؤالي.

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

المحلول

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

  2. نعم.يوجد مربع اختيار في مربع حوار إعداد تكوين MATLAB Coder، ضمن جزء الواجهة، والذي ينص على "دعم الأرقام الصحيحة البحتة فقط".سيؤدي التحقق من ذلك إلى ضمان عدم حصولك على أي أنواع بيانات الفاصلة العائمة في التعليمات البرمجية التي تم إنشاؤها.ومع ذلك، تحتاج أولاً إلى التأكد من أنك تستخدم فقط أنواع البيانات الصحيحة/النقطة الثابتة في التعليمات البرمجية الخاصة بك.يضمن هذا الخيار عدم إنشاء عوامات - فهو لا يقوم تلقائيًا بإنشاء نسخة ذات نقطة ثابتة أو عدد صحيح فقط من التعليمات البرمجية من رمز MATLAB الخاص بالنقطة العائمة.

  3. لإنشاء رمز C ذو نقطة ثابتة، يجب عليك أولاً تحويل رمز MATLAB الخاص بالنقطة العائمة إلى رمز نقطة ثابتة.ستحتاج إلى صندوق أدوات النقطة الثابتة الذي يتيح لك تحديد المتغيرات الخاصة بك ككائن FI، وتحديد قواعد العمليات ذات النقطة الثابتة باستخدام إعداد FIMATH.بمجرد تحديد أنواع بيانات ذات نقطة ثابتة 16/32 بت لجميع المتغيرات والعمليات الخاصة بك، يمكنك محاكاتها وتحليل النتائج والتكرار عليها لتعديل إعداداتك لتقليل التجاوزات وأخطاء التقريب.ثم يمكنك إنشاء عدد صحيح فقط من كود C الذي سيتصرف تمامًا مثل (أو قريب جدًا) من سلوك MATLAB الخاص بالنقطة الثابتة.أي اختلافات قد تراها بين كود MATLAB ذو النقطة الثابتة ورمز C ذو النقطة الثابتة ستكون في المقام الأول بسبب تلك التي قدمها المترجم المستهدف.

يجب أن يوفر الرابط التالي لندوة ويب مسجلة حول هذا الموضوع مقدمة جيدة لعملية استخدام Fixed-Point Toolbox:http://www.mathworks.com/wbnr38838

هث.

نصائح أخرى

لا يسعني إلا أن أجيب على سؤالك الأول:

C64xx عبارة عن DSP ذو نقطة ثابتة 32 بت، لكن المترجم لن يشتكي إذا كنت تستخدم النقطة العائمة.سيتم تشغيل التعليمات البرمجية الناتجة بشكل جيد ولكنها ستكون (كثيرًا) أبطأ لأنه سيتم محاكاة عمليات الفاصلة العائمة.

يمكن لـ C64xx DSP أيضًا عمل نقطة ثابتة 16 بت ونقطة ثابتة مختلطة 32 × 16 بت.كلما كانت أنواع البيانات التي تستخدمها أصغر، كلما تم تشغيل التعليمات البرمجية الناتجة بشكل أسرع.

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