هل كانت هناك حياة قبل قرص صوتي مضغوط؟ وحدة فك ترميز برامج PCM

في المقالة الأخيرة ، تحدثنا عن رموز QR الديناميكية التي تم تسجيلها على أشرطة VHS. لقد أدركني وباء PCM أيضًا ، لذلك حان الوقت لالتقاط هذا التنسيق.

التقط الصور باستخدام معالج PCM

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

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

ستفعل أي لغة. لقد بدأت مع Python. ولكن تبين أنها كانت بطيئة إلى حد ما على جهاز الكمبيوتر المحمول الخاص بي ، لذلك تحولت إلى C ++. بالمناسبة ، بشكل مستقل عن بعضنا البعض (تقريبًا) ، يقوم مجتمعنا الصغير بتطوير 3 مشاريع لفك التشفير: على OpenCV (C ++) ، على Qt (C ++) وعلى LabView. سيتم مناقشة أول واحد. تم اختيار OpenCV بسبب بساطة العمل مع كل من أجهزة الالتقاط ومقاطع الفيديو المسجلة مسبقًا. بالإضافة إلى ذلك ، فإن جميع التلاعبات بالصورة محسنة للغاية.

المشكلة الأولى التي ستواجهها هي فقدان البيانات. على أي حال ، لن يتم تجنبها بأي شكل من الأشكال بدون معدات "متخصصة". يستخدم PCM خطوطًا أكثر من الملاءمة في المنطقة المرئية من الإطار. في حالة منطقة NTSC ، يكون هذا الرقم 492 سطرًا لكل إطار بمساحة مرئية تبلغ 480. في حالة PAL ، كل شيء أكثر حزنًا.
1. PCM NTSC 44,056 kHz, PAL 44,1 kHz.
2. VHS . ( ). , . , . , . .
هناك نوعان من الحلول لهذه المشكلة. اعمل مع بطاقة الالتقاط بطريقة صعبة من خلال تجاوز السائق وأخذ البيانات من ADC ، وبعد ذلك يمكن تحويلها إلى إطار PCM كامل ، أو مطرقة على الخطوط المفقودة. يبدو الخيار الثاني غريبًا بعض الشيء ، لكن تنسيق تخزين البيانات يسمح لك باسترداد جزء من البيانات. في حالة منطقة NTSC ، يتبين أنها تلبي قيود نظام تصحيح الأخطاء.

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

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

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

threshold(greyFrame, fullFrame, 0, 255, THRESH_BINARY + THRESH_OTSU);

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

cvtColor(srcFrame, greyFrame, CV_BGR2GRAY);

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

التقاط EasyCAP من كاسيت الفيديو

يمكن ملاحظة بقع اللون ومستوى أعلى من سطوع بتات البيانات في الصورة عند مقارنتها بالتوضيح الأول لمقالة تم التقاطها في Magewell Pro Capture AIO.

حان الوقت لتذكر ما يتم تخزين الإشارة عليه. لا تختلف مسجلات أشرطة VHS بجودة خاصة ، لأن هذا هو تنسيق منزلي. نبضات تزامن الإطار والخط وحدها ليست كافية للتشغيل المستقر. لذلك ، تتم إضافة علامات تزامن إضافية إلى إشارة الفيديو. يحتوي كل سطر في البداية على تسلسل متبادل بين اثنين من "الأبيض" الأبيض واثنين من "البكسل" السوداء ، وفي نهاية الخط ، توجد منطقة صغيرة ذات سطوع أقصى يضبط AGC. تحتوي بتات البيانات نفسها على سطوع بنسبة 60٪ من الحد الأقصى لـ 1 وأقل من 20٪ للصفر. فيما يلي مثال لسبب أهمية هذه الملصقات: قلب الصورة من الأشرطة في بداية ونهاية الإطار.

التقلبات في بداية الإطار

وفقًا لعلامات المزامنة ، يوجد في كل صف منطقة بيانات. بعد ذلك ، تحتاج إلى تحديد عرض البت (128 بت فقط لكل سطر) وتقليص خط الصورة إلى 16 بايت.

دعونا نلقي نظرة فاحصة على تنسيق البيانات. يتكون الخط من 8 فدرات من 14 بت لكل منها ، تحتوي على قيم الإخراج إلى DAC (عينات) ورموز تصحيح الخطأ ، وكتلة مع المجموع الاختباري (CRC-16 / CCITT-FALSE). بواسطة المجموع الاختباري ، يتم تحديد الخطوط المسقطة ، البيانات التي سيحاول الجهاز استردادها. يحتوي كل سطر على ثلاث عينات للقنوات اليسرى واليمنى ، كتلة تماثل P (xor لجميع العينات) وسؤال غامض Q. الترتيب كما يلي: L0 ، R0 ، L1 ، R1 ، L2 ، R2 ، P ، Q. اليوم ، تصحيح Q غير ممكن سنقوم بذلك ، نظرًا لأن هذه المادة لم يتم فهمها بالكامل بعد ويتطلب التنفيذ تصحيحًا.

ترتيب البيانات في الصفوف

