Python实现DFT

1.利用公式实现DFT:

参阅书上的公式定义可知,可利用Wn展开矩阵的形式实现;

# coding=GBK
import numpy as np
from numpy import arange, sin, pi, cos
import matplotlib.pyplot as plt

fs=8192
Ts=1/fs 
N=64    
n = np.arange(N)  
xn1=cos(2*pi*512.*n*Ts)+0.75*cos(2*pi*1024.*n*Ts)
#print (type(xn1))
#画出时域采样图
plt.subplot(311)
plt.stem(n,xn1,use_line_collection=True)
plt.xlabel('n')
plt.ylabel('xn')
plt.title('Time domain sampling')
my_x_ticks = np.arange(0, 70, 5)
my_y_ticks = np.arange(0, 3, 1)
plt.xticks(my_x_ticks)
plt.yticks(my_y_ticks)

#DFT
n = np.expand_dims(n, axis=1)         
k = n  
m = n.T * k / N                     
S = np.exp(1j * 2 * pi *m)
S=S.conjugate(S)
X2 = np.dot(xn1, S)

mX = np.abs(X2)
pX = np.angle(X2)

# plot the magnitude and phase
plt.subplot(312)
plt.stem(mX,use_line_collection=True)
plt.xlabel('k');
plt.ylabel('|X(K)|')
plt.title('Amplitude frequency characteristic')
my_x_ticks = np.arange(0, 70, 5)
my_y_ticks = np.arange(0, 50, 10)
plt.xticks(my_x_ticks)
plt.yticks(my_y_ticks)

plt.subplot(313)
plt.stem(n,pX,use_line_collection=True)
plt.xlabel('k');
plt.ylabel('φ(w)/rad');
plt.title('Phase frequency characteristics')
my_x_ticks = np.arange(0, 70, 5)
my_y_ticks = np.arange(-4, 5, 1)

该代码,将xn1先抽样成序列,之后进行DFT变换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值