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

FFT8 синтезируемый VHDL код

Похоже, что так. Только в работу идут все отсчеты с 1_го по 5_й для сохранения энергетики. Просто результаты КИХ формируются на каждом пятом.

Сейчас перечитываю (уже не в первый раз) тему FFT2048 участника ZED.

С бабочкой Х2 разобрался. Мне она понадобится. Сейчас пытаюсь понять как посчитать и в каком виде забить в константы поворачивающие множители для fft8.

Пока остался вопрос по поводу реал и мним частей БПФ. Вроде в моем случае, при наличии косинусных и синусных входных составляющих можно обойтись одним БПФ выполняя преобразование по очереди для каждой входной составляющей. Или я не прав?

 

Увы, Вы не правы. Главное заблуждение заключается в трактовке что такое синусный и косинусный отсчет. Думаю именно из-за этого Вы никак не можете понять как вам реализовать БПФ.

 

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

 

Постараюсь подробнее написать на выходных.

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


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

Увы, Вы не правы. Главное заблуждение заключается в трактовке что такое синусный и косинусный отсчет. Думаю именно из-за этого Вы никак не можете понять как вам реализовать БПФ.

 

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

 

Постараюсь подробнее написать на выходных.

Ну как же нельзя разделить. Если выборки идут через 90 градусов. А как же тогда квадратура? Например, в свое время когда мы строили корреляторы то использовали выборки сдвинутые на 90 градусов для того, чтобы не упустить всю энергию входного сигнала. Затем с копией сравнивались и синусная и косинусная выборки.

Вообще я исхожу из того, что все это сначала было промоделировано в матлабе (другим человеком, я в матлабе сильно плаваю), тоесть на вход реал БПФ подавались четные выборки (после КИХ), на вход имаг нечетные. Входная пространственная частота изменялась. Это приводило к смене номера частотного выхода БПФ на котором появлялся всплеск.

Ведь синусная и косинусная выборки это скорее всего условность. Главное, что они отстоят друг от друга на 90 градусов. Если Вы сможете разрушить мое заблуждение о том, что БПФ нельзя использовать подавая на реал и мним выборки сдвинутые на 90 град, я буду Вам признателен. Отсчеты действительно равноправны, но фазы у них (относительно рабочей частоты) разные.

Ведь комплексный сигнал это какраз и есть синусная и косинусная его составляющие (грубо говря). Разве не так?

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

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


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

Ну как же нельзя разделить. Если выборки идут через 90 градусов. А как же тогда квадратура? Например, в свое время когда мы строили корреляторы то использовали выборки сдвинутые на 90 градусов для того, чтобы не упустить всю энергию входного сигнала. Затем с копией сравнивались и синусная и косинусная выборки.

Вообще я исхожу из того, что все это сначала было промоделировано в матлабе (другим человеком, я в матлабе сильно плаваю), тоесть на вход реал БПФ подавались четные выборки (после КИХ), на вход имаг нечетные. Входная пространственная частота изменялась. Это приводило к смене номера частотного выхода БПФ на котором появлялся всплеск.

Ведь синусная и косинусная выборки это скорее всего условность. Главное, что они отстоят друг от друга на 90 градусов. Если Вы сможете разрушить мое заблуждение о том, что БПФ нельзя использовать подавая на реал и мним выборки сдвинутые на 90 град, я буду Вам признателен. Отсчеты действительно равноправны, но фазы у них (относительно рабочей частоты) разные.

Ведь комплексный сигнал это какраз и есть синусная и косинусная его составляющие (грубо говря). Разве не так?

 

Я не смогу написать все в одном сообщении и буду писать объяснение по-частям, поэтому прошу не спешить с ответом на каждое мое сооющение.

 

Синусная и косинусная выборка вообще не существующее понятие. А вот синусная и косинусная составляющие (компоненты) - вот это уже совершенно объективная вещь, а не условность.

 

Начнем с выборки. Одна выборка не может отстоять от другой на Х градусов или быть сдвинутой по фазе. Одна выборка всегда отстоит от другой на какое-то время. Если входной сигнал, скажем, синус с частотой f, то делая выборки через интервал времени 1/4f можно говорить лишь о том, что фаза сигнала одной выборки отличается от фазы сигнала другой на 90 град.

 

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

 

