美文网首页
09-28:DFT的Python实现

09-28:DFT的Python实现

作者: zengw20 | 来源:发表于2020-09-28 17:46 被阅读0次

上数字信号处理课的时候,仿佛自己是个傻子。

今天讲了DFT,不回顾一下明天就忘了。虽然FS、FT、DTFT、DFS这四种我已经忘了,但老师这些都不重要,只有DFT是可计算的。以下是我的DFT代码:

def myDFT(inputSig,isPrintW=False):
    '''
    输入:
        inputSig:指输入信号,我希望它是array格式。
        isPrintW:可以指定是否输出那个W矩阵
    输出:
        DFT计算出的结果
    '''
    sigLen = len(inputSig)
    n = np.arange(0,sigLen).reshape(1,sigLen)
    k = n.reshape(sigLen,1)
    base = np.exp(-1j*2*np.pi/sigLen) # 基低  
    w = np.dot(k,n)                   # 指数矩阵
    W = base**w                       # W矩阵
    
    outputSig = np.dot(W,inputSig)
    if isPrintW:
        return outputSig,W
    else:
        return outputSig

上述代码我纯粹是用下面的定义写的。对不对我还真不确定。


DFT定义.png

试试验证一下这个函数的效果。为了方便,从网上找一个离散信号,并做图。

N = 16
n = np.arange(N)
y = np.cos(2*np.pi*2*(n/N)+np.pi/3)+0.5*np.cos(2*np.pi*5*(n/N))
from matplotlib import pyplot as plt
%matplotlib inline
plt.stem(n, y) #茎叶图
plt.show()
离散信号.png

然后我用numpy自带的fft函数来运算一下这个信号,并做图。

re1 = np.fft.fft(y) #计算FFT
plt.stem(n,re1) #茎叶图
plt.show()
FFT变换.png

然后我用自己的函数来运算,并做图。

re2 = myDFT(y)
plt.stem(n,re2) #茎叶图
plt.show()
myDFT变换.png

Fine,至少从运算后的结果来看,效果是好的。我暂且认为myDFT实现了DFT变换。

欢迎交流讨论!

相关文章

网友评论

      本文标题:09-28:DFT的Python实现

      本文链接:https://www.haomeiwen.com/subject/emfjuktx.html