• Автор
    Тема
  • #118337
    4296-150
    ozyabkin
    Участник

    Нам необходимо определить частотные характеристики системы при возвратно-поступательном движении так, если бы это было поступательным движением с сохранением характера фрикционных автоколебаний при прямом и обратном движении.
    Подскажите, пожалуйста, возможно применение преобразования Гильберта для расчёта огибающей такого сигнала?

    На рисунке представлены результаты измерений и расчёта огибающей Гильберта после фильтрации полосовым пропускающим фильтром в диапазоне частот 0,1 … 650 Гц (частота дискретизации 1250 Гц).
    Результаты измерений и расчёта огибающей функции преобразованием Гильберта
    На рисунке (https://yadi.sk/i/CqVtMRm45-9mDA) видно, что характер огибающей неверно отражает характер измеренных данных в диапазоне значений 90…130 Н и -90…-150 Н.
    Вы не подскажите, как разработать алгоритм преобразования.

  • Автор
    Ответы
  • #118338
    4296-150
    ozyabkin
    Участник

    Привожу текст программы

    Function HILBERT(ByRef X() As Single, ByVal TS As Double, ByVal WMIN As Double, ByVal WMAX As Double) As Single()
                Try
                    Dim DEN() As Complex = {Nothing, COMPLEXUNITY()}
                    Dim NUM(), Z() As Complex
                    Dim WP(2) As Double
                    Dim Y() As Single
                    Dim I, N As Integer
                    WP(1) = WMIN   ' Нижняя частота среза 
                    WP(2) = WMAX   ' Верхняя частота среза 
                    ' Нормировать к частоте Найквиста
                    For I = 1 To 2
                        WP(I) = WP(I) * TS ' Конец полосы пропускания
                        Select Case WP(I)
                            Case Is <= 0
                                WP(I) = 0.01
                            Case Is > 0.499
                                WP(I) = 0.499
                        End Select
                    Next I
                    ' Синтез нерекурсивного полосового фильтра с использованием весовых окон
                    NUM = Fir1(30, WP, Filtertype.BandPass)
                    ' Фильтровать исходные данные
                    Y = filtfilt(NUM, DEN, X)
                    ' Вычислить преобразование Гильберта
                    Z = Hilbert2(Y)
                    ' Сформировать огибающую сигнала
                    N = Z.GetUpperBound(0)
                    ReDim Y(N)
                    For I = 1 To N
                        Y(I) = CSng(Rho(Z(I)))
                    Next I
                    Return Y
                Catch E As Exception
                    Throw New ArgumentException(E.Message)
                End Try
            End Function
            Function Hilbert2(ByVal X() As Single) As Complex()
                Try
                    Dim J, K, M, N, NFFT As Integer
                    N = X.GetUpperBound(0)
                    Dim XSEG() As Complex = fft(X)
                    NFFT = XSEG.GetUpperBound(0)
                    Dim H(NFFT) As Integer
                    K = CInt(2 * Fix(N * 0.5))
                    If K = N Then
                        M = CInt(N * 0.5)
                        H(1) = 1
                        H(M + 1) = 1
                    Else
                        M = CInt((N + 1) * 0.5)
                        H(1) = 1
                    End If
                    For J = 2 To M
                        H(J) = 2
                    Next J
                    For J = 1 To NFFT
                        XSEG(J) *= H(J)
                    Next J
                    XSEG = fft(XSEG, IFFT:=True)
                    ReDim Preserve XSEG(N)
                    Return XSEG
                Catch E As Exception
                    Throw New ArgumentException(E.Message)
                End Try
            End Function

Для ответа в этой теме необходимо авторизоваться.

Авторизация
*
*

Потеряли пароль?

Политика конфиденциальности персональных данных

Регистрация
*
*
*

Политика конфиденциальности персональных данных

Генерация пароля