59 lines
1.4 KiB
Python
59 lines
1.4 KiB
Python
import numpy as np
|
|
import matplotlib.pyplot as plt
|
|
|
|
import IIR_filter
|
|
|
|
import zerocross_meas
|
|
import fundamental_freq_meas
|
|
import fft_meas
|
|
|
|
|
|
class measurements(object):
|
|
"""docstring for fft_meas"""
|
|
def __init__(self, fs=50e3):
|
|
# Sample Frequency
|
|
self.fs = fs
|
|
# Sample Period
|
|
self.ts = 1/self.fs
|
|
|
|
# Low Pass Filter
|
|
# fs = Sample Frequency, fc = LP Cutoff Frequency
|
|
self.LPfilter = IIR_filter.IIR_1_Order_LP(fs=self.fs, fc=200)
|
|
|
|
|
|
|
|
# Zero Crossing Algorithem
|
|
# fs = Sample Frequency, fc = LP Cutoff Frequency
|
|
self.zerocross = zerocross_meas.zerocross_meas()
|
|
|
|
# Fundamental Frequency Algorithem
|
|
# fs = Sample Frequency, tn = Time Period for calculations
|
|
self.base_freq = fundamental_freq_meas.fundamental_freq_meas(fs=self.fs, tn=1)
|
|
|
|
# FFT Algorithem
|
|
# fs = Sample Frequency, tn = Time Period for calculations
|
|
# 61000-4-7 says 200ms
|
|
# 10-cycles for 50Hz
|
|
# 12-cycles for 60Hz
|
|
self.fft = fft_meas.fft_meas(fs=self.fs, tn=0.2)
|
|
|
|
|
|
def Interupt(self, y):
|
|
|
|
# Filter Input
|
|
y_hat = self.LPfilter.step(y)
|
|
# Zerocross detection (self.zerocross.flag)
|
|
self.zerocross.detect(y_hat)
|
|
# Calculate the Fundamental frequency (self.base_freq.freq)
|
|
self.base_freq.step(y_hat, self.zerocross.flag)
|
|
# Calculate the FFT of the signal
|
|
self.fft.step(y, self.base_freq.freq, unit="I")
|
|
|
|
|
|
def print(self):
|
|
print(self.base_freq.freq)
|
|
|
|
def plot(self):
|
|
self.fft.plot_Y_H()
|
|
|