Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[54.205.179.155] |
|
Сообщ.
#1
,
|
|
|
Здравствуйте!
Для разложение амплитуд колебаний звука на частоты используется БПФ (ДПФ). На вход БПФ подаются комплексные числе, действительная часть которых содержит амплитуды, а мнимая равна 0. На выходе БПФ получается другая последовательность комплексных чисел, какой физический смысл несут его действительная и мнимая часть? |
Сообщ.
#2
,
|
|
|
...мнимая часть — амплитуда синусной (квадратурной) компоненты исходного сигнала, действительная - амплитуда косинусной. Физический смысл имеет рассмотрение двух квадратур сразу, где корень квадратный сумм квадратов амплитуд квадратур дает амплитуду (модуль) i-й гармоники, а отношение дает фазу (сдвиг фазы исходного сигнала).
|
Сообщ.
#3
,
|
|
|
Хорошо, видимо речь идет о и .
А как тогда достать частотные составляющие? |
Сообщ.
#4
,
|
|
|
Так вот как раз амплитуда i-й гармоники (соответствующий отсчет в дискретном ПФ) и говорит о вкладе определенной частотной составляющей в исходный сигнал. Например, для чистой синусоиды будет один большой пик на её частоте (в реальных условиях пик будет уширен и с некоторыми боковыми сателлитами из-за ограниченности диапазона)
|
Сообщ.
#5
,
|
|
|
Цитата MBo @ и говорит о вкладе определенной частотной составляющей в исходный сигнал А как определить фактическое значение этой частоты? |
Сообщ.
#6
,
|
|
|
Цитата ExkaliBur @ На выходе БПФ получается другая последовательность комплексных чисел, какой физический смысл несут его действительная и мнимая часть? Никакой. Просто мы можем сделать такое преобразование исходя из математики, а не физики. Любой вектор, к примеру вектор скорости, можно представить суммой двух других. Вот какой в них физический смысл? Никакого! Цитата ExkaliBur @ А как тогда достать частотные составляющие? По определению. Это и есть коэффициенты преобразования Фурье. Добавлено Цитата ExkaliBur @ Цитата MBo @ и говорит о вкладе определенной частотной составляющей в исходный сигнал А как определить фактическое значение этой частоты? Не определить, а измерить. Как измерить? Это зависит от методики. Можно построить аппроксимацию по 3 точкам и найти пик параболы, он будет смещён. |
Сообщ.
#7
,
|
|
|
Т.е. если я на вход ПФ подаю последовательность амплитуд из 4-х элементов {x1,x2,x3,x4}.
То на выходе получу последовательность комплексных чисел {X1,X2,X3,X4}, где X1 = Re1+Im1, X2=Re2+Im2, X3=Re3+Im3, X4=Re4+Im4; и амплитуда первой частоты будет равна А1 = корень квадратный из (Re1*Re1 + Im1*Im1), а чему будет равна сама первая частота ν = ? |
Сообщ.
#8
,
|
|
|
F[i] = i*f/N [исправил, 2Pi лишнее было]
где f - частота дискретизации исходного сигнала (например, 44100 Гц), N - размер буфера для Фурье (например, 1024) Для данного примера нулевой отсчет - постоянная составляющая, первый - 43 Гц, последний (512-й) - 22050 Гц |
Сообщ.
#9
,
|
|
|
Цитата ExkaliBur @ и амплитуда первой частоты будет равна А1 = корень квадратный из (Re1*Re1 + Im1*Im1), а чему будет равна сама первая частота ν = ? Зависит от того, как вы храните коэффициенты и от того как у вас организовано преобразование Фурье. Обычно вначале хранят коэффициенты при положительных частотах, потом отрицательных частотах Фурье f [единицы]. +0, +1, +2, .. , +(N/2-1), -(N/2), -(N/2-1), -(N/2-2), ... , -1 -(N/2) равен +(N/2) Встречаются варианты с поменянными левой и правой половиной. А также с одной положительной Частоты Фурье в зависимости от частоты дискретизации. f:=f*(fd/N); [Гц] Где fd- частота дискретизации к примеру 8000 Гц. |
Сообщ.
#10
,
|
|
|
Pavia, я предпочитаю думать что выбор той или иной расстановки элементов проблема программиста, который реализует ПФ, а не использует. Хотя с другой стороны данное замечание может быть критично, спасибо.
Итого, заключение Имеется звуковой WAV (PCM) файл с одним каналом и частотой дискретизации 44100 глубиной 16 бит. Окно для преобразования фурье 1024. Считываем из файла 1024 элемента int16 по 16 бит и преобразовываем их в дробные для последующей записи в действительную часть комплексного числа. На вход ПФ подается набор 1024 комплексных чисел. На выходе получается набор X из 1024 комплексных чисел, в котором первый элемент: - X1 = Re1 + i*Im1 - v1 = 2 * Pi * 1 * 44100 / 1024 = 270,59 Гц // Цитата MBo @ F[i] = 2*Pi*i*f/N - A1 = sqrt( sqr(Re1) + sqr(Im1) ) // амплитуда для частоты 270,59 Гц аналогично для остальных 1023 элементов. Все правильно? |
Сообщ.
#11
,
|
|
|
>Все правильно?
Видимо, ты успел прочитать мой пост до исправления. См. исправление и дополнение. >аналогично для остальных 1023 элементов. В результате значимы 512 отсчетов, остальные - зеркальное отражение (т.к. исходный сигнал чисто реальный) |
Сообщ.
#12
,
|
|
|
Цитата MBo @ >аналогично для остальных 1023 элементов. В результате значимы 512 отсчетов, остальные - зеркальное отражение (т.к. исходный сигнал чисто реальный) Т.е. значимые первые 512 элементов, с индексами от 0 до 511. Так? |
Сообщ.
#13
,
|
|
|
Да
|
Сообщ.
#14
,
|
|
|
Вообще-то значимы 513 элементов. Просто в 0-м и 512-м значима только половина, поскольку они оба вещественны.
|
Сообщ.
#15
,
|
|
|
Pavia, я предпочитаю думать что выбор той или иной расстановки элементов проблема программиста, который реализует ПФ, а не использует. Хотя с другой стороны данное замечание может быть критично, спасибо.
Итого, заключение Имеется звуковой WAV (PCM) файл с одним каналом и частотой дискретизации 44100 глубиной 16 бит. Окно для преобразования фурье 1024. Считываем из файла 1024 элемента int16 по 16 бит и преобразовываем их в дробные для последующей записи в действительную часть комплексного числа. На вход ПФ подается набор 1024 комплексных чисел. На выходе получается набор X из 1024 комплексных чисел, в котором первый элемент: - X1 = Re1 + i*Im1 - v1 = 1 * 44100 / 1024 = 43 Гц - A1 = sqrt( sqr(Re1) + sqr(Im1) ) // амплитуда для частоты 43 Гц аналогично для следующих 511 элементов. Все правильно? |
Сообщ.
#16
,
|
|
|
>Все правильно?
Если с индексами не путаешься. A[0] - нулевая частота A[1] - 43 Гц и т.д. |
Сообщ.
#17
,
|
|
|
Так, а частота в 0 Гц бывает?
После ПФ в нулевом элементе будет 0 Гц или 43 Гц ? |
Сообщ.
#18
,
|
|
|
Ну я уже пару раз написал - да, бывает, нулевая частота - это постоянная составляющая.
Наглядно можно увидеть, взяв Фурье от Sin(x) и от 3 + Sin(x) |
Сообщ.
#19
,
|
|
|
ExkaliBur
Да бывает, вернее она всегда присутствует. Что такое частота дискретного преобразования Фурье? Это целое число периодов синусоиды или косинуса укладываемое на заданном интервале. Конечно из этого не следует наличие нулевой частоты. Но надо понимать что формула синуса выгляди как Sin(2*Pi*W/N*t). Где W частота. N- число точек, она же длина интервала. И соответственно нам ничего не мешает взять эту самую частоту W=0. Тогда синус будет на всем промежутке равен 1. Цитата ExkaliBur @ После ПФ в нулевом элементе будет 0 Гц или 43 Гц ? Ещё раз повторяю. Порядок частот зависит от реализации. MBo Цитата MBo @ да, бывает, нулевая частота - это постоянная составляющая. Увы но нет. Возьмите к примеру постоянную 5. F(x)=5. Выполем преобразование фурье получим 5*SinC(w), где w набор частот. Т.е. Постоянная составляющая содержит все частоты, а не только нулевую. Поэтому на спектрограмме как правило постоянная составляющая выглядит как холм, хотя на самом деле это SinC. Можно встретить как целый, так и половинку или две половинки если лексикографический порядок частот нарушен. А как я уже писал он как правило нарушен. |
Сообщ.
#20
,
|
|
|
Нулевой отсчет есть просто сумма всех реальных частей (нормированная на N, т.е. среднее)
F[0] = 1/N * Sum[i=0..N-1](f[i] * (Cos(0) + j * Sin(0))) = Sum[i=0..N-1](f[i])/N Для функции, заданной так: for i := 0 to N - 1 do begin Re[i] := 3 + Sin(25 * i * 2 * Pi / N); Кусок исходника и амплитуда Фурье выглядят так (правая шкала для амплитуды FT): Прикреплённый файлft.gif (32,78 Кбайт, скачиваний: 725) Для постоянной функции Re[i] := 3; будет похоже, только пик синуса на 25 пропадет. Ушки этого пика малозаметны, если диапазон значительный (в данном случае было 512) |
Сообщ.
#21
,
|
|
|
Цитата Pavia @ Порядок частот зависит от реализации. Pavia, можно по подробнее? |
Сообщ.
#22
,
|
|
|
>Порядок частот зависит от реализации.
>Pavia, можно по подробнее? Он в #9 посте уже описал схемы хранения |
Сообщ.
#23
,
|
|
|
Цитата Pavia @ Обычно вначале хранят коэффициенты при положительных частотах, потом отрицательных частотах Фурье f [единицы]. Тут видимо имеется ввиду коэффициенты входного сигнала? Меня смущает фраза "отрицательных частотах". |
Сообщ.
#24
,
|
|
|
>Тут видимо имеется ввиду коэффициенты входного сигнала? Меня смущает фраза "отрицательных частотах".
Нет, выходного. Это следствие формального математического преобразования. Наверное, будет проще считать, что смысла в этом нет, и игнорировать их. |
Сообщ.
#25
,
|
|
|
Тогда я не
Почему порядок частот может меняться? или как определить какая частота на каком месте? |
Сообщ.
#26
,
|
|
|
>Почему порядок частот может меняться?
Если вдруг человек, реализующий алгоритм, решит расположить их по-своему. В большинстве реализаций первая половина массива содержит частоты от 0 с увеличением - то, что практически тебе требуется. |
Сообщ.
#27
,
|
|
|
MBo, спасибо!
|
Сообщ.
#28
,
|
|
|
Работает!
|