我试图为freq保留一个值。 每次我调用函数cut,它都会改变它。 在堆栈溢出时,我发现put [:]应该可以工作,但是在我的代码中它并没有。我使用剪切功能将值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()
答案 0 :(得分:-1)
创建一个如下所示的新列表: new_lst = [f为f in freq]