Как исправить мой фильтр низких частот и код ресэмплинга - PullRequest
0 голосов
/ 11 апреля 2019

Я новичок в анализе сигналов и вибрации.У меня есть датчик вибрации, который собирает данные с F: 65536 Гц

Я применил фильтр нижних частот для Fn: 30000 Гц

Затем я пересэмплировал данные, чтобы получить новыйНизкая частота.

Фильтр нижних частот, использованный в моем коде, был взят по этой ссылке: Создание фильтра нижних частот в SciPy - понимание методов и единиц измерения

def butter_lowpass(cutoff, fs, order=5):
    nyq = 0.5 * fs
    normal_cutoff = cutoff / nyq
    b, a = butter(order, normal_cutoff, btype='low', analog=False)
    return b, a

def butter_lowpass_filter(data, cutoff, fs, order=5):
    b, a = butter_lowpass(cutoff, fs, order=order)
    y = lfilter(b, a, data)
    return y


# Filter requirements.
order = 6
fs = 65536.0      # sample rate, Hz
cutoff = 15000  # desired cutoff frequency of the filter, Hz

data =d
length= len(d)

# Get the filter coefficients so we can check its frequency response.
b, a = butter_lowpass(cutoff, fs, order)

# Plot the frequency response.
w, h = freqz(b, a, worN=8000)
plt.subplot(2, 1, 1)
plt.plot(0.5*fs*w/np.pi, np.abs(h), 'b')
plt.plot(cutoff, 0.5*np.sqrt(2), 'ko')
plt.axvline(cutoff, color='k')
plt.xlim(0, 0.5*fs)
plt.title("Lowpass Filter Frequency Response")
plt.xlabel('Frequency [Hz]')
plt.grid()


# Demonstrate the use of the filter.
T = length * (1/ fs)         # seconds 
n = int(T * fs) # total number of samples
t = np.linspace(0, T, n, endpoint=False)


# Filter the data, and plot both the original and filtered signals.
y = butter_lowpass_filter(data, cutoff, fs, order)

plt.figure(figsize=(20,10))
plt.subplot(211)
plt.plot(t, data, 'b-', label='data')
plt.title('Sensor Data')
plt.subplot(212)
plt.plot(t, y, 'g-', linewidth=2, label='filtered data')
plt.title('filtered signal')
plt.show()

f = signal.resample (y,50000) #there is a mistake here try asking for help to figure out how this really works 

length= len(d)
fs = 65536.0
T = length * (1/ fs)         # seconds 
n = int(T * length) # total number of samples
t = np.linspace(0, T, 50000, endpoint=False)

xnew = np.linspace(0,1000,50000,endpoint=False)

plt.figure(figsize=(20,10))
plt.plot(t, f, 'o-', linewidth=2, label='filtered data')
plt.title('Filtered -Resampled signal')
plt.show()


...