DFT
`X[k]=sum_(n=0)^(N-1)x[n]e^(-j2 pi kn // N) k=0,...,N-1`
n: discrete time index (normalized time, T=1)
k: discrete frequency index
`omega_k = 2 pi k // N` : frequency in radians
`f_k = f_s k // N`: frequency in Hz ( `f_s` - sampling rate)
`=>`
Complex DFT
`X[k]=sum_(n=0)^(N-1)e^(j2 pi f_0 n + phi)e^(-j2 pi kn // N) k=0,...,N-1`
`=>` ` e^(j phi) (1-e^(-j2 pi (k // N - f_0) N)) / (1-e^(-j2 pi (k // N - f_0))) `
IDFT
`x[n]= 1/N sum_(k=0)^(N-1)X[k]e^(j2 pi kn // N) n=0,...,N-1`
IDFT for real signals
`X[k]=|X[k]|e^(j < X[k])` and `X[-k]=|X[k]| e^(-j < X[k])` for k=0,1,...N/2-1
Upd. https://github.com/MTG/sms-tools
`X[k]=sum_(n=0)^(N-1)x[n]e^(-j2 pi kn // N) k=0,...,N-1`
n: discrete time index (normalized time, T=1)
k: discrete frequency index
`omega_k = 2 pi k // N` : frequency in radians
`f_k = f_s k // N`: frequency in Hz ( `f_s` - sampling rate)
`=>`
Complex DFT
`X[k]=sum_(n=0)^(N-1)e^(j2 pi f_0 n + phi)e^(-j2 pi kn // N) k=0,...,N-1`
`=>` ` e^(j phi) (1-e^(-j2 pi (k // N - f_0) N)) / (1-e^(-j2 pi (k // N - f_0))) `
def DFT(x): """ Input: x (numpy array) = input sequence of length N Output: The function should return a numpy array of length N X (numpy array) = The N point DFT of the input sequence x """ ## Your code here N = len(x) r = -1j*2*np.pi/N iterable = (sum((x[n]*np.exp( r*n*k) for n in range(N) ), 0.0) for k in range(N)) return np.fromiter( iterable, np.complex)
IDFT
`x[n]= 1/N sum_(k=0)^(N-1)X[k]e^(j2 pi kn // N) n=0,...,N-1`
def DFT(x): """ Input: x (numpy array) = input sequence of length N Output: The function should return a numpy array of length N X (numpy array) = The N point DFT of the input sequence x """ ## Your code here N = len(x) r = -1j*2*np.pi/N iterable = (sum((x[n]*np.exp( r*n*k) for n in range(N) ), 0.0) for k in range(N)) return np.fromiter( iterable, np.complex)
IDFT for real signals
`X[k]=|X[k]|e^(j < X[k])` and `X[-k]=|X[k]| e^(-j < X[k])` for k=0,1,...N/2-1
def IDFT(X): """ Input: X (numpy array) = frequency spectrum (length N) Output: The function should return a numpy array of length N x (numpy array) = The N point IDFT of the frequency spectrum X """ ## Your code here N = len(X) r = 1j*2*np.pi/N iterable = (sum((X[k]*np.exp( r*n*k) for k in range(N) ), 0.0)/N for n in range(N)) return np.fromiter( iterable, np.complex)
Upd. https://github.com/MTG/sms-tools
No comments:
Post a Comment