西莫电机圈

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

手机号码,快捷登录

查看: 2041|回复: 8

[Maxwell] fft2D分解如何产生分数频率阶次

[复制链接]

签到天数: 1 天

连续签到: 1 天

[LV.1]初来乍到

发表于 2021-8-6 13:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我看到一片论文,分解出来的谐波频率存在分数频率阶次,请问依靠Maxwell提供的fft2D脚本如何实现? 或者有无别的方式进行fft2D分解生成所需要的分数频率阶次?
1628229350169310_14.png
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过

签到天数: 23 天

连续签到: 4 天

[LV.4]偶尔看看III

发表于 2021-8-6 15:05 | 显示全部楼层
Maxwell提供的fft2D 里面有详细的教程 请问一下 你这个大论文题目是?
微信截图_20210806150510.png

评分

参与人数 1西莫币 +6 收起 理由
梦想在望 + 6 感谢分享

查看全部评分

西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

签到天数: 3 天

连续签到: 1 天

[LV.2]偶尔看看I

发表于 2021-8-6 16:48 | 显示全部楼层
你用官方的文件进行FFT2或者自己写FFT2结果还是一样的啊,原理都是一样的还能分出什么其他的吗
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

该用户从未签到

发表于 2021-8-6 17:18 来自手机 | 显示全部楼层
请问论文题目是?
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

签到天数: 1 天

连续签到: 1 天

[LV.1]初来乍到

发表于 2021-8-6 22:40 | 显示全部楼层
方法都一样 根本就是对时间和空间都要进行分解
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

签到天数: 1 天

连续签到: 1 天

[LV.1]初来乍到

 楼主| 发表于 2021-8-7 11:23 | 显示全部楼层
# encoding: utf-8
##############################################################
#                                                   Imports
##############################################################
import os, sys,clr
from BaseExampleUDO import BaseExampleUDOClass
from math import *
clr.AddReference("System.Windows.Forms")
clr.AddReference("System.Drawing")
from System.Windows.Forms import *
from System.Drawing import *
import datetime

# 定义输出FFT_data的数据类型,0:幅值, 1:复数
data_type = 0


def dft(x, inverse=False):
    N = len(x)
    inv = -1 if not inverse else 1
    X = [0] * N
    for k in range(N):
        for n in range(N):
            X[k] += x[n] * e ** (inv * 2j * pi * k * n / N)
        if inverse:
            X[k] /= N
    return X


def dft2(x):
    y = [dft(a) for a in x]
    y = [dft(a) for a in zip(*y)]
    y = zip(*y)
    return y

def myfun(aaa):
    aaa = list(aaa)
    for j in range(len(aaa)):
        for i, a in enumerate(aaa):
            try:
                if a.isdigit() and aaa[i + 1].isalpha():
                    del aaa[i + 1]
            except:
                break
    return ''.join(aaa)

