Вверх ↑
Этот топик читают: Гость
Разработчик
Ответов: 26135
Рейтинг: 2126
#16: 2012-06-06 10:46:25 ЛС | профиль | цитата
Леонид, как привязываются коэффициенты и откуда их брать
карма: 22

0
Ответов: 8923
Рейтинг: 823
#17: 2012-06-06 13:11:46 ЛС | профиль | цитата
nesco, Фурье -- это преобразование данных на ВРЕМЕННОМ интервале в данные на сетке частот (и наоборот). Самая низкая частота соответствует одному периоду за весь временной интервал и имеет индекс 1 (индекс 0 имеет среднее значение всех данных), следующая частота с индексом 2 укладывается двумя периодами во всём интервале, т. е. она в два раза больше, частота с индексом 3 -- в три раза больше .... максимально возможная частота имеет всего два отсчёта за период и её значение в N/2 больше. Если при обратном преобразовании хочется отсеять высокие частоты выбираем 1--50 (условно, конечно), если надо удалить голос Шаляпина, выбираем 100-500, а если интересуют отдельные частоты, например 1500 МГц, её индекс выбираем и слушаем ионизированный водород
карма: 19

0
Разработчик
Ответов: 26135
Рейтинг: 2126
#18: 2012-06-06 13:26:34 ЛС | профиль | цитата
Ладно, тогда объясни из своего примера -- 2-5;7;12-23;32-128;200, что означают эти коэффициенты конкретно к твоей схеме
карма: 22

0
Ответов: 8923
Рейтинг: 823
#19: 2012-06-06 17:03:06 ЛС | профиль | цитата
nesco, предположим случай выдал массив из 1478 значений, первый компонент разложил его на 738 частотЫ (плюс постоянная составляющая), каждая характеризуется Амплитудой и начальной Фазой (углом), а их период (1/частота) характеризуется индексом (см. выше).
Если при обратном вычислении вторым компонентом использовать все частоты (все индексы), получим на выходе входной массив (с небольшой погрешностью, которую вносит дискретность и ограниченность частотного диапазона сверху -- в аналоговом преобразовании такого ограничения нет, ряд суммируемых частот бесконечен).
Если по каким-либо причинам не нужны те или иные частоты, они и не должны участвовать в обратном преобразовании, а индексы нужных частот обозначены как раз в примере.

карма: 19

0
Разработчик
Ответов: 26135
Рейтинг: 2126
#20: 2012-06-06 17:20:05 ЛС | профиль | цитата
Леонид писал(а):
предположим случай выдал массив из 1478 значений, первый компонент разложил его на 738 частотЫ

А стартовая и конечная частота откуда берутся Чтобы знать, что отфильтровать, надо знать какому индексу, какая частота соответствует.
Из того, что ты написал, я нифига не понял, откуда берутся граничные частоты
Я просто этим раньше не занимался вплотную, но интересно знать
карма: 22

0
Ответов: 8923
Рейтинг: 823
#21: 2012-06-07 13:27:31 ЛС | профиль | цитата
Наконец-то настроил Интернет на своём компьютере! Всё вижу!
nesco, тогда так: имеем звук с дискретизацией 44100 Гц. Из него берём интервал в 2048 данных или Т=2048/44100~=0,0464 секунды. Тогда самая низкая частота с периодом на весь интервал F1=1/Т=1/0,0464~=21.5 Гц и имеет индекс в разложении "1", следующая частота с индексом "2" (два периода на весь интервал) F2=1/(T*2)=F1*2=43.1 Гц, F3=F1*3~=64.6 Гц.... Самая высокая частота с индексом "1023" равна F1023=F1*1023~=22028 Гц. Более высокие частоты, имеющие только два и менее отсчётов за период, не могут быть правильно определены в дискретном преобразовании Фурье. Уф...
(Всё таки надо иметь ТАЛАНТ популяризатора, чтобы доходчиво объяснять вещи, кстати у nesco тоже его нет )
Быстрое преобразование Фурье на выходе, к завтрешнему утру отшлифую
карма: 19

