я пытаюсь сохранить значение для частоты.Каждый раз, когда я вызываю функцию cut, она меняет ее.При переполнении стека я обнаружил, что put [:] должно работать, но в моем коде это не такЯ использую функцию cut, чтобы присвоить значение 0 некоторым значениям fft, а затем делаю ifft, чтобы получить более чистый сигнал.
вот код:
import numpy as np
import matplotlib.pyplot as plt
#from scipy import signal
time=np.linspace(0,10, 10000)
sig=np.sin(np.pi*time*20)
plt.plot(time, sig)
plt.show()
def time_zero(t): #outputs a time array that begins from 0.
N=len(t) #number of total time points.
T=t[len(t)-1]-t[0]#total time in seconds
dt=T/N #each timespet
fs=N/T
t=np.arange(0,T,dt) #time array that begins from 0
return t,N,T,dt,fs
def transform (x,y):
t,N,T,dt,fs=time_zero(x)
fourier=np.fft.rfft(y, norm="ortho")
freq=np.fft.rfftfreq(N,dt)
return freq, fourier.real
# s=np.fft.ifft(fourier)
def intransform (freq,fourier):
t,N,T,dt,fs=time_zero(freq)
signal=np.fft.irfft(fourier,norm="ortho")
return signal
def cutter(freq,fft,cut):
t,N,T,dt,fs=time_zero(freq)
new_lst = fft[:][:] #makes a copy not just assigned the same value to
the name https://stackoverflow.com/questions/24171120/variable-changes-without-being-touched
for i in range (cut*int(fs),len(new_lst)):
new_lst[i]=0
return new_lst
freq, fft=transform(time,sig)
#
plt.plot(freq,fft)
plt.xlim(0,30)
plt.show()
cut=cutter(freq,fft, 3)
print (cut==fft)
plt.plot(freq,fft)
plt.xlim(0,30)
plt.show()
ifft=intransform(freq,fft)
#
plt.plot(time_zero(time)[0],ifft)
plt.show()