python实现FFT,IFFT

本文介绍了使用蝶形算法在Python中实现快速傅里叶变换(FFT)和逆快速傅里叶变换(IFFT),目前算法限制输入图片尺寸为2的幂,通过补0方式可扩展到任意尺寸。
摘要由CSDN通过智能技术生成

利用蝶形算法实现fft,以及ifft:我的算法还不太完整,只能输入图片长宽为2**n的图片,要改进只需要根据输入的长宽进行补0,使得长宽都为2的整数倍:

import math
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
# 复数类
class complex:
    def __init__(self):
        self.real = 0.0  # 实部
        self.imag = 0.0j  # 虚部 必须为int或者float类
# 复数乘法
def mul_ee(complex0, complex1):
    complex_ret = complex()
    complex_ret.real = complex0.real * complex1.real - complex0.imag * complex1.imag  # 实*实-虚*虚
    complex_ret.imag = complex0.real * complex1.imag + complex0.imag * complex1.real  # 实*虚+实*虚
    return complex_ret
# 复数加法
def add_ee(complex0, complex1):
    complex_ret = complex()
    complex_ret.real = complex0.real + complex1.real
    complex_ret.imag = complex0.imag + complex1.imag
    return complex_ret
# 复数减法
def sub_ee(complex0, complex1):
    complex_ret = complex()
    complex_ret.real = complex0.real - complex1.real
    complex_ret.imag = complex0.imag - complex1.imag
    return complex_ret

# 对输入数据进行按位倒叙排列(雷德算法)
def forward_input_data(input_data, num):
    j = num // 2
    for i in range(1, num - 2):
        if (i < j):
            complex_tmp = input_data[i]
            input_data[i] = input_data[j]
            input_data[j] = complex_tmp
            # print ("forward x[%d] <==> x[%d]" % (i, j))
        k = num // 2
        while (j >= k):
            j = j - k
            k = k // 2
        j = j + k
# 实现一维FFT
def fft_1d(in_data, num):
    
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值