Продолжением следует.

 

 

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


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

Я не смогу написать все в одном сообщении и буду писать объяснение по-частям, поэтому прошу не спешить с ответом на каждое мое сооющение.

 

Синусная и косинусная выборка вообще не существующее понятие. А вот синусная и косинусная составляющие (компоненты) - вот это уже совершенно объективная вещь, а не условность.

 

Начнем с выборки. Одна выборка не может отстоять от другой на Х градусов или быть сдвинутой по фазе. Одна выборка всегда отстоит от другой на какое-то время. Если входной сигнал, скажем, синус с частотой f, то делая выборки через интервал времени 1/4f можно говорить лишь о том, что фаза сигнала одной выборки отличается от фазы сигнала другой на 90 град.

 

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

 

Продолжением следует.

Согласен. Фаза сигнала одной выборки отличается от фазы сигнала другой на 90 град.

В нашем реальном железе гармонические составляющие нас не интересуют (ничтожно малы). Впереди (предварительный усилитель) стоит аналоговый фильтр (отрезает верхние частоты), потом КИХ со сносом сигнала вниз (децимация).

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


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

Согласен. Фаза сигнала одной выборки отличается от фазы сигнала другой на 90 град.

В нашем реальном железе гармонические составляющие нас не интересуют (ничтожно малы).

 

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

 

В любом случае, это ни коим образом не разделяет выборки на синусную и косинусную.

 

Впереди (предварительный усилитель) стоит аналоговый фильтр (отрезает верхние частоты), потом КИХ со сносом сигнала вниз (децимация).

 

Не знаю, что Вы понимаете под КИХ, но КИХ сигнал вниз не сносит. А если Вы делаете децимацию в расчете на полосу сигнала, снесенного на 0-ю частоту, то получите в этом случае наложение спектров.

 

 

Вернемся к квадратурам. Синусная и косинусная составляющие возникают когда Вы раскладываете сигнал по 2-м ортогональным функциям - sin и cos. Именно поэтому составляющие называются синусной и косинусной.

 

Разложение выполняется по следующей схеме:

post-7537-1378655244_thumb.jpg

 

Важно то, что каждая выборка умножается на sin и cos и именно эти функции, а не выборки имеют постоянную разницу по фазе - 90 град. И эта разница постоянна в любой момент времени, а не между 2-мя моментами времени. И именно поэтому, какая-бы разность фазы не была у входного сигнала между двумя выборками, это не делает выборки синусными и косинусными.

 

На каждую выборку входного сигнала у Вас обязательно получается два значения SI и SQ - это комплексное число (SI + j*SQ).

 

Возьмем ваш случай - частота дискретизации в 4 раза выше центральной частоты. Умножим на sin и cos с частотой равной центральной, перенеся сигнал, таким образом, на 0-ю чатсоту

 

post-7537-1378655955_thumb.jpg

 

Как видите, благодаря значениям sin и cos умножения сводятся к тривиальным - на 0, 1 и -1. Но их все же нужно проделать. И хотя через раз SI и SQ поочередно принимают значение 0, оставшиеся через раз меняют знак. Поэтому даже в вашем случае, просто так причислять выборки к синусным и косинусным не получится.

 

Да это и не нужно т.к., если я правильно понимаю задачу, Вас интересует пространственная частота. Т.е. Вас интересует не то, как меняются значения конкретного КИХ во времени, а то, как меняется значение от одного КИХ к другому в данный момент времени. Поэтому, каждый раз, когда КИХи выдают набор значений - вещественных значений (исходя из того, что Вы описали выше) - этот набор и есть вход БПФ. Следующий набор - следующее преобразование.

 

Предположим КИХ n выдает значение D[n] в момент времени t1 - D[n](t1). Тогда в этот момент времени входными значениями для БПФ будет набор D[1...32] (t1) или в виде комплексных чисел можно так D[1] (t1) + i*0; D[2] (t1) + i*0; ... D[32] (t1) + i*0. Вот над этими значениями и нужно произвести 32-х точечное БПФ.

 

