Tôi đang thử nghiệm với việc xác định tín hiệu, trong trường hợp này là một xung đơn vị.
Tôi đang sử dụng Python, với pylab. Đầu tiên, tôi tạo một xung đơn vị và xác định nó bằng 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))))
Kết quả này với các ô sau
Sau đó tôi thêm một vài mẫu độ trễ trước xung lực, bằng cách thay đổi x thành:
x = r_[zeros(3), 1, zeros(100)]
Điều này dẫn đến các lô sau
Trong tập hợp các ô thứ hai, tín hiệu bị suy giảm kết quả không còn là một mẫu đơn lẻ mà đã bị biến dạng.
Nếu tôi trì hoãn tín hiệu với 5 - và bất kỳ bội số q - mẫu nào, tôi sẽ nhận được bộ ô đầu tiên.
Mã nguồn cho hàm decimate là, 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]
Tôi đang sử dụng bộ lọc thông thấp trước khi xác định, đáp ứng xung của bộ lọc là
Điều này giải thích tại sao xung bị biến dạng khi có độ trễ, số thập phân đang chọn các phần của đáp ứng xung, khi độ trễ là bội số của số thập phân, nó chỉ chọn số 0 của đáp ứng xung và một mẫu khác không tại đỉnh.
Có cách nào để ước lượng một mẫu đơn vị với độ trễ tùy ý, dẫn đến đầu ra mẫu đơn vị được chia tỷ lệ không?