পাইথনে বর্ণালী রেজোলিউশনের উন্নতি?


21

আমি পাইথনে স্পিচট্রোগ্রাম স্পেকট্রামগুলি তৈরি করতে specgram()ফাংশনটি ব্যবহার করছি matplotlib, তবে আমার স্বাভাবিক প্রতিলিপি সফটওয়্যার, প্রাত যা তৈরি করতে পারে তার আউটপুট সর্বদা স্বল্প মানের। উদাহরণস্বরূপ, নিম্নলিখিত কল:

specgram(
    fromstring(spf.readframes(-1), 'Int16'),
    Fs=framerate,
    cmap=cm.gray_r,
)

এটি উত্পন্ন করে:

এখানে চিত্র বর্ণনা লিখুন

প্রাত, নিম্নলিখিত সেটিংস সহ একই অডিও নমুনায় কাজ করছেন:

  • পরিসর দেখুন: 0-8000Hz
  • উইন্ডোর দৈর্ঘ্য: 0.005 সে
  • গতিশীল পরিসীমা: 70 ডিবি
  • সময় পদক্ষেপ: 1000
  • ফ্রিকোয়েন্সি পদক্ষেপ: 250
  • উইন্ডো আকার: গাউসিয়ান

এটি উত্পন্ন করে:

এখানে চিত্র বর্ণনা লিখুন

আমি কি ভুল করছি? আমি সমস্ত specgram()পরামিতিগুলির সাথে ফিড করার চেষ্টা করেছি , তবে রেজোলিউশনের কোনও কিছুই উন্নতি করতে পারে বলে মনে হচ্ছে না। এফএফটিগুলির সাথে আমার কার্যত অভিজ্ঞতা নেই।


আপনি যে ম্যাটপ্লটলিব.স্পেকগ্রাম প্যারামিটার কনফিগারেশনগুলির চেষ্টা করেছেন তার উদাহরণ সরবরাহ করতে পারেন? আপনি প্রাটের জন্য পরামিতিগুলির একটি খুব নির্দিষ্ট উদাহরণ দেন তবে matplotlib.specgram এর জন্য একই কনফিগারেশনটি দেখান না?
ক্রিস্টোফার ফেল্টন

উত্তর:


11

এখানে matplotlib.specgram পরামিতি রয়েছে

matplotlib.mlab.specgram(x, 
                         NFFT=256, 
                         Fs=2, 
                         detrend=<function detrend_none at 0x1dd6410>, 
                         window=<function window_hanning at 0x1e0b1b8>, 
                         noverlap=128, 
                         pad_to=None, 
                         sides='default', 
                         scale_by_freq=None)

প্রশ্ন বর্ণনায় প্রদত্ত প্যারামিটারগুলিকে তুলনীয় mpl.specgram পরামিতিগুলিতে রূপান্তর করতে হবে। নিম্নলিখিতটি ম্যাপিংয়ের একটি উদাহরণ:

View range: 0-8000Hz            Fs=16000
Window length: 0.005s           NFFT = int(Fs*0.005) = 80
                                noverlap = int(Fs*0.0025) = 40
Dynamic range: 70dB             n/a
Time steps: 1000                n/a
Frequency steps: 250            
Window shape: Gaussian          default window is hanning change to gaussian

আপনি যদি 8 এমএস ব্যবহার করেন তবে আপনি 2 এফএফটি (128) পাওয়ার পাবেন। নীচে তাদের ওয়েবসাইট থেকে প্রাত সেটিংসের বিবরণ দেওয়া হল

পরিসর দেখুন (হার্জেড) : প্রদর্শনের জন্য ফ্রিকোয়েন্সিগুলির ব্যাপ্তি। মানটি নীচে 0 Hz এবং শীর্ষে 5000 Hz z যদি এই সর্বাধিক ফ্রিকোয়েন্সিটি সাউন্ডের Nyquist ফ্রিকোয়েন্সি (যা তার নমুনা সংক্রান্ত অর্ধেকের অর্ধেকের চেয়ে বেশি) হয় তবে বর্ণালীতে কিছু মান শূন্য হবে এবং উচ্চতর ফ্রিকোয়েন্সি সাদা রঙে আঁকা হবে। আপনি যদি 44100 হার্জেড একটি সাউন্ড রেকর্ড করেন এবং 0 হার্জ থেকে 25000 হার্জ থেকে দেখার পরিসরটি সেট করেন তবে আপনি এটি দেখতে পারেন।

