не может сделать глубокую переменную копирования продолжает меняться - PullRequest
0 голосов
/ 29 мая 2018

я пытаюсь сохранить значение для частоты.Каждый раз, когда я вызываю функцию 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()

1 Ответ

0 голосов
/ 30 мая 2018

Создайте новый список, как показано ниже: new_lst = [f для f в freq]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...