pyhon实现matlab的czt算法

pyhon实现matlab的czt算法,第1张

背景

在移植matlab的算法程序到python中来发现,python中没有带czt算法的库函数,所以目前需要自己想办法解决一下。

实现
from scipy.fftpack import fft
import numpy as np
def czt(x, m=None, w=None, a=1):
    n = x.shape[0]
    if m is None:
        m = n
    if w is None:
        w = np.exp(-2j * np.pi / m)
    if not isinstance(x, np.ndarray):
        x = np.asarray(x, dtype=np.complex)
    # Length for power-of-two fft.
    nfft = 2 ** nextpow2(n + m - 1)
    # Premultiply data.
    k = np.arange(-n + 1, max((m, n))) ** 2 / 2
    ww = w ** k  # Chirp filter is 1./ww
    # nn = n-1 : 2*n-1
    aa = a ** (-np.arange(0, n)) * ww[n - 1:2 * n - 1]
    y = x * aa
    # Fast convolution via FFT.
    fy = np.fft.fft(y, nfft) * np.fft.fft(1 / ww[:m + n - 1], nfft)
    g = np.fft.ifft(fy)
    # Finally multiply Chirp filter.
    #print((g[n - 1:n + m - 1]).shape,(ww[n - 1:n + m - 1]).shape)
    return g[n - 1:n + m - 1] * ww[n - 1:n + m - 1]/100
def nextpow2(n):
    '''
    求最接近数据长度的2的整数次方
    An integer equal to 2 that is closest to the length of the data
    Eg:
    nextpow2(2) = 1
    nextpow2(2**10+1) = 11
    nextpow2(2**20+1) = 21
    '''
    return np.ceil(np.log2(np.abs(n))).astype('long')

我这里验证OK,这里我打印出我的参数。

    print(IQ41,N_CZT,W,A)
    CZT_IQ4=abs(czt(IQ41,N_CZT,W,A)) #ndarray

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/798463.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-06
下一篇 2022-05-06

发表评论

登录后才能评论

评论列表(0条)

保存