আমি একটি সংকেত ডেসিমেট করার সাথে পরীক্ষা করছি, এক্ষেত্রে ইউনিট প্রেরণা।
আমি পাইথন ব্যবহার করছি প্রথমত, আমি একটি ইউনিট আবেগ তৈরি করি, এবং এটি 5 দ্বারা হ্রাস করে।
x = r_[zeros(0), 1, zeros(100)]
N = 2 ** 14
q = 5
y = decimate(x, q, ftype="fir")
subplot(211)
title("Original")
stem(range(len(x)), x)
subplot(212)
title("Decimated - FIR")
stem(range(len(y)), y)
figure()
subplot(211)
semilogx(log(abs(fft(x, N))))
subplot(212)
y = decimate(x, q, ftype="fir")
semilogx(log(abs(fft(y, N))))
নিম্নলিখিত প্লটগুলির সাথে এটির ফলাফল
আমি তারপরে এক্সে পরিবর্তন করে প্রেরণের আগে বিলম্বের কয়েকটি নমুনা যুক্ত করি:
x = r_[zeros(3), 1, zeros(100)]
এটি নিম্নলিখিত প্লটগুলির ফলাফল
প্লটের দ্বিতীয় সেটগুলিতে, ফলস্বরূপ ডেসিমেটেড সংকেতটি এখন কোনও একক নমুনা নয়, তবে এটি বিকৃত করা হয়েছে।
যদি আমি 5 - এবং কোনও কিউ - নমুনার সাথে সংকেতটি বিলম্ব করি তবে আমি প্রথম প্লটের প্রথম সেট পাই।
ডেসিমেট ফাংশনের উত্স কোডটি হল, https://github.com/scipy/scipy/blob/master/scipy/signal/signaltools.py#L1570
def decimate(x, q, n=None, ftype='iir', axis=-1):
if not isinstance(q, int):
raise TypeError("q must be an integer")
if n is None:
if ftype == 'fir':
n = 30
else:
n = 8
if ftype == 'fir':
b = firwin(n + 1, 1. / q, window='hamming')
a = 1.
else:
b, a = cheby1(n, 0.05, 0.8 / q)
y = lfilter(b, a, x, axis=axis)
sl = [slice(None)] * y.ndim
sl[axis] = slice(None, None, q)
return y[sl]
আমি ডেসিমেট করার আগে একটি কম লো ফিল্টার ব্যবহার করছি, ফিল্টারটির প্রেরণামূলক প্রতিক্রিয়া
এটি ব্যাখ্যা করে যে বিলম্ব হওয়ার পরে কেন অনুপ্রবেশটি বিকৃত হয়, ডেসিমেশনটি অনুপ্রেরণামূলক প্রতিক্রিয়ার অংশগুলি নির্বাচন করে, যখন বিলম্বটি ডেসিমেশনের একাধিক হয়, এটি কেবল আবেগ প্রতিক্রিয়াটির শূন্যটি এবং একটিতে শূন্যের নমুনা নির্বাচন করে at শিখর.
স্বেচ্ছাসেবী বিলম্বের সাথে ইউনিট নমুনাকে খতম করার কোনও উপায় আছে, যার ফলস্বরূপ একটি মাপানো ইউনিট নমুনা আউটপুট?