栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

pyhon实现matlab的czt算法

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

pyhon实现matlab的czt算法

背景

在移植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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/849197.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号