আমি কীভাবে শোরগোলের সিগন্যালের এসএনআর গণনা করব?


14

এটি ব্যবহারিকভাবে কীভাবে করবেন তা বুঝতে আমার সমস্যা হচ্ছে

আমার কাছে একটি ওয়াভ ফাইল রয়েছে যাতে খাঁটি বক্তৃতা এবং অন্য একটি এভ ফাইল রয়েছে যা সবেমাত্র ব্যাকগ্রাউন্ড শব্দের অন্তর্ভুক্ত করে (বিভিন্ন জিনিস হতে পারে, যেমন সাদা শব্দ, ভিড়ের শব্দ, প্রবাহিত বাতাসের রেকর্ডিং ইত্যাদি)। এগুলি হয় খালি বক্তৃতা বা খাঁটি শব্দ noise সুতরাং আমি অনুমান করি যে আমি উভয় ফাইলে সংশ্লিষ্ট নমুনার (বা নমুনার ফ্রেমের গড়) সাধারণ বিভাগ দ্বারা তাদের কাছ থেকে একটি এসএনআর মান পেতে পারি। আমি তখন শোরগোলের বক্তৃতা ফাইলটি পাওয়ার জন্য এগুলিকে ধৃষ্টতার সাথে একত্রিত করি। আমি অনুমান করছি যে এই ফাইলটিতে এখনও একই এসএনআর থাকবে।

এখন আমি এই শব্দটি আমার শব্দ হ্রাস প্রোগ্রামের মাধ্যমে পাস করি এবং ফলস্বরূপ অন্য ফাইলটি পাই। এই "শব্দটি হ্রাস" ফাইলটির এসএনআর কীভাবে গণনা করব?

--- সম্পাদনা ---

ফলো-আপ প্রশ্ন এখানে পোস্ট করা হয়েছে

উত্তর:


8

এসএনআরের সাধারণ সংজ্ঞা হ'ল শব্দ শক্তি দ্বারা বিভক্ত চাওয়া সংকেতের শক্তি। ধরা যাক আপনি অ্যারে হিসাবে শব্দের সংকেতটি পেয়েছেন এবং শব্দের সংক্রমণের আগে মতলবতে এসএনআর গণনা এভাবে করা যেতে পারে:

snr_before = mean( signal .^ 2 ) / mean( noise .^ 2 );
snr_before_db = 10 * log10( snr_before ) % in dB

শব্দ হ্রাসের পরে, অবশিষ্ট শব্দটি ওয়ান্টেড সংকেত এবং প্রকৃত সংকেতের পার্থক্য হিসাবে গণনা করা যেতে পারে। এসএনআরের গণনা তখন সোজা:

residual_noise = signal - noise_reduced_signal; 
snr_after = mean( signal .^ 2 ) / mean( residual_noise .^ 2 ); 
snr_after_db = 10 * log10( snr_after )

1
সিগন্যাল এবং গোলমালিত_সাইনাল আপনার ক্ষেত্রে সময় সমন্বয় করতে হবে।
ডিএসপিগুরু

@dspGuru সত্য, আমি ধরে নিয়েছি যে শব্দ কমানোর অ্যালগরিদম কোনও সময়ের জন্য বিলম্ব প্রবর্তন করে না।
Deve

@ ডিএসপিগুরু এবং দেব: এই জায়গাগুলিতে, পুরো সিগন্যালের বর্ণ ও গড় গ্রহণের পরিবর্তে, আমি যদি সংকেতটির কিছু অংশ নির্দিষ্ট করে থাকি যাতে স্পষ্টভাবে বক্তৃতা থাকে? উদাহরণস্বরূপ, মতলব-এ সিগন্যাল (স্টার্ট_স্পিচ: শেষ_স্পীচ) দ্বারা সংকেতটি প্রতিস্থাপন করুন, যেহেতু আমার সংকেত শব্দের মধ্যে বিরতি দিয়ে 5 সেকেন্ড দীর্ঘ
ব্যবহারকারী 13267