0
Разработчик
Ответов: 26135
Рейтинг: 2126
#22: 2012-06-07 13:38:16 ЛС | профиль | цитата
Леонид писал(а):
берём интервал в 2048

Ну, с этим понятно. А с этим тогда как
Леонид писал(а):
выдал массив из 1478 значений, первый компонент разложил его на 738 частотЫ

Где тут 2048, мыши погрызли
карма: 22

0
Ответов: 8923
Рейтинг: 823
#23: 2012-06-07 14:05:58 ЛС | профиль | цитата
nesco, если 44100 дискретный звук берём интервалами 1478 слов, то низшая частота разложения станет F1=1/(1478/44100)~=29.8 Гц, высшая F738=F1*738~=22020 Гц, в общем случае при интервале в N значений: F1=44100/N, F(N/2-1)=(N/2-1)*44100/N
карма: 19

0
Разработчик
Ответов: 26135
Рейтинг: 2126
#24: 2012-06-07 14:13:00 ЛС | профиль | цитата
Ага, более-менее понятно.
Леонид писал(а):
берём интервалами 1478 слов

Да, а почему не 2048, чем это объясняется
карма: 22

0
Ответов: 8923
Рейтинг: 823
#25: 2012-06-08 18:53:10 ЛС | профиль | цитата
nesco, Обычное преобразование Фурье по данным любой длины N содержит N^2 умножений и столько же вычислений синусов-косинусов не считая операций сложения, но если длина N кратна равна одной из степеней двойки (4-8-16...256...2048...65536...), то значения этих синусов-косинусов совпадают, всего их остаётся N значений (при фиксированной длине их можно вычислить один раз заранее), появляется возможность (учат в 6-м классе) вынесения за скобки этих синусов, что значительно сокращает количество умножений, соответственно и времени в КОРЕНЬ(N) раз, поэтому и применяют обычно такие длины выборок.
------------ Дoбавленo в 18.53:
Добил, наконец, быстрое преобразование Фурье, компонент приложен с тестовой схемой, прошу испытывать fft_for_hiasm.rar
карма: 19

1
файлы: 1fft_for_hiasm.rar [6.3KB] [345]
Голосовали:ser_davkin
Гость
Ответов: 17029
Рейтинг: 0
#26: 2012-06-08 20:06:40 правка | ЛС | профиль | цитата


Редактировалось 7 раз(а), последний 2021-06-24 07:04:03
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#27: 2012-06-08 20:58:45 ЛС | профиль | цитата
86.110.166.254 писал(а):
Ой, тестеров нету
Леонид, видно никому не надо
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26135
Рейтинг: 2126
#28: 2012-06-08 22:46:11 ЛС | профиль | цитата
Tad писал(а):
видно никому не надо

Я еще только увидел
карма: 22

0
Ответов: 8923
Рейтинг: 823
#29: 2012-06-09 01:28:21 ЛС | профиль | цитата
nesco, посмотрите, пожалуйста, почему в компоненте функция THIArrayFFT._CountA; выдаёт правильную длину массива амплитуд, равную половине длины входного массива, а при переборе его с нижней точки компонентом ArrayEnum выдаётся более чем в два раза больше значений, причём первые соответствуют амплитудам, а остальные чёрти что
------------ Дoбавленo в 01.28:
Блин, код схемки ждал отправления полчаса, да так и не дождался (Выход с ArrayEnum на Список строк)
карма: 19

0
Разработчик
Ответов: 26135
Рейтинг: 2126
#30: 2012-06-09 02:04:09 ЛС | профиль | цитата
Леонид писал(а):
Выход с ArrayEnum на Список строк

На всякий случай выложи проблемную схемку. Днем посмотрю, не возражаешь, я вообще хочу все компоненты пересмотреть, правда че-то руки пока не дошли, но надо.
карма: 22

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)