Files
GridCodes/measurements.py
2026-01-25 17:48:45 +01:00

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()