ошибка в определении Rs и Ls по моделируемым данным с использованием метода временной корреляции и круговой корреляции - PullRequest
0 голосов
/ 29 февраля 2020

Пожалуйста, прости меня, если установка слишком длинная, но меня часто просят дать больше контекста относительно того, что я пытаюсь сделать, когда я публикую что-то здесь.

В качестве упражнения я Я пытаюсь определить значения Rs и Ls, которые были использованы в цепи, из измерений Vin, Vout и опережающего / запаздывания фазы между ними. Я смоделировал схему, используя конкретное значение c для Rs и Ls. , а затем попытайтесь определить, какие эти значения были получены из измеренных данных. Пример схемы показан ниже, а также формы сигналов, полученные из него. circuit diagramwaveforms

LTSpice не производит выборку с одинаковыми интервалами, поэтому хитрость для восстановления данных с равномерной выборкой состоит в том, чтобы взять БПФ сигналов, а затем взять другое БПФ сигналов БПФ для восстановления данных временной области, теперь с равномерная выборка (LTSpice выполняет интерполяцию для FFT). Я делаю это, а затем экспортирую эти данные в сценарий Python, где я пытаюсь определить амплитуды Vo и Vi и фазовую задержку ,, между ними, а затем используйте эти значения для идентификации Rs и Ls по следующим формулам:

С vout,

затем enter image description here, где V1 и Vo - амплитуды синусоид, а enter image description here

Поэтому, исходя из величины и фазы Z, я могу определить значения R и L: enter image description here

enter image description here

С enter image description here

затем

eq10.

Проблема в том, что я получаю неправильный ответ, в основном из-за ошибки в вычислении фазовой задержки. Когда я определяю фазовую задержку с использованием курсоров на сигналах LTSpice или путем усреднения времени между пиками vi и vo (также находящимися программно) по многим периодам, я приближаюсь, но с большой ошибкой в ​​значении R. Итак, мне пришло в голову, что лучше использовать круговую взаимную корреляцию, но это тоже не работает - и я не знаю почему.

Когда я нахожу пики и временную задержку без cxcorr, вот что я получаю: phase delay no xcorr

Когда я использую круговую кросскорреляцию

from numpy.fft import fft, ifft

def periodic_corr(x, y):
    """Periodic correlation, implemented using the FFT.

    x and y must be real sequences with the same length.
    """
    return ifft(fft(x).conj() * fft(y)).real

xcorr=periodic_corr(vi,vo)
dly= np.argmax(xcorr)
print(dly)

plt.plot(time,vo,time+261241*deltaT,vi)

индекс максимальной корреляции возникает после 261241 смен, или ~ 30use c, что является практически последним смещенным положением, показанным ниже (deltaT = 1.1444091796875e-10): enter image description here

Итак, я не знаю, что я делаю не так. Я подумал, что это будет легко, поскольку данные, над которыми я работаю, моделируются и не имеют шума. Я должен быть в состоянии получить точные Rs и Ls, но есть кое-что, что я определенно делаю неправильно с xcorr, и я не должен быть достаточно точным, когда я нахожу пики и измеряю задержку для выполнения идентификации. Два метода, ни один из них не дает мне правильного ответа ...

Я могу поделиться данными, кодом python и т. Д. c, если кто-то заинтересован помочь выяснить, почему это, казалось бы, простое упражнение не является работает на меня.

Спасибо. Я отредактирую вопрос, когда у меня будет время, чтобы сделать его более кратким и конкретным.

...