找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

手机号码,快捷登录

Flux电机有限元分析教程西莫团购入口 | 奖励入口当当网购物入口 | 奖励入口欢迎使用!西莫论坛App开放下载Motor-CAD电机多物理域设计教材购买入口 | 奖励入口
★新会员论坛须知★《西莫电机技术》第39期发售火热进行中Flux电机电磁阀有限元分析教程团购入口 | 奖励入口论坛微信公众平台欢迎入驻
西莫电机及相关产品供需交流群开放邀请★ 论坛VIP会员申请 ★Motor-CAD.MANATEE电磁热振动噪声教程 | 奖励入口西莫团队欢迎您的加盟!
宣传推广合作请联系QQ:25941174西莫电机论坛微信群正式开放Flux变压器与电抗器有限元分析团购入口 | 奖励入口西莫电机论坛技术版区QQ群汇总
查看: 2058|回复: 8

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

[复制链接]

签到天数: 2 天

连续签到: 1 天

[LV.1]初来乍到

发表于 2021-8-6 13:58 | 显示全部楼层 |阅读模式 来自: 中国辽宁

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

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

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

签到天数: 47 天

连续签到: 1 天

[LV.5]常住居民I

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

评分

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

查看全部评分

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

使用道具 举报

签到天数: 6 天

连续签到: 2 天

[LV.2]偶尔看看I

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

使用道具 举报

该用户从未签到

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

使用道具 举报

签到天数: 1 天

连续签到: 1 天

[LV.1]初来乍到

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

使用道具 举报

签到天数: 2 天

连续签到: 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 感谢分享

查看全部评分

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

使用道具 举报

签到天数: 2 天

连续签到: 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这样的分数阶次;
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

签到天数: 48 天

连续签到: 5 天

[LV.5]常住居民I

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

使用道具 举报

签到天数: 48 天

连续签到: 5 天

[LV.5]常住居民I

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

使用道具 举报

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

本版积分规则

西莫电机论坛微信公众平台欢迎您的关注!

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

GMT+8, 2024-12-24 02:52 , Processed in 0.059541 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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