# 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')
# 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,
# 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
# 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')