class UDOExtension(BaseExampleUDOClass):
    _kOutputs = [['Mag', '']]
    _kDynamicProbes = []
    _kInputs = []
    reportName = "FieldReport"

    def __init__(self):
        for vName, unit in self._kOutputs:
            self.Data.AddDoubleQuantity("FFT2D", vName, unit)

        sweepNames = ["Distance", "Time"]
        self.Data._sweepNames = sweepNames
        self.Data.AddDoubleProbe(self.reportName, "Select a transient field quantity", "Fields", "AirgapLine")
        self._kInputs.append(["Order of time domain", '0', 'Multiples of fundamental electric frequency'])
        self._kInputs.append(["Order of space domain", '0', 'Number of spatial modes, can be positive or negative'])
        self._kInputs.append(["Export FFT2D datatable ?", ['Yes', 'No'], 'Select Yes or No'])
        self._kInputs.append(
            ["Maximum time order", '0', 'The largest number of time domain order to export, input 0 for all orders'])
        self._kInputs.append(
            ["Maximum space order", '0', 'The largest number of space domain order to export, input 0 for all orders'])


    # -- ISA IUDOPluginExtension --------------
    def GetUDSDescription(self):
        return "FFT2D"

    # -- ISA IUDOPluginExtension --------------
    def GetUDSName(self):
        return "FFT2D"

    # -- ISA IUDOPluginExtension --------------
    def GetInputUDSParams(self, udsParams, propList, userSelectedDynamicProbes):
        # call base class to fill in the uds params
        BaseExampleUDOClass.GetInputUDSParams(self, udsParams, propList, userSelectedDynamicProbes)

        for name, value, description in self._kInputs:
            if isinstance(value, list):
                prop = propList.AddMenuProperty(name, value)
            else:
                prop = propList.AddNumberProperty(name, value)
            prop.Description = description

    def Compute(self, inData, outData, params, progMon):
        sweepNames1 = inData.GetSweepNamesForProbe(self.reportName)
        time = inData.GetSweepsDataForProbe(self.reportName, sweepNames1[1])
        distance = inData.GetSweepsDataForProbe(self.reportName, sweepNames1[0])
        data = inData.GetDoubleProbeData(self.reportName)

        distance = list(set(distance))
        distance.sort()
        distance = distance[:-1]

        time = list(set(time))
        time.sort()
        time = time[:-1]

        data = zip(*([iter(data)] * (len(distance) + 1)))
        data = [a[:-1] for a in data[:-1]]
        fft2_data = dft2(data)
        factor = len(time) * len(distance) / 2.0
        fft2_abs = [[abs(b) / factor for b in a] for a in fft2_data]
        fft2_abs[0][0] /= 2.0

        if data_type == 1:
            fft2_data = dft2(data)
            fft2_Complex = [[b / factor for b in a] for a in fft2_data]
            fft2_Complex[0][0] /= 2.0

        Order1 = params.GetNumberProperty(self._kInputs[0][0]).ValueSI
        Order2 = params.GetNumberProperty(self._kInputs[1][0]).ValueSI

        if Order2 < 0:
            Order2 += len(distance)
        Outputs = [fft2_abs[(len(time) - int(Order1)) % len(time)][int(Order2)]]

        outData.SetSweepsData("Distance", [0.0])
        outData.SetSweepsData("Time", [0.0])

        for vName, value in zip(zip(*self._kOutputs)[0], Outputs):
            outData.SetDoubleQuantityData(vName, [value])

        export = params.GetMenuProperty(self._kInputs[2][0]).SelectedMenuChoice
        if export == 'Yes':
            max_time_order = params.GetNumberProperty(self._kInputs[3][0]).ValueSI
            max_space_order = params.GetNumberProperty(self._kInputs[4][0]).ValueSI
            path = os.getcwd()
            csv_path = os.path.join(path, 'FFT2D_data.csv')

            if data_type == 1:
                fft2_abs = list(fft2_Complex)

            new_fft2_abs = fft2_abs[1:]
            new_fft2_abs.append(fft2_abs[0])
            export_data = list(reversed(new_fft2_abs))
            new_export_data = []
            if int(max_space_order) == 0:
                if len(distance) % 2 == 1:
                    max_space_order = (len(distance) - 1) / 2
                else:
                    max_space_order = (len(distance)) / 2 - 1

            if int(max_time_order) == 0:
                if len(time) % 2 == 1:
                    max_time_order = (len(time) - 1) / 2
                else:
                    max_time_order = (len(time)) / 2 - 1

            for each in export_data[0:int(max_time_order) + 1]:
                aa = []
                aa = (each[-int(max_space_order) + len(distance):])
                aa = aa + (each[0:int(max_space_order) + 1])
                new_export_data.append(aa)

            length = len(new_export_data)
            with open(csv_path, 'w') as file:
                file.write(
                    r'Time\Space,' + str(list(range(-int(max_space_order), int(max_space_order) + 1, 1))).strip(
                        '[').strip(']') + '\n')
                for i in range(length):
                    file.write(str(i) + ',' + str(new_export_data[i]).strip('[').strip(']') + '\n')
        return True

评分

参与人数 1西莫币 +6 收起 理由
梦想在望 + 6 感谢分享

查看全部评分

西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

签到天数: 1 天

连续签到: 1 天

[LV.1]初来乍到

 楼主| 发表于 2021-8-7 11:26 | 显示全部楼层
sakymuni16 发表于 2021-8-7 11:23
# encoding: utf-8
##############################################################
#                                                   Imports ...

这个就是Maxwell自带的脚本,无奈鄙人是代码小白,努力学习ing,也希望得到前辈指导!   修改哪一步代码才能生成我想要的time里面的分数阶次,比如1/30、29/30这样的分数阶次;
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

签到天数: 27 天

连续签到: 8 天

[LV.4]偶尔看看III

发表于 2022-10-17 22:53 | 显示全部楼层
你好,你这个论文的题目是什么呢?
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

签到天数: 27 天

连续签到: 8 天

[LV.4]偶尔看看III

发表于 2022-11-6 20:50 | 显示全部楼层
你好,楼主,这个论文名字是什么呢?多谢!
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|西莫电机圈 ( 浙ICP备10025899号-3 浙公网安备:33028202000436号

GMT+8, 2024-11-22 01:55 , Processed in 0.097212 second(s), 26 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表