উইন্ডোর দৈর্ঘ্য : বিশ্লেষণ উইন্ডোর সময়কাল। যদি এটি 0.005 সেকেন্ড হয় (মান), প্রাত প্রতিটি ফ্রেমের জন্য শব্দের অংশটি 0.0025 সেকেন্ডের আগে এবং সেই ফ্রেমের কেন্দ্রের পরে 0.0025 সেকেন্ডের মধ্যে ব্যবহার করে (গাউসিয় উইন্ডোগুলির জন্য, প্রাত আসলে এর চেয়ে কিছুটা বেশি ব্যবহার করে)। উইন্ডোটির দৈর্ঘ্য বর্ণালী বিশ্লেষণের ব্যান্ডউইথথ নির্ধারণ করে, যেমন খাঁটি সাইন ওয়েভের বর্ণালীতে অনুভূমিক রেখার প্রস্থ (নীচে দেখুন)। গাউসির উইন্ডোর জন্য -3 ডিবি ব্যান্ডউইথটি 2 * স্কয়ার্ট (6 * এলএন (2)) / (π * উইন্ডো দৈর্ঘ্য), বা 1.2982804 / উইন্ডো দৈর্ঘ্য। একটি broad-band' spectrogram (bandwidth 260 Hz), keep the standard window length of 5 ms; to get aসংকীর্ণ-ব্যান্ড 'স্পেকট্রামগ্রাম (ব্যান্ডউইথ 43 হার্জেড) পেতে, এটি 30 এমএস (0.03 সেকেন্ড) এ সেট করুন। অন্যান্য উইন্ডো আকারগুলি কিছুটা আলাদা মান দেয়।

ডায়নামিক রেঞ্জ (ডিবি) : ডায়নামিক রেঞ্জের ডিবি সর্বাধিকের নীচে (সম্ভবত গতিশীল সংক্ষেপণের পরে, অ্যাডভান্সড স্পেকট্রগ্রাম সেটিংস দেখুন ...) সমস্ত মান সাদাতে আঁকা হবে। এর মধ্যে মানগুলির মধ্যে ধূসর বর্ণের উপযুক্ত ছায়া রয়েছে। সুতরাং, যদি স্পেকট্রামের সর্বোচ্চ শিখরের উচ্চতা 30 ডিবি / এইচজেড হয় এবং গতিশীল পরিসীমা 50 ডিবি (যা মান মান), তবে -20 ডিবি / এইচজেডের নীচের মানগুলি সাদা রঙে আঁকা হবে এবং এর মধ্যে মানগুলি হবে -20 ডিবি / হার্জেড এবং 30 ডিবি / এইচজেড বিভিন্ন ধূসর ছায়ায় আঁকা হবে।

প্রাত সেটিংসের লিঙ্ক

ওপির প্রশ্নটি প্রাত স্প্যাগগ্রাম এবং এমপিএল (ম্যাটপ্লোটিলিব) স্প্যাগগ্রামের মধ্যে বিপরীত পার্থক্য সম্পর্কিত হতে পারে। প্রাতের একটি ডায়নামিক রেঞ্জ সেটিংস রয়েছে যা বিপরীতে প্রভাব ফেলে। এমপিএল ফাংশনটির অনুরূপ সেটিং / প্যারামিটার নেই। এমপিএল.স্পেকগ্রামটি 2D অ্যারে পাওয়ার লেভেলের অ্যারেটি (স্পেকট্রগ্রাম) প্রদান করে যা ডায়নামিক রেঞ্জটি রিটার্ন অ্যারেতে প্রয়োগ করা যেতে পারে এবং পুনরায় প্লট করা যায়।

নীচে প্লটগুলি তৈরি করার জন্য নীচে একটি কোড স্নিপেট। উদাহরণটি হ'ল 20Hz-8000Hz থেকে চিপযুক্ত ~ 1m15s এর বক্তৃতা।

import numpy
import pylab
import wave
import array
pylab.close('all')
w1 = wave.open('example_no_noise.wav')
w2 = wave.open('example_noise.wav')
# hmmm, probably a better way to do this, scipy.io function?
x1 = numpy.array(array.array('h', w1.readframes(w1.getnframes())))
x2 = numpy.array(array.array('h', w2.readframes(w2.getnframes())))
x1 = x1 / (2.**(16-1))  # normalize
x2 = x2 / (2.**(16-1))  # normalize
Fs = 16000.
NFFT = int(Fs*0.005)  # 5ms window
noverlap = int(Fs*0.0025)
pylab.figure(1)
pylab.specgram(x1, NFFT=NFFT, Fs=Fs, noverlap=noverlap, 
               cmap=pylab.get_cmap('Greys'))
pylab.title('Full 1m15s example min noise')
pylab.figure(2)
pylab.specgram(x2, NFFT=NFFT, Fs=Fs, noverlap=noverlap, 
               cmap=pylab.get_cmap('Greys'))
pylab.title('Full 1m15s example more noise')
pylab.figure(3); n=2100*176;
pylab.specgram(x2[n:n+256*256], NFFT=NFFT, Fs=Fs, noverlap=noverlap, 
               cmap=pylab.get_cmap('Greys'))
pylab.title('Full ~4s example min noise')
pylab.figure(4); pylab.plot(x1[n:n+256*256])


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

6

এটি একটি সময় / ফ্রিকোয়েন্সি রেজোলিউশন সমস্যা বলে মনে হচ্ছে। আপনার প্রাত প্লটের আরও খারাপ ফ্রিকোয়েন্সি রেজোলিউশন রয়েছে (আপনি স্পষ্টভাবে সুরেলাও দেখতে পারবেন না) এবং আরও ভাল সময়ের রেজোলিউশন রয়েছে। উইন্ডোর আকার (NFFT) 16000 x 0.05 = 80 নমুনায় হ্রাস করার চেষ্টা করুন। আমি প্যাড টুতে (128 বা 256) 2 এর বড় শক্তি ব্যবহার করার পরামর্শ দিই।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.