Что за хлам в конце моего БПФ в LTSPICE?


8

Почему БПФ имеют мусор на высокочастотном конце? Предположим, я собираюсь смоделировать эту схему в LTSPICE:

схематический

смоделировать эту схему - схема, созданная с использованием CircuitLab

Где параметры синуса и симуляции LTSPICE:

SINE(0 1 1K 0 0 0 1000)
.tran 1 startup

Затем я прошу LTSPICE дать мне БПФ без окна и 1 000 000 баллов: FFT

Для чего все хлам в конце? Я бы ожидал только один скачок на 1 кГц, а не дополнительный на 3 кГц и т. Д. Это случается со всеми БПФ? Что контролирует шипы, которые вы получаете после своего основного?


Можете ли вы точно определить другие частоты? Все ли они нечетные кратные 1 кГц? В этом случае что-то искажает ваш «идеальный» синус, чтобы выглядеть более «прямоугольным», и это может быть просто численная точность, которую ltspice использует внутри.
Маркус Мюллер,

1
Я бы не стал смотреть ниже -100 дБ, но начну с 3-й гармоники, но, похоже, нет проблем с окном
Тони Стюарт Sunnyskyguy EE75

1
Может иметь отношение к сжатию формы сигнала. Посмотрите этот другой вопрос для более подробной информации и как проверить, так ли это. electronics.stackexchange.com/questions/338292/...
mkeith

Я не могу воспроизвести эти данные, моя версия LTspice требует, чтобы более 1e6 смоделированных точек получало БПФ 1e6 пунктов, то есть максимальный шаг по времени 1e-6.
громкие звуки

Вам нужен квази пик, чтобы соответствовать аудио спектру для модуляции BW ??
Тони Стюарт Sunnyskyguy EE75

Ответы:


4

@ D.Brown ответ уже очень хороший, поэтому я добавлю лишь несколько незначительных вещей. Алгоритм LTspice является нестандартным и принимает число точек, не равное двум степеням. Это не значит, что разрешение не важно. Тем не менее, 1 кГц в течение 1 с означает целое число периодов, поэтому нет необходимости в оконном или биномиальном сглаживании для уменьшения шума (настройки в окне FFT). Тем не менее, то, о чем упоминал @mkeith, и по умолчанию LTspice использует сжатие формы сигнала (300 точек на дисплей, IIRC), что означает, что любые другие точки уменьшаются и страдает разрешение сигнала. Решением для этого является либо более короткий временной шаг, либо .option plotwinsize=0последний, устраняющий сжатие формы сигнала. Вот что происходит, когда эта опция добавляется, но временной интервал не накладывается:

дефолт

Это, вероятно, то, что вы видите, более или менее, так какой вариант? Вы моделируете форму волны 1 кГц в течение периода времени 1 с . Схема, если это можно так назвать, является простым источником и нагрузкой, а источник является гармоническим, что является сложной задачей для матричного решателя, поэтому LTspice, как и все механизмы SPICE, если он чувствует, что производная является гладкой, он удвоит свой временной шаг, чтобы не замедлять симуляцию, и будет продолжать удваивать его, пока не достигнет некоторого внутреннего предела, после чего он пролетит над симуляцией. В результате получается грубая форма волны, которая даже не plotwinsizeможет улучшиться слишком сильно.

Другое лечение, навязанный временной шаг, теперь необходимо для улучшения разрешения. Вот результат с временным шагом 1 s:μ

10u

Это лучше, но вы выполняете 1 миллион точек FFT, что требует, возможно , не удивительно, что 1 миллион моментов времени, поэтому максимальный временного шага должен быть установлен в 1 s. Кроме того, для параметра задано значение> 7, которое, согласно книге, обеспечивает двойную точность:μnumdgt

ультра

Уровень шума все еще слегка колеблется, но теперь уровень составляет менее -250 дБ. Это близко к точности станка. Установка временного шага 1/1048576 (2 ^ -20) не улучшает результаты (вы можете проверить сами).

В конце концов, все зависит от того, какой уровень шума вы готовы принять. Комментарий @Tony Стюарт имеет практическую чувствительность ниже 100 ~ 120 дБ средства меньше , чем 1 ~ 10 V к 1V, который является большим достижением.μ


Спасибо, что вложили в работу этот ответ. Кроме того, он подчеркнул, что LTspice в MacOS работает по-разному по сравнению с Windows. (Я предполагаю, что это версия для Windows)
loudnoises

@loudnoises Да, хотя под Wine это не так важно. Я видел несколько моментов здесь и там, в Yahoo LTspice Group, но так как я не пользователь Mac, я не настаивал на них. Возможно, это также вопрос настроек, скрытых под другим капотом, но на самом деле я не уверен.
заинтересованный гражданин

Отлично! Теперь, оглядываясь на файл справки LTSPICE, я должен был заметить следующее: «LTspice использует собственный алгоритм FFT, который допускает произвольное количество точек данных, т. Е. Не ограничивается степенью 2. Когда вы ожидаете выполнить БПФ для вашего моделирования данные, вы, вероятно, захотите отключить сжатие формы сигнала, указать максимальный временной шаг и, возможно, даже использовать формат файла формы волны двойной точности, чтобы уменьшить минимальный уровень шума ».
watkipet