إذا كنت تستخدم "كما هي" ، فإن الخط المكسور يعني فقدان ثلاث عينات في وقت واحد ، والتي ستكون ملحوظة للأذن على حلقة معدنية. لكن ديدا كانت أذكى وقررت تسجيل البيانات مع السلالم. تؤخذ كتلة واحدة فقط من سطر واحد. يتم أخذ التالي مع إزاحة طفيفة. تأخذ درجة الدرج 16 خطًا. يتم أخذ الكتلة L0 من خط واحد. Block R0 with line 17 ... وبالتالي ، باستخدام كتلة التماثل ، يمكنك استرداد البيانات من 16 صفًا تم فقدها على التوالي. ولكن فقط إذا كان هناك خطأ واحد داخل السلم. يسمح لك Block Q بإصلاح خطأين يستعيدان ما يصل إلى 32 خطًا مفقودًا.

صورة

فكر في مثال بسيط. هناك جزء من إطار PCM يتم فيه كسر عدة خطوط (مظللة باللون الأحمر). تتم معالجة السلالم الأربعة الأولى بشكل طبيعي. الخامسة ستلتقط الخط المكسور. يتم فقدان كتلة Q أولاً ، ولكن نظرًا لأنها تعمل على تصحيح الأخطاء ، وعدم تلف العينات نفسها ، يمكنك الذهاب إلى أبعد من ذلك. مع السلم السادس ، نفعل نفس الشيء. ثم مرة أخرى هناك سلالم غير تالفة تصل إلى 21. تعاني البلوك P ، كما أنها تعمل على استعادة البيانات. يمكنك تخطي. لذلك نذهب إلى 37 درجًا ، حيث ستتلف عينة القناة الصحيحة. لاستعادته ، تحتاج إلى تنفيذ XOR لكتلة التماثل وجميع العينات الأخرى:

R2=L0R0L1R1L2P


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

يمكن ملاحظة عملية المرور عبر الحقل على رسوم متحركة GIF صغيرة.

صورة

وهكذا نذهب حتى الخطوة الأخيرة من السلم تقع على نهاية الحقل. يحتوي PCM الأجهزة على مخزن مؤقت دائري. بمجرد معالجة الخط ، يمكن ملؤه بالبيانات الجديدة. وبالتالي ، تقفز الخطوة الأخيرة دون مقاطعة التشغيل.

اخترت مبدأ عمل مختلف قليلاً. الآن لم يعد هناك حد للذاكرة ، لذا فإن المخزن المؤقت له حجم أكبر قليلاً: ارتفاع الحقل بالإضافة إلى ارتفاع السلم. بمجرد وصول السلم إلى نهاية المخزن المؤقت ، يتم نقل آخر 111 سطرًا إلى البداية ، ويتم ملء البيانات الجديدة بالفعل من 112 سطرًا. بالطبع ، يجب ألا ننسى أنه عند العمل باستخدام بطاقة الالتقاط ، نفقد بعض الخطوط. لذلك ، تأكد من ملء الأسطر المفقودة بالأصفار من أجل تمييزها لمزيد من الاسترداد بأخطاء CRC.

كان PCM في الأصل 14 بت. ولكن بمرور الوقت ، عندما قامت مسجلات الفيديو VHS بتحسين جودة الصورة ، تحول المصنعون إلى 16 بت ، دون نسيان التوافق العكسي.
3. 14- PCM 12 . ( ).
في PCM 16 بت ، لا توجد كتلة Q على الإطلاق ، لذلك هناك علامة خاصة في عنوان الحقل "تصحيح Q مستحيل". بدلاً من ذلك ، تم جمع بتتين مفقودتين من العينات و P. في هذه الحالة ، لا يكون ارتفاع السلم 8 خطوات ، ولكن فقط 7 ، حيث يتم تخزين البتات المفقودة من الكتلة في خطها الخاص ، وليس بشكل منفصل. يعد فهم كيفية عمل PCM 16 بت أمرًا بسيطًا للغاية باستخدام مثال التقاط متعرج بتردد 100 هرتز وأقصى سعة. كل شيء يقع على الفور في مكانه.

مقارنة بين PCM 14 بت و 16 بت

حان الوقت الآن لحفظ النتيجة في ملف wav. ستساعد مكتبة libsndfile في ذلك. على الرغم من ... PCM لا يحفظ الملفات ، ولكن يلعبها على الفور. هنا يمكنك أن تتذكر شيئًا رائعًا مثل الأنابيب. عندما يتم إخراج أحد البرامج إلى برنامج آخر. نحدد ببساطة stdout كوجهة ونعيد توجيه الدفق إلى برنامج ffplay.

./ggg -i easycap.avi -o - | ffplay -

الآن يمكنك الاستمتاع بالقطرات والاستمرار في تصحيح الرمز للتخلص منها ...

هذا كل شيء اليوم. يمكنك تنزيل مصدر وحدة فك الترميز من الصفحة على GitHub: https://github.com/walhi/pcm . يوجد أيضا مولد كهربائي. في يوم من الأيام ، سأصممه كمكوِّن إضافي لـ foobar ...

العمل النشط جار لإنهاء الاسترداد على كتلة Q ، لذلك للحصول على عمل صحيح أكثر أو أقل ، سيكون عليك القفز فوق الالتزامات. لكن هذه تفاهات. أولئك الذين يرغبون في اللعب يمكنهم تنزيل مثال الالتقاط.

All Articles