@ ব্যবহারকারী 13267 কোন সংকেতের? শোর কমানোর আগে নাকি পরে? সাধারণত, আপনি যত ভাল সিগন্যালটি বিশ্লেষণ করবেন ততই আপনার এসএনআরের অনুমান হবে।
Deve

উভয়। আমি যা বলতে চাইছি তা হল, আমার শব্দটির নমুনায় কিছু একটা ছোট বাক্য বলছে যাতে আমি যখন এটি ধৃষ্টতার সাথে খুলি তখন আমি তরঙ্গরূপের উচ্চ তীব্রতা এবং কম তীব্রতা অঞ্চলগুলি দেখতে পাই (শব্দের উপস্থিতি এবং আমি মনে করি শব্দের মধ্যে নীরবতা)। সুতরাং আমি কেবল সেই নমুনাগুলি নির্বাচন করতে চাই যার মধ্যে শব্দ রয়েছে এবং সেই নমুনাগুলি অন্তর্ভুক্ত নয় যেখানে নীরবতা রয়েছে।
ব্যবহারকারী 13267

3

ইনপুট দিকে:

  1. ডিবি 1 = 10 * লগ 10 গণনা করুন (var (শোনার সংকেত))
  2. ডিবি 2 = 10 * লগ 10 গণনা করুন (var (ক্লিনস্পিপসিগন্যাল))

এসএনআর হ'ল = ডিবি 2 - ডিবি 1

আউটপুট দিকে:

  1. আপনার শব্দ দমন আলগো মাধ্যমে পরিষ্কার স্পিচ সিগন্যাল প্রেরণ করুন। Y1 আউটপুটটি চিহ্নিত করুন।
  2. আপনার কোলাহল দমন আলগোর মাধ্যমে কোলাহলপূর্ণ বক্তৃতা সংকেত প্রেরণ করুন। এই আউটপুটটি Y2 উল্লেখ করুন।
  3. জেড = ওয়াই 2 - ওয়াই 1 গণনা করুন
  4. রেসিডুয়ালনয়েসডিবি = 10 * লগ 10 (ভ্যার (জেড))
  5. SpeDDB = 10 * লগ 10 (var (Y1))
  6. এসএনআর = স্পিচডিবি - অবশিষ্ট নয়েসডিবি

আওয়াজ হ্রাস অ্যালগরিদমের মাধ্যমেও কি পরিষ্কার বক্তৃতা সংকেতটি পাস করা সত্যিই প্রয়োজনীয়? শব্দটি হ্রাস অ্যালগরিদমের আগে এবং পরে বক্তৃতা সংকেতটি কি একই হওয়া উচিত নয় যাতে আমাদের একটি সাধারণ রেফারেন্স পয়েন্ট থাকে?
ব্যবহারকারী 13267

এটি সম্পূর্ণরূপে আপনার অ্যালগরিদমের উপর নির্ভর করে। বিলম্ব এবং ফিল্টারিংয়ের কারণে সম্ভবত আউটপুট পরিষ্কার ইনপুটটির সাথে মেলে না।
dspGuru

আউটপুট (যখন শব্দটি হ্রাস অ্যালগরিদমের মাধ্যমে পরিষ্কার বক্তৃতাটি অতিক্রম করা হয়) প্রকৃতপক্ষে ইনপুটটির সাথে মেলে না, তবে আমি নিশ্চিত যে অ্যালগরিদম কোনও বিলম্ব প্রবর্তন করে না। দয়া করে আমার ফলোআপ প্রশ্নটি পরীক্ষা করুন (লিঙ্কটি এই প্রশ্নের মধ্যে সম্পাদনা করা হয়েছে)। এটিতে শব্দের হ্রাসের পূর্বে (চিত্রের শীর্ষে) এবং শব্দটির হ্রাসের পরে (চিত্রের নীচে) পরিষ্কার বক্তৃতার তরঙ্গরূপ রয়েছে। দেরি নেই তবে খুব উচ্চ প্রশস্তকরণ রয়েছে এবং কিছু বক্তৃতা ফিল্টার করে দেওয়া হয়েছে।
ব্যবহারকারীর 13267
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.