• 加速度->速度->位移变换


            CWDSP1.ReFFT RealData, RealSpec, ImgData
            CWDSP1.ReFFT RealData, RealSpecA, ImgDataA
            CWDSP1.ReFFT RealData, RealSpecV, ImgDataV
            CWDSP1.ReFFT RealData, RealSpecS, ImgDataS
    '======================
            Dim fValue As Single
            
           
            Dim TotalfValue1 As Double
            Dim TotalfValue2 As Double
            
            For n = 0 To gnCount - 1
    
                    fValue = RealSpec(n)
                     RealSpecA(n) = RealSpec(n)
                     ImgDataA(n) = ImgData(n)
                   ' RealSpec(n) = Sqr(RealSpec(n) * RealSpec(n) + ImgData(n) * ImgData(n)) / gnCount * 20.15982721
                    RealSpec(n) = 2 * Sqr(RealSpec(n) * RealSpec(n) + ImgData(n) * ImgData(n)) / gnCount '* (1000 / 10.16)
    
            Next
            
            RealSpec(0) = 0
            
            For n = 0 To UBound(RealSpec)
                    '第n个频率点对于的频率值
                    ' RealData(n) = n  / (1 * UBound(RealSpec))* frequency
                    RealData(n) = n * (frequency / (1 + UBound(RealSpec))) 'frequency 'Pacer.Value   '1# * 50 / (0.001 * (liloop + 1))
            Next
                
             '显示加速度波形
            CWGFrequencey.Axes(2).Caption = "加速度"
            CWGFrequencey.Axes(1).AutoScale = True
            '设置幅频波形的最大频率
            CWGFrequencey.Axes(1).Maximum = 2000
            CWGFrequencey.PlotXvsY RealData, RealSpec
            '设置幅频波形的最大频率
            CWGFrequencey.Axes(1).Maximum = 2000
            CWGFrequencey.Refresh
            
            
           ' TestVIBData
           '////////////统计加速度 速度 位移 (最大值,有效值)(有效值,峰值)//////////////////////////////
            For n = 1 To gnCount - 1
             
                If RealData(n) <> 0 Then
                    '速度的实轴 和 虚轴
                    RealSpecV(n) = 1000 * ImgDataA(n) / (2 * Pi * RealData(n))
                    ImgDataV(n) = -1000 * RealSpecA(n) / (2 * Pi * RealData(n))
                    
                    '位移的实轴 和 虚轴
                    RealSpecS(n) = -1000 * RealSpecA(n) / ((2 * Pi * RealData(n)) * (2 * Pi * RealData(n)))
                    ImgDataS(n) = -1000 * ImgDataA(n) / ((2 * Pi * RealData(n)) * (2 * Pi * RealData(n)))
                End If
            Next
            
            '快速傅里叶逆变换求出速度
            CWDSP1.ReInvFFT RealSpecV, ImgDataV, RealDataV
    
            If InStr(AfxPkModelParameter.strProjectParameter(6), "最大值") <> 0 Then
                  Call CWArray1.MaxMin1D(RealDataV, fMax, nMaxIndex, fMin, nMinIndex)
                  TestReturnVIBData(1, 1) = fMax
                   '提取每次测试的最大值
                  If TestVIBData(1, 0) <= fMax Then
                        TestVIBData(1, 0) = fMax
                  End If
            Else
                  TotalfValue0 = 0
                  For n = 0 To UBound(RealData)
                        TotalfValue0 = TotalfValue0 + RealDataV(n) * RealDataV(n)
                  Next
                  If UBound(RealDataV) > 1 Then
                        TestReturnVIBData(1, 1) = Sqr((TotalfValue0) / (UBound(RealDataV) - 1))
                  Else
                        TestReturnVIBData(1, 1) = 0
                  End If
                  '统计有效值
                  TestVIBData(1, 1) = TestVIBData(1, 1) + TestReturnVIBData(1, 1)
            End If
    
            '快速傅里叶逆变换求出位移
            CWDSP1.ReInvFFT RealSpecS, ImgDataS, RealDataS
            
             If InStr(AfxPkModelParameter.strProjectParameter(6), "最大值") <> 0 Then
                  Call CWArray1.MaxMin1D(RealDataS, fMax, nMaxIndex, fMin, nMinIndex)
                  TestReturnVIBData(2, 1) = (fMax + fMin) * 1000
                    '提取每次测试的最大值
                  If TestVIBData(2, 0) <= TestReturnVIBData(2, 1) Then
                        TestVIBData(2, 0) = TestReturnVIBData(2, 1)
                  End If
            Else
                  TotalfValue0 = 0
                  For n = 0 To UBound(RealData)
                        TotalfValue0 = TotalfValue0 + RealDataS(n) * RealDataS(n)
                  Next
                  If UBound(RealDataS) > 1 Then
                        TestReturnVIBData(2, 1) = 2 * 1000 * Sqr((TotalfValue0) / (UBound(RealDataS) - 1))
                  Else
                        TestReturnVIBData(2, 1) = 0
                  End If
                  '统计有效值
                  TestVIBData(2, 1) = TestVIBData(2, 1) + TestReturnVIBData(2, 1)
            End If
            
    

      https://wenku.baidu.com/view/2592349a76eeaeaad1f330bc.html

    https://wenku.baidu.com/view/4e5efed0d15abe23482f4de3.html

    说到噪声,我想起了频谱分析的问题。稍微有些信号分析常识的工程师都知道要滤波,可是对于要滤除什么波,噪声从哪来却未必清楚,即使在获得频谱分析结果后,有些人仍然会问我,怎么纵坐标的数值不是想要的数值呢?为什么不是频率?大家当然需要知道,其实横坐标就是采样点数,并不是什么频率,频率其实是一个标量,或是一个无量纲量,通常情况下,我们把频率归一化到0~1范围内。

    而由采样定理可知,采样频率应该是原始信号最高频率的2倍,即如果采样50Hz工频交流电,那么最低采样频率应该是100Hz,LabWindows/CVI中的傅里叶变换(FFT),将呈现出以0~99为横坐标的频谱。由于FFT的对称性,我们只要关心横坐标的0~49就可以了,50~99为0~49的镜像,然后,再经过细微变换,把横坐标值转换为1~50就可以了。

    然而,FFT通常要求采样点数为2的n次方,因此,50 Hz工频交流电的最低采样频率(速率)应为每秒128个点(128Hz),在进行FFT计算后,只要将横坐标的0~63转换为1~64再显示出来就好了。如果每秒采样2次,那么能显示的最高频率也就是1Hz,无论你采集了到底是100个点还是1000个点。

    事实上,FFT一般情况下在各个频率段内都会有值存在,这是由于信号在采集过程中进行了时域截断处理,而造成的频谱分布的各态历经效果。但是,波形的高低及与横轴围成的面积决定了其能量的大小,对于频谱(或称为频谱密度函数),其能量的集中程度与集中范围才是我们最关心的。滤波操作其实就是对不需要的那部分能量进行短路处理,处理的结果是使其不经过负载设备,如果是软件滤波,就是让那些不需要的能量在计算中不被处理或以零的方式进行计算。

    因此,FFT的本质就是找到信号的能量分布特征波形,滤波的本质就是对不需要的那部分能量特征波形进行旁(短)路处理,使其消失。说白了就一句话,滤波是对能量分布的一种再分配,即能量处理方式。

  • 相关阅读:
    cs硕士妹子找工作经历【阿里人搜等互联网】
    EJB到底是什么,真的那么神秘吗??
    到底EJB是什么
    安全性测试:
    掌握 Promise 的逻辑方法
    VS2019 不能下载的解决办法
    Java8基础系列-Stream
    周期模型(典型的几种):
    软件生存周期及其模型是什么?
    试述软件的概念和特点?软件复用的含义?构件包括哪些?
  • 原文地址:https://www.cnblogs.com/zitjubiz/p/13621644.html
Copyright © 2020-2023  润新知