@ заинтересованный гражданин: Когда вы заявили: «Вот результат с шагом в 1 мкс», вы имели в виду «Вот результат с шагом в 10 мкс»?
watkipet

@loudnoises Я использую нативную версию MacOS. Но я вижу те же результаты, что и у заинтересованного гражданина.
watkipet

15

Этот ответ состоит из нескольких частей. Я основываю этот ответ на характеристиках алгоритма FFT. Я не знаком с конкретной реализацией LTSpice, но поведение, о котором вы сообщаете, именно то, что я ожидал.

Наиболее распространенные реализации FFT работают с целочисленной степенью 2 точек данных. Таким образом, большинство реализаций будет дополнять ваши 1 000 000 точек данных до 1 048 576 точек данных и выполнять FFT для этого. Обратите внимание, что эта длина не является целым числом синусоидальных волн.

Существуют альтернативные методы преобразования Фурье, которые по-разному разбивают данные. Обычно они называются методами дискретного преобразования Фурье (DFT), и они медленнее и значительно сложнее в реализации. Я почти никогда не сталкивался с ними в практических приложениях. FFT - это конкретная реализация DFT, которая требует, чтобы количество точек данных было целочисленной степенью 2 (или иногда целочисленной степенью 4).

Итак, я предполагаю, что LTSpice дополняет ваши данные до 1 048 576 точек данных, добавленные 48 576 значений данных в конце содержат константу.

Теперь вы можете увидеть проблему: ваш буфер из 1 048 576 сэмплов содержит 1000 синусоид, каждая из 1000 сэмплов, за которыми следуют 48 576 постоянных значений. Это не может быть представлено суммой синусоидальных волн с частотой 1 кГц. Вместо этого результаты FFT показывают дополнительные высокочастотные значения, необходимые для восстановления вашего сигнала.

Чтобы определить, является ли это проблемой, создайте буфер из 1 048 576 выборок, содержащий синусоидальную волну с периодом 1024 выборки. Высокие частоты должны быть значительно уменьшены по величине.

Теперь, что касается применения окна:

Алгоритм БПФ концептуально «оборачивает» данные, поэтому за последней точкой входных данных следует первая точка входных данных. То есть БПФ вычисляется так, как если бы данные были бесконечными, повторялись по кругу как вектор с последовательностью: x [0], x [1], ..., x [1048574], x [1048575], x [ 0], х [1], ...

Эта упаковка может привести к переходу между последней точкой в ​​буфере данных и первой точкой. Этот шаговый переход генерирует результаты БПФ с большим (ложным) вкладом от высоких частот. Цель окна - устранить эту проблему. Оконная функция обнуляется с обоих концов, поэтому в вашем случае w [0] и w [999999] будут равны нулю. Когда данные умножаются на окно, значения становятся равными нулю в начале и в конце, поэтому при переносе переходов не происходит.

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

Остаточные проблемы:

Существует еще один потенциальный источник высокочастотного спектрального шума в БПФ. Эффект увеличивается с длиной БПФ, и это может быть что-то, что вы можете увидеть в некоторых случаях на 1 000 000 точек данных.

Внутренний цикл алгоритма FFT использует точки вокруг окружности в комплексной плоскости: e ^ (i * theta), где алгоритм повторяет 'theta' от 0 до 2 * pi последовательно более мелкими шагами, вплоть до количества точек в FFT. То есть, если вы вычислите БПФ на 1 048 576 сэмплов, на одной из итераций внешнего цикла внутренний цикл будет вычислять e ^ (i * theta), где theta = 2 * pi * n / N, где N равно 1 048 576 итерации от 0 до 1 048 575. Это делается очевидным методом последовательного умножения на e ^ (i * 2 * pi / N).

Вы видите проблему: когда N становится большим, e ^ (i * 2 * pi / N) становится очень близким к 1, и оно умножается на N раз. С плавающей точкой двойной точности ошибки невелики, но я думаю, что вы можете увидеть получаемый минимальный уровень шума, если внимательно посмотрите. С плавающей запятой одинарной точности на 1000000 точек данных само вычисление БПФ создает значительный минимальный уровень шума.

Существуют альтернативные методы вычисления e ^ (i * theta), которые устраняют эту проблему, но реализация является более сложной. Мне нужно было создать такую ​​реализацию только один раз.


Что касается DFT по сравнению с FFT, контекстное меню в LTSPICE называет его «FFT», в то время как диалоговое окно конфигурации называет его «DFFT». Теперь, читая файл справки, я вижу, что @a заинтересованный гражданин упомянул о том, что LTSPICE принимает число, не равное двум.
watkipet

0

Возможная причина: -

Когда вы рисуете переходную волну в симуляторе, она интерполирует реальные вычисления, чтобы свести к минимуму выполняемую тяжелую работу и позволить более быстрому результату отображаться на экране.

Значение по умолчанию для максимального временного шага в LTSpice может составлять 100 мкс, поэтому между этими точками вы интерполировали результаты, то есть они не идеальны и вносят вклад в искажения, рассматриваемые как гармоники в БПФ.

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.