مدخل إلى معالجة الإشارة signal processing: البصمة الصوتية

تاريخ النشر: 20/05/2019    

 

(1)

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

قضيت أوقات فراغي في الشهور القليلة الماضية في العمل على مشكلة التعرف على المقاطع الصوتية فقط من خلال الاستماع إليها لعدة ثوان. كنت محبط من عدم وجود نظام يمكنه التعرف على التلاوات القرآنية على سبيل المثال; من هو القارئ؟ ما هذه السورة/الآية؟

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

قد يعتقد غير المختصين/المهتمين أن ما ذكرته هو أمر معقد ويتضمن خوارزميات متقدمة ومعالجة فائقة. بالعكس، الموضوع واضح تقريبا وبالإمكان حله بالطرق التقليدية (لا يوجد حاجة لتطبيق خوارزميات تعلم الآلة أو الذكاء الاصطناعي).


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

ما هو الصوت؟

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

هنالك عوامل أو خصائص تعطي كل صوت نغمته المميزة، أهمها:

  1. السعة amplitude: وهي غالبا تمثل قوة الصوت أو ارتفاعه. سعة عالية بالضرورة صوت أعلى. ويتم قياسه نظريا بمدى أقصى ارتفاع أو انخفاض تصل إليه الموجه.
  2. التردد frequency: وهي تمثل غالبا حدة الصوت. كلما زادت حدة الصوت صعب على الإنسان تقبله، وعكسه عمق الصوت (على سبيل المثال صوت المرأة تردده أعلى من صوت الرجل). يتم قياسه (تقريبا) بعدد الاهتزازات الكاملة في الثانية الواحدة (المقصود بالاهتزاز الكامل: ارتفاع وانخفاض الموجة عن محور الأساس).

 (2)

الطريقة الأمثل لتخزين التسجيلات الصوتية رقميا هو أخذ عينات samples من الموجة. كل ما زادت العينات المأخوذه في الثانية الواحدة كلما زادت دقة ووضوح التسجيل الصوتي. (يطلق على عدد العينات في الثانية مسمى sample rate).
لنعود إلى المشكلة المطروحة في الأعلى. إذا كان لدينا ملف صوتي محفوظ مسبقا. كيف يمكننا - عن طريق الاستماع الصوتي فقط - تحديد ما إذا كان الصوت المسموع هو نفسه الملف المحفوظ لدينا؟ قد يتبادر إلى ذهنك أنه من الممكن رسم الاهتزاز الموجي للتسجيل الجديد ومقارنته بالملف المحفوظ. لكن هنا ستظهر مشاكل متعددة أهمها الازعاج noise المصاحب للتسجيل الجديد (والذي سيكون غالبا تسجيل عن طريق مايكروفون). في هذه الحالة من شبه المستحيل مطابقة الاهتزاز الموجي. ما الحل إذن؟

الحل السحري  Fourier transform


وصل الرياضي الفرنسي فوريي (عاش في الفترة ١٧٨٦-١٨٣٠م) إلى تمثيل حسابي في غاية الأهمية - من الأساسيات تقريبا في علم معالجة الإشارة - وهو أنه من الممكن إعادة تمثيل أو تفكيك أي موجة معقدة بعدد من الموجات البسيطة سهلة التحليل. محصلة أو تحويل فوريي يسمح لنا أيضا بإعادة رسم الموجه من time domain  إلى frequency domain. فبدلا من ملاحظة التغير في سعة الموجة مع مرور الزمن، بإمكانك ملاحظة التغير في سعة الموجة عبر اختلاف الترددات، وهذا يزيد من سهولة التحليل.

الصورة الطيفية Spectrogram 


قد يكون أهم منتج توضيحي بالإمكان الحصول عليه اعتمادا على تحويل فوريي ما يطلق عليه "الصورة الطيفية" spectrogram، وهو مفتاح الحل لمشكلتنا المذكورة في الأعلى.
الصورة الطيفية توضح 3 عوامل أساسية للموجة الصوتية:

  1. نطاق التردد: ما هي الترددات التي تظهر في الموجة؟
  2. قوة الصوت أو سعته عند كل تردد يظهر في الموجة.
  3. يتم توضيح ما تم ذكره في 1 - 2 بشكل مستمر مع مرور الوقت، وليس في لحظة واحدة.

في الأسفل مثال صورة طيفية لتسجيل صوتي للقارئ سعود الشريم يتلو سورة الإخلاص.

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

تحليل الصورة الطيفية spectrogram analysis 

أحد الحلول الفعالة لاستخراج المعلومات من الصورة الطيفية - كما تم اقتراحه في مشروع dejavu - هو استخراج الاحداثيات (الوقت (محور س) - التردد (محور ص)) في المناطق التي تكون فيها سعة الموجة عالية.


لكن هذا لا يكفي. حتى نستفيد من عامل الوقت، يجب أن نضع فارق التوقيت بين الاحداثيات المتجاورة في الحسبان.  المقترح لاستخراج معلومة جديدة تمثل العلاقة بين الاحداثيات المتجاورة هو كالتالي:رقم التردد للاحدائية 1 - رقم التردد للاحدائية المجاورة 2 - الفارق في التوقيت بينهما.


الآن كل ما علينا هو مطابقة سلسلة إحداثيات بين التسجيلات المخزنة في قاعدة البيانات، والتسجيل الجديد المستهدف للتعرف عليه. وفي حال وجود مطابقة (ولو قصيرة) بين سلسلتين من الاحداثيات، يكون قد نجحنا في المهمة. (ملاحظة : الخوارزمية أكثر تعقيدا من المذكور لكن فضّلت تبسيطها)

مثال تطبيقي


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



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

إذا كانت لديك خبرة في تطوير البرمجيات ومتحمس لتطبيق ما قرأته: هذا رابط المشروع مفتوح المصدر - وهنا رابط لبرنامج عملت عليه بإمكانك استخدامه لتطبيق نفس الخوارزمية على أنظمة تشغيل الهواتف (أندرويد وآيفون) (تستطيع من خلاله استخدام هاتفك للقيام بتحليل الموجة الصوتية).


وصلت إلى نهاية التدوينة! إذا أعجبتك لا تنسى مشاركتها مشكورا.