Перейти к содержанию
    

В разных книгах написанно по разному где 1 / N, 2 / N. Если зделать FFT потом вычислить амплитуду путём MAG = Sqrt(Sqr(Re) + Sqr(Im)) то у нас получится какоето значение зависящее от N. Но если предположем возмём синтезируем сигнал Sin(fn) т.е. апплитуда получается от -1 до 1 т.е. 2 так вот если зделать FFT то унас получится не 2 но если поделить MAG / N то унас получится постоянное значение не зависимое от N но не то.

 

Вот и возникает вопрос на какой коэффициент K нужно умножать (MAG / N) * K, деление на N это факт но вот каким должно быть K ???

 

Ну вот если К = 1 то апплитуда равно 0.707 что явоно не верно. Если К = 2 то 1.4241 среднеквадратическое от 2 ближе к истине если К= 2 * Sqrt(2) то амплитуда равно 2 т.е. ее реальный размах от -1 до 1

 

 

Что является истиной К = 2, К = 2 * Sqrt(2)????

Изменено пользователем ivan219

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В разных книгах написанно по разному где 1 / N, 2 / N. Если зделать FFT потом вычислить амплитуду путём MAG = Sqrt(Sqr(Re) + Sqr(Im)) то у нас получится какоето значение зависящее от N. Но если предположем возмём синтезируем сигнал Sin(fn) т.е. апплитуда получается от -1 до 1 т.е. 2 так вот если зделать FFT то унас получится не 2 но если поделить MAG / N то унас получится постоянное значение не зависимое от N но не то.

 

Вот и возникает вопрос на какой коэффициент K нужно умножать (MAG / N) * K, деление на N это факт но вот каким должно быть K ???

 

Ну вот если К = 1 то апплитуда равно 0.707 что явоно не верно. Если К = 2 то 1.4241 среднеквадратическое от 2 ближе к истине если К= 2 * Sqrt(2) то амплитуда равно 2 т.е. ее реальный размах от -1 до 1

 

 

Что является истиной К = 2, К = 2 * Sqrt(2)????

 

:cranky: Есть сигнал s(t) = A*cos(f*t). Его амплитуда равна А. Т.е. Если сигнал меняется от -1 до 1 то его амплитуда равна 1 :laughing: а не 2. После вычисления амплитудного спектра путём MAG = Sqrt(Sqr(Re) + Sqr(Im)) получите пик на частоте f значением N*A. Делите весь спектр на N и получаете реальную амплитуду равную 1. что такое K я вообще не понял. Могу лишь предположить что вы хотите получить действующее значение напряжения а не амплитуду.Если да то поделите еще на корень из двух и получите 0.707.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Значит 1 / N * Sqrt(Sqr(Re) + Sqr(Im)) а в некоторых книгах я встречал что 2 / N * Sqrt(Sqr(Re) + Sqr(Im))

И где же это было написано? Автора и название в студию!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую!

 

Еще нужно учитывать коэффициент окна Kw которое используется при FFT.

 

Для Hann окна Kw=0.4950 поэтому для нормировки и берут 2/N

 

 

Успехов! Rob.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую!

 

Еще нужно учитывать коэффициент окна Kw которое используется при FFT.

 

Для Hann окна Kw=0.4950 поэтому для нормировки и берут 2/N

 

 

Успехов! Rob.

не пудрите людям мозги! А если я возьму окно Хемминга или Блэкмана? Причем тут это? мы говорим о ДПФ а не окнах сглаживания.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Блин всё равно не понятно ведь если одна полуволна равно -1 другая 1 то амплитуда равна двум почуму вы говорите что 1????

Изменено пользователем ivan219

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Доброго всем дня. Думаю, что вопрос в следующем. Если нет, прошу прощения.

 

В качестве примера:

DFT над действительным гармоническим колебанием даст "амплитуду" A*N/2. DFT над комплексным гармоническим колебанием даст "амплитуду" A*N.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Доброго всем дня. Думаю, что вопрос в следующем. Если нет, прошу прощения.

 

