طريقة أخرى لتحليل إشارة إلى طيف

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

الصورة

من الأفضل رؤية العمل على أي موسيقى:


وروابط لأمثلة أخرى من أنواع مختلفة. ميتالديث-تورنادو من النفوس:


بعيد المنال:


لذلك بالنسبة للتحلل ، تحتاج إلى القيام بالخطوات التالية:

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

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

مطلوب لحساب 8 إشارات وسيطة مع 8 فترات مختلفة. أبسط مجموعة من الفترات: 4 ، 8 ، 16 ، 32 ، 64 ، 128 ، 256 ، 512. عند تعيين نقطة ، يتم حساب المشتق لكل عينة إشارة باستخدام صيغة المربعات الصغرى. إنه مثل المتوسط ​​المتحرك ، ولكنه هنا ليس متوسط ​​متحرك ولكنه مشتق متحرك للفاصل الحالي.

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

الخطوة التالية هي الحصول على طبقات يمكن تفكيكها إلى موجات منفصلة. الآن تحتاج إلى الحصول على 8 طبقات. يتم حساب الطبقات على النحو التالي:

الطبقة 0 = إشارة وسيطة بدون مخرج
طبقة 1 = متوسطة 1 متوسطة 0
طبقة 2 = متوسطة 2 متوسطة 1
طبقة 3 = متوسطة 3 متوسطة 2
طبقة 4 = متوسطة 4 متوسطة 3
طبقة 5 = متوسط ​​5 متوسط ​​4
طبقة 6 = متوسطة 6 متوسطة 5
layer7 = وسيط 7-وسيط 6
طبقة 8 = وسيطة 7

الطبقة الأخيرة ليست فرقًا ، لكنها تساوي ببساطة الإشارة المتوسطة الأخيرة.

يمكنك المحاولة بشكل مختلف ، أي لحساب الإشارات الوسيطة اللاحقة من الإشارات الوسيطة السابقة. ولكن في البرنامج الحالي ، يتم استخدام خيار 1.

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

الصورة

يبدو الرمز الذي يحسب الإشارة المتوسطة كما يلي:

هنا wavesize هو عدد العينات
إشارة [] - صفيف مع الإشارة الأصلية
SY = 0 ، SX = 0 ، SXX = 0 ، SXY = 0 ، Ky = 0 - متغيرات من النوع العائم
Step2 = STEP / 2 حيث STEP هي الفترة (4،8،16،32،64،128،256،512)

for(int i=Step2;i<wavesize-Step2;i++){ SY=0,SX=0,SXX=0,SXY=0,Ky=0; for(int j=i-Step2,fromZ=0;j<i+Step2;j++,fromZ++){ SX+=fromZ; SY+=signal[j]; SXX+=fromZ*fromZ; SXY+=fromZ*signal[j]; } Ky=float((STEP)*SXY-SX*SY)/float((STEP)*SXX-SX*SX); OutSignal[i]=OutSignal[i-1]+Ky; } 

لطرح إشارة من أخرى ، ببساطة اطرح كل عينة من بعضها.
على سبيل المثال ، للطبقة 0:

 for(int i=0;i<wavesize-1;i++) layer0[i]=OutSignal0[i]-Signal[i]; 

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

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

في برنامج يعرض الموسيقى الملونة بالارتباطات ، يتم حساب اتساع كل نغمة توافقية على النحو التالي: اتساع الموجة * طولها. كل نفس ، ينشأ التفاوت ، ولكن ليس بالقوة كما هو الحال في المتوسط.

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

Source: https://habr.com/ru/post/ar410357/


All Articles