И несмотря на то, что входные данные БПФ, по-сути, вещественные числа, коэффициенты БПФ все равно комплексные т.к. БПФ это лишь способ быстро рассчитать набор корреляций входного сигнала с набором функций вида cos( 2*pi*f[n] * t ) + i*sin( 2*pi*f[n] * t).

 

Если задача состоит в том, чтобы с помощью БПФ определить угол прихода волны и если этот угол может меняться от 0 до 90 и более град. , то Вам нельзя сносить входной сигнал на 0-ю частоту и делать децимацию т.к. пространственная частота будет меняться от 0 (когда фронт волны строго перпендикулярен линии датчиков) до 90 кГц, когда фронт волны параллелен линии датчиков.

 

 

 

 

 

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


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

Да это и не нужно т.к., если я правильно понимаю задачу, Вас интересует пространственная частота. Т.е. Вас интересует не то, как меняются значения конкретного КИХ во времени, а то, как меняется значение от одного КИХ к другому в данный момент времени. Поэтому, каждый раз, когда КИХи выдают набор значений - вещественных значений (исходя из того, что Вы описали выше) - этот набор и есть вход БПФ. Следующий набор - следующее преобразование.

Именно так!

 

Не знаю, что Вы понимаете под КИХ, но КИХ сигнал вниз не сносит. А если Вы делаете децимацию в расчете на полосу сигнала, снесенного на 0-ю частоту, то получите в этом случае наложение спектров.

Да, именно на полосу. Если Вы имеете ввиду алиасинг, то вроде там все в порядке.

 

.............

Предположим КИХ n выдает значение D[n] в момент времени t1 - D[n](t1). Тогда в этот момент времени входными значениями для БПФ будет набор D[1...32] (t1) или в виде комплексных чисел можно так D[1] (t1) + i*0; D[2] (t1) + i*0; ... D[32] (t1) + i*0. Вот над этими значениями и нужно произвести 32-х точечное БПФ.

 

И несмотря на то, что входные данные БПФ, по-сути, вещественные числа, коэффициенты БПФ все равно комплексные т.к. БПФ это лишь способ быстро рассчитать набор корреляций входного сигнала с набором функций вида cos( 2*pi*f[n] * t ) + i*sin( 2*pi*f[n] * t).

 

Если задача состоит в том, чтобы с помощью БПФ определить угол прихода волны и если этот угол может меняться от 0 до 90 и более град. , то Вам нельзя сносить входной сигнал на 0-ю частоту и делать децимацию т.к. пространственная частота будет меняться от 0 (когда фронт волны строго перпендикулярен линии датчиков) до 90 кГц, когда фронт волны параллелен линии датчиков.

Спасибо. Я еще перечитаю все внимательнее.

Но в общем пока согласен.

Что касается задачи, задача именно та, что Вы описали. Только углы у нас малые - 7 штук по 2.48 град с одной и с другой стороны.

Что касается БПФ. Что на него подавать? Матлаб сказал, что чередующиеся четные и нечетные выходные данные после КИХ на реал и на имаг входы БПФ дают на его выходе нужный результат - всплеск на нужном выходе и знак угла падения волны (справа от центра или слева).

Грубо это можно пояснить так:

Если пространственная частота сформированная одними выборками будет опережать по фазе пространственную частоту сформированную соседними выорками то знак угла прихода волны будет одним, в противном случае (отставать по фазе) - другим

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

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


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

[Матлаб сказал, что чередующиеся четные и нечетные выходные данные после КИХ на реал и на имаг входы БПФ дают на его выходе нужный результат - всплеск на нужном выходе и знак угла падения волны (справа от центра или слева).

Грубо это можно пояснить так:

Если пространственная частота сформированная одними выборками будет опережать по фазе пространственную частоту сформированную соседними выорками то знак угла прихода волны будет одним, в противном случае (отставать по фазе) - другим

 

В принципе такое разделение на четные-нечетные отсчеты почти что выполняет перенос на нулевую частоту. Но у вас от выборки в выборке будет скакать фаза на пи.

Перенос вниз выполняется согласно формуле y=LPF(x*exp(-j*w*n)), где x- исходный сигнал, у-сигнал после переноса, а LPF - оператор низкочастотной фильтрации. С учетом, что в вашем случае экспонента принимает 4 значения : +-1 и +-i, приняв в качестве фильтра скользящее среднее по двум отсчетам, получится как раз ваш результат с поправкой на скачки фазы. Если вы при этом прореживаете сигнал в четное число раз, то скачков фазы не будет. Главный недостаток вашего подхода в том, что вы практически не фильтруете шум, и соответственно снижаете точность пеленгации.

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


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

В принципе такое разделение на четные-нечетные отсчеты почти что выполняет перенос на нулевую частоту. Но у вас от выборки в выборке будет скакать фаза на пи.

Перенос вниз выполняется согласно формуле y=LPF(x*exp(-j*w*n)), где x- исходный сигнал, у-сигнал после переноса, а LPF - оператор низкочастотной фильтрации. С учетом, что в вашем случае экспонента принимает 4 значения : +-1 и +-i, приняв в качестве фильтра скользящее среднее по двум отсчетам, получится как раз ваш результат с поправкой на скачки фазы. Если вы при этом прореживаете сигнал в четное число раз, то скачков фазы не будет. Главный недостаток вашего подхода в том, что вы практически не фильтруете шум, и соответственно снижаете точность пеленгации.

Понятно.

В чем будут выражаться скачки фазы касательно выходов (реал и имаг) БПФ?

Можно про фильтрацию шума еще несколько слов. Как это сделать?

Разве недостаточно аналогового предвара с фильтром и последующего КИХ?

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


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

В чем будут выражаться скачки фазы касательно выходов (реал и имаг) БПФ?

Знак будет скакать с минуса на плюс. Может быть это для вас и не важно.

 

Разве недостаточно аналогового предвара с фильтром

 

Аналогового чего?

 

и последующего КИХ?

Смотря какой КИХ. Если полосовой на нужную частоту и с правильной полосой, то да, хватит. Но на нулевой можно поставить БИХ и сэкономить на ресурсах.

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


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

Здравствуйте.

"Цифровая обработка сигналов. Практический подход" 2-е издаие. Айфичер, Джервис.

Рекомендую, очень неплохая книга. Когда делал своё FFT, в основном ей пользовался. Всё рассказано на пальцах и с примерами.

Изучите - большинство вопросов и отпадёт.

 

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


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

Знак будет скакать с минуса на плюс. Может быть это для вас и не важно.

Если можно еще раз. В зависимости от пространственной частоты всплеск на выходе БПФ (реал) будет на одном из частотных выходов. По соотношению фаз сигналов формируемых четными и нечетными выборками всплеск будет справа или слева от центра. Например, или в 3_й точке или в 29 точке выхода (реал) БПФ.

Знак чего будет скакать с плюса на минус? Если знак всплеска то не важно. Если всплеск будет скакать с 3_его на 29_й и обратно то дело труба.

Аналогового чего?

Предварительный усилитель с фильтром верхних частот.

Смотря какой КИХ. Если полосовой на нужную частоту и с правильной полосой, то да, хватит. Но на нулевой можно поставить БИХ и сэкономить на ресурсах.

КИХ (точнее 32 КИХ) полосовой с центральной 90 кГц, полоса 40 кГц.

 

Здравствуйте.

"Цифровая обработка сигналов. Практический подход" 2-е издаие. Айфичер, Джервис.

Рекомендую, очень неплохая книга. Когда делал своё FFT, в основном ей пользовался. Всё рассказано на пальцах и с примерами.

Изучите - большинство вопросов и отпадёт.

Книжка нормальная, но вопросы всеравно остаются. Кстати в части практической реализации БПФ там все то же самое, что и везде. Но в моем случае, какраз практическая реализация дело третье. С ним я надеюсь справлюсь. Тут с теорией пока не все катит. Кстати, что касается именно БПФ - это на мой взгляд самое подходящее 5.rar

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

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


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

В принципе такое разделение на четные-нечетные отсчеты почти что выполняет перенос на нулевую частоту. Но у вас от выборки в выборке будет скакать фаза на пи.

Перенос вниз выполняется согласно формуле y=LPF(x*exp(-j*w*n)), где x- исходный сигнал, у-сигнал после переноса, а LPF - оператор низкочастотной фильтрации. С учетом, что в вашем случае экспонента принимает 4 значения : +-1 и +-i, приняв в качестве фильтра скользящее среднее по двум отсчетам, получится как раз ваш результат с поправкой на скачки фазы. Если вы при этом прореживаете сигнал в четное число раз, то скачков фазы не будет. Главный недостаток вашего подхода в том, что вы практически не фильтруете шум, и соответственно снижаете точность пеленгации.

 

Знак будет скакать с минуса на плюс. Может быть это для вас и не важно.

 

Аналогового чего?

 

Смотря какой КИХ. Если полосовой на нужную частоту и с правильной полосой, то да, хватит. Но на нулевой можно поставить БИХ и сэкономить на ресурсах.

 

Господа! Не надо человека с толку сбивать! Плиз! Ему нужна пространственная частота. Дайте ему пока разобраться с БПФ.

 

Если бы ему нужен был бы перенос сигнала на 0-ю частоту в тракте датчика, то его нужно было бы просто сделать, а не гадать насколько близко к этому разделение на четные и нечетные гармоники и какие "побочные эффекты" возникают по сравнению с честной реализацией переноса на 0-ю частоту.

 

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

 

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

 

Самое главное, то что сигнал поступающий на каждый датчик весьма опосредовано связан с пространственной частотой. На датчики приходит сигнал с центральной частотой 90 кГц +- Х, а у пространственной частоты центральная частота = 0, а полоса около 20 кГц (исходя из 7 углов по 2.48 град)

 

 

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


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

Самое главное, то что сигнал поступающий на каждый датчик весьма опосредовано связан с пространственной частотой. На датчики приходит сигнал с центральной частотой 90 кГц +- Х, а у пространственной частоты центральная частота = 0, а полоса около 20 кГц (исходя из 7 углов по 2.48 град)

Так оно и есть. Смена фронта падения волны от 90 град в меньшую сторону должна менять пространственную частоту от 0 до ... и это даст возможность с пом. БПФ эту пространственную частоту определить. Пскольку она жестко связана с углом падения волны - значит можно определить и сам угол. Как определить знак угла или наклон фронта волны с одной или с другой стороны? Матлаб сказал что путем подачи четных и нечетных данных (после КИХ) (КИХ работает с выборками 4 на период + данные выдаются с прореживанием на 5 ) на реал и имаг входы БПФ. Интуитивно это понимаю. Толком объяснить почему не могу. Что делать?

Может по ходу пока реализовать собственно БПФ8, затем БПФ4, потом и БПФ32 на их базе.

БПФ8 вроде уже накатал, проверить надо.

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

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


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

Самое главное, то что сигнал поступающий на каждый датчик весьма опосредовано связан с пространственной частотой. На датчики приходит сигнал с центральной частотой 90 кГц +- Х, а у пространственной частоты центральная частота = 0, а полоса около 20 кГц (исходя из 7 углов по 2.48 град)

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

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


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

сброс сигнала в ноль

 

Это когда, например, на триггер подают сигнал сброса и его выход переходит в состояние логического 0. Давайте писать так, чтобы написанное было понятно для инженеров, даже если не читать все обсуждение.

 

 

Автор просто применил неочевидную схему по принципу "вроде работает", а я указал на соответствие между ней и правильной обработкой.

 

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

 

Во-вторых, а Вы уверены что перенос спектра сигнала, принимаемого датчиками, на 0-ю частоту является правильной предварительной обработкой для последующего определения угла прихода сигнала? Если ДА, то Вы окажете большую услугу автору, если просто объясните, как правильно перенести спектр сигнала на 0-у частоту и, главное, каким образом далее определить угол прихода.

 

 

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


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

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

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

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

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

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

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

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

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

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