Example #1
0
# filters
lowPassFilterCutoff = 200
fc = lowPassFilterCutoff/Fs
wc = fc *(2*np.pi) 
nyquistFrequency = np.pi
wc_normalized = wc/nyquistFrequency

b,a = scipySignal.butter(4,wc_normalized,btype='low',output='ba',analog=False)

# plot frequency response of filter
w,h =  scipySignal.freqz(b,a,worN=fftLen,whole=True)
w = copy(w*(Fs/(2*np.pi)))
o2.addFrequencyResponse(w,h,wc=lowPassFilterCutoff ,freqView='linear',ampView='log',frequencyResponseColor='C1',label="filter response, analog freq vs amplitude in db")

# filtering
filteredFFTAmplitude = np.multiply(fftPoints,h)
ifftSignal = copy(np.real(scipyFFT.ifft(filteredFFTAmplitude ,fftLen)))
ifftSignal = copy(ifftSignal[np.arange(0,len(s3.time))])

filteredDiscreteSignal =  signalType(time =s3.time,value = ifftSignal)

# reconstruction
dac = reconstructor()
reconstructedFilteredSignal = copy(dac.reconstructSignal(filteredDiscreteSignal,connectFilter='yes',lowPassCutoff=2000))
o1.addWaveform(reconstructedFilteredSignal,plotType='continious',plotColor='C3', plotLabel='filtered signal')




Example #2
0
# create analog signals.
"""
time duration of each signal = 0.3 sec
to maintain same data length for each signal in 1 sec time duration dataPerCycle has been changed, 
because for addition each should have same length
"""
f_10 = functionGenerator(dataPerCycle=1000)
f_100 = functionGenerator(dataPerCycle=100)
f_1000 = functionGenerator(dataPerCycle=10)

s_10 = copy(f_10.sinWaveformGenerate(frequency=10, noOfCycle=3))
s_100 = copy(f_100.sinWaveformGenerate(frequency=100, noOfCycle=30))
s_1000 = copy(f_1000.sinWaveformGenerate(frequency=1000, noOfCycle=300))

s_add = signalType()
s_add.time = copy(s_10.time)
s_add.value = copy(s_10.value + s_100.value + s_1000.value)

s = copy(
    f_10.addNoise(s_add, noiseType='gaussian', parameter1=0, parameter2=0.3))

Fs = 10000
adc = sampler()
s_sampled = adc.sampleSignal(s, samplingFrequency=Fs)

o1 = oscilloscope(title="plots", isSubPlot='yes')
o1.createSubplots(noOfRows=2, noOfColumns=2)
o1.addToSubplot(s,
                addToRows=0,
                addToColumns=0,
Example #3
0
# create analog signals.
"""
time duration of each signal = 1 sec
to maintain same data length for each signal in 1 sec time duration dataPerCycle has been changed, 
because for addition each should have same length
"""
f_10 = functionGenerator(dataPerCycle=1000)
f_100= functionGenerator(dataPerCycle=100)
f_1000= functionGenerator(dataPerCycle=10)

s_10 = copy(f_10.sinWaveformGenerate(frequency=10,noOfCycle=3))
s_100 =  copy(f_100.sinWaveformGenerate(frequency=100,noOfCycle=30))
s_1000 =  copy(f_1000.sinWaveformGenerate(frequency=1000,noOfCycle=300))

s_add = signalType()
s_add.time = copy(s_10.time)
s_add.value = copy(s_10.value + s_100.value +s_1000.value)

s = copy(f_10.addNoise(s_add,noiseType='gaussian',parameter1=0, parameter2=0.3))

Fs = 10000
adc = sampler()
s_sampled = adc.sampleSignal(s_add,samplingFrequency=Fs)

o1 = oscilloscope(title="Fourier analysis ",isSubPlot='yes')
o1.createSubplots(noOfRows=2,noOfColumns=2)
o1.addToSubplot(s_add,addToRows=0,addToColumns=0,plotTitle='Signals', plotColor='C0')
o1.addToSubplot(s_add,addToRows=0,addToColumns=1,plotTitle='Sampled Signals', plotType='discrete', plotColor='C0')

#FFT calculation
Example #4
0
# create analog signals.
"""
time duration of each signal = 1 sec
to maintain same data length for each signal in 1 sec time duration dataPerCycle has been changed, 
because for addition each should have same length
"""
f_10 = functionGenerator(dataPerCycle=1000)
f_100 = functionGenerator(dataPerCycle=100)
f_1000 = functionGenerator(dataPerCycle=10)

s_10 = copy(f_10.sinWaveformGenerate(frequency=10, noOfCycle=3))
s_100 = copy(f_100.sinWaveformGenerate(frequency=100, noOfCycle=30))
s_1000 = copy(f_1000.sinWaveformGenerate(frequency=1000, noOfCycle=300))

s_add = signalType()
s_add.time = copy(s_10.time)
s_add.value = copy(s_10.value + s_100.value + s_1000.value)

s = copy(
    f_10.addNoise(s_add, noiseType='gaussian', parameter1=0, parameter2=0.3))

Fs = 10000
adc = sampler()
s_sampled = adc.sampleSignal(s, samplingFrequency=Fs)
"""
o1 = oscilloscope(title = 'individual signals')
o1.addWaveform(s_10,plotColor='C0',plotLabel='10Hz signal')
o1.addWaveform(s_100,plotColor='C1',plotLabel='100Hz signal')
o1.addWaveform(s_1000,plotColor='C2',plotLabel='1000Hz signal')