В качестве примера:

DFT над действительным гармоническим колебанием даст "амплитуду" A*N/2. DFT над комплексным гармоническим колебанием даст "амплитуду" A*N.

 

Не совсем правильно. A*N бдует если сигнал не просто комплексный а ТОЛЬКО если комплексный сигнал является АНАЛИТИЧЕСКИМ, т.е. не содержит составляющих в отрицательной области частот (правой половине DFT) .

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Дискретный аналог теоремы парсеваля. Сумма квадратов входов дпф и сумма квадратов выходов дпф относятся как 1/N. N - размер дпф. Двойка появляется, если нужна половина дпф (если входной сигнал вещественный половина мощности распределяется по отрицательным частотам и амплитудный спектр является четным).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проще всего - подаем на вход синусоиду с действующим значением 1 Вольт.

Измеряем эту синусоиду на выходе ДПФ.

Нормируем результаты, чтобы было среднеквадратичное значение 1 Вольт.

Это учитывает и ДПФ, и окно на входе.

А для вычислений безотносительно Вольт, это все равно - лишь бы после ДПФ и ОДПФ результаты совпадали с исходными данными.

Поэтому попадается в первоисточниках деление ДПФ на корень из N.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для наглядности:

Имеем последовательность периода синусоиды амплитудой 1 из N точек.

 

 

сумма квадратов будет 0.5 *N

Согласно теореме парсеваля, сумма квадратов выхода дпф будет 0.5*N*N. Мощность одной гармоники 0.25*N*N

Амплитуда одной гармоники sqrt(0.25*N*N) = 0.5*N

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Дело тут в том, что FFT-преобразование по своей природе комплексное, однако чаще всего наши исходные данные являются строго действительными и не содержат в себе мнимой части (например, данные от АЦП). Из-за этого могут существовать "тупой" и "умный" алгоритмы FFT, отличающиеся между собой возможностью учета того, что исходные данные действительные.

 

"Тупой алгоритм" попросту приписывает к массиву данных еще массив такой же длины, заполненный нулями, который будет выполнять роль нулевой мнимой части. После чего на этих двух массивах запускается алгоритм комплексного FFT. В результате его получаем "бабочку": в действительной части результата (cos-части) имеем строго зеркальную картину - в первой половине (до N/2) расположены cos-коэффициенты, а во второй половине они же в обратном порядке; во мнимой части результата (sin-части) таже самая история, только зеркальные коэффициенты имеют противоположный знак. Когда таким результатом пользуются, то используют коэффициенты до N/2, а на остальное внимания не обращают, считая это мусором.

 

"Умный алгоритм" экономит память, но более трудоемок в реализации. В отличие от "тупого" алгоритма он не заводит дополнительный массив под мнимую часть, а также не оставляет после себя зеркальный мусор. Поэтому его чаще используют в МК, где память в дефиците. "Умный алгоритм" поступает иначе. Он не создает отсутствующую мнимую часть, а просто использует первую половину исходных данных, как действительную часть, а вторую половину - как мнимую. Первичный результат такого FFT-преобразования получается, конечно же, неправильным, но из него можно извлечь правильный результат хитрым способом. В этом случае половинки получаются уже не зеркальными, а правильный результат из них можно выделить, если вычислять полусуммы и полуразности между отражениями. На двойку тут обычно не делят для скорости, из-за чего получают масштаб вдвое больший, чем при использовании "тупого алгоритма".

 

Чтобы не заниматься анализом алгоритма (тем более, если не вы сами его составляли), проще всего заполнить массив исходных данных тестовой кривой - например чистой синусоидой с амплитудой 1000:

 

for( int i=0; i < N; i++) data = 1000 * sin(2*M_PI/N*i);

 

А потом применить к этому массиву данных ваш алгорим FFT и посмотреть, какую амплитуду он выдаст для 1-ой гармоники. Отсюда и вопрос о масштабе сразу прояснится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...