ivan219 0 10 ноября, 2009 Опубликовано 10 ноября, 2009 (изменено) · Жалоба В разных книгах написанно по разному где 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)???? Изменено 10 ноября, 2009 пользователем ivan219 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bahurin 0 11 ноября, 2009 Опубликовано 11 ноября, 2009 · Жалоба В разных книгах написанно по разному где 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ivan219 0 11 ноября, 2009 Опубликовано 11 ноября, 2009 · Жалоба Значит 1 / N * Sqrt(Sqr(Re) + Sqr(Im)) а в некоторых книгах я встречал что 2 / N * Sqrt(Sqr(Re) + Sqr(Im)) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bahurin 0 11 ноября, 2009 Опубликовано 11 ноября, 2009 · Жалоба Значит 1 / N * Sqrt(Sqr(Re) + Sqr(Im)) а в некоторых книгах я встречал что 2 / N * Sqrt(Sqr(Re) + Sqr(Im)) И где же это было написано? Автора и название в студию! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 35 11 ноября, 2009 Опубликовано 11 ноября, 2009 · Жалоба Приветствую! Еще нужно учитывать коэффициент окна Kw которое используется при FFT. Для Hann окна Kw=0.4950 поэтому для нормировки и берут 2/N Успехов! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bahurin 0 12 ноября, 2009 Опубликовано 12 ноября, 2009 · Жалоба Приветствую! Еще нужно учитывать коэффициент окна Kw которое используется при FFT. Для Hann окна Kw=0.4950 поэтому для нормировки и берут 2/N Успехов! Rob. не пудрите людям мозги! А если я возьму окно Хемминга или Блэкмана? Причем тут это? мы говорим о ДПФ а не окнах сглаживания. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ivan219 0 12 ноября, 2009 Опубликовано 12 ноября, 2009 (изменено) · Жалоба Блин всё равно не понятно ведь если одна полуволна равно -1 другая 1 то амплитуда равна двум почуму вы говорите что 1???? Изменено 12 ноября, 2009 пользователем ivan219 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
anton 0 12 ноября, 2009 Опубликовано 12 ноября, 2009 · Жалоба О как все запушено :( 2 Это скорее пик то пик значение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
marti 0 13 ноября, 2009 Опубликовано 13 ноября, 2009 · Жалоба Частотных отсчетов в в 2 раза меньше, чем временных, отсюда двойка. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
oshparenniy 0 13 ноября, 2009 Опубликовано 13 ноября, 2009 · Жалоба Доброго всем дня. Думаю, что вопрос в следующем. Если нет, прошу прощения. В качестве примера: DFT над действительным гармоническим колебанием даст "амплитуду" A*N/2. DFT над комплексным гармоническим колебанием даст "амплитуду" A*N. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bahurin 0 13 ноября, 2009 Опубликовано 13 ноября, 2009 · Жалоба Доброго всем дня. Думаю, что вопрос в следующем. Если нет, прошу прощения. В качестве примера: DFT над действительным гармоническим колебанием даст "амплитуду" A*N/2. DFT над комплексным гармоническим колебанием даст "амплитуду" A*N. Не совсем правильно. A*N бдует если сигнал не просто комплексный а ТОЛЬКО если комплексный сигнал является АНАЛИТИЧЕСКИМ, т.е. не содержит составляющих в отрицательной области частот (правой половине DFT) . Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
thermit 1 13 ноября, 2009 Опубликовано 13 ноября, 2009 · Жалоба Дискретный аналог теоремы парсеваля. Сумма квадратов входов дпф и сумма квадратов выходов дпф относятся как 1/N. N - размер дпф. Двойка появляется, если нужна половина дпф (если входной сигнал вещественный половина мощности распределяется по отрицательным частотам и амплитудный спектр является четным). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aser 0 13 ноября, 2009 Опубликовано 13 ноября, 2009 · Жалоба Проще всего - подаем на вход синусоиду с действующим значением 1 Вольт. Измеряем эту синусоиду на выходе ДПФ. Нормируем результаты, чтобы было среднеквадратичное значение 1 Вольт. Это учитывает и ДПФ, и окно на входе. А для вычислений безотносительно Вольт, это все равно - лишь бы после ДПФ и ОДПФ результаты совпадали с исходными данными. Поэтому попадается в первоисточниках деление ДПФ на корень из N. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
thermit 1 13 ноября, 2009 Опубликовано 13 ноября, 2009 · Жалоба Для наглядности: Имеем последовательность периода синусоиды амплитудой 1 из N точек. сумма квадратов будет 0.5 *N Согласно теореме парсеваля, сумма квадратов выхода дпф будет 0.5*N*N. Мощность одной гармоники 0.25*N*N Амплитуда одной гармоники sqrt(0.25*N*N) = 0.5*N Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 45 13 ноября, 2009 Опубликовано 13 ноября, 2009 · Жалоба Полагаю, что нужно разбираться с конкретным алгоритмом 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-ой гармоники. Отсюда и вопрос о масштабе сразу прояснится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться