|
Анализатор спектра ультразвукового диапазона, Анализатор спектра до 100кГц |
|
|
|
Mar 7 2010, 11:13
|

Участник

Группа: Участник
Сообщений: 39
Регистрация: 8-12-09
Из: Новочебоксарск
Пользователь №: 54 124

|
На сайте http://www.zetms.ru/catalog/analyzers/a19.php есть описание анализатора спектра. Требуется проделать подобное, но на один канал (без аналогового выхода, цифрового выхода, коэффициенты усиления программируемые так же не нужны) с несколько измененными характеристиками: 1) Частота входного сигнала до 100кГц. 2) Частота дискретизации до 250кГц. 3) Количество разрядов АЦП 16. 4) Для отображения сигнала в частотную область использую БПФ (на ADSP 21375). 5) Динамический диапазон то же - 85дБ.Возникли вопросы по алгоритму:1) Если сигнал случайный (музыка, речь и.т.д), то как определить частоту гармоники с наибольшей амплитудой в спектре? 2) Как наиболее достоверно (погрешность от 2 до 5%) отобразить спектр? 3) Какую фильтрацию использовать? 4) Можно ли обойтись без октавных фильтров, а использовать скажем оконную фильтрацию (при условии, что накапливаю несколько периодов сигнала основной частоты)?
Сообщение отредактировал Nukers - Mar 7 2010, 11:16
|
|
|
|
|
 |
Ответов
|
Mar 7 2010, 21:00
|

Участник

Группа: Участник
Сообщений: 39
Регистрация: 8-12-09
Из: Новочебоксарск
Пользователь №: 54 124

|
Тут я постарался графически отобразить мое понятие временного наложения кольцевого буфера (Оно конечно абстрактно) Себе я выстроил такой алгоритм (поправьте, если заблуждаюсь): 1) Принимаем порцию из 1024 отсчетов. 2) Накладываем окно (т.е. копируем эту порцию 4 раза). 3) Делаем 4096 точечное БПФ. 4) Удаляем порцию из 1024 отсчетов №4. 5) Принимаем новую порцию из 1024 отсчетов. 6) Идем на шаг 3. (Выходит пока буфер "протолкнет" последний отсчет, принятый в самом начале пройдет 4 цикла БПФ - усвоил). и так пока солнце не сгорит.... Верно?В MatLab можно с помощью утилиты Filter Design & Analysis Tool можно рассчитать функцию окна. Там же можно узнать АЧХ этой функции и кучу разных параметров, вообщем вы знаете. Если эту оконную функцию экспортировать в Simulink, то будет построен стандартный прямой КИХ фильтр (вот почему я упоминал слово фильтр). Выходит, что для реализации оконной функции есть два метода: один при помощи кольцевых буферов, второй умножением каждого отсчета сигнала на соответсвующий весовой коэффициент и его сдвигом. Не пытаюсь спорить с вами, просто хотелось бы знать: Реализованный КИХ фильтр на основе весовой функции в MatLab и весовая функция на основе кольцевых буферов дадут одинаковые результаты? Да, использовать буду RealFFT. P.S. Спасибо за переживания. Никто меня не эксплуатирует. Тема интересная, потому и взял. Времени мало, так что, скорее всего, прийдется ограничиться микропроцессорной системой, кусками кода и алгоритмом. Все же знают, что у студентов на бумаге все работает.  Так что после университета будем развивать тему дальше
Сообщение отредактировал Nukers - Mar 7 2010, 21:03
|
|
|
|
|
Mar 8 2010, 07:11
|
Знающий
   
Группа: Свой
Сообщений: 688
Регистрация: 4-09-09
Пользователь №: 52 195

|
Цитата(Nukers @ Mar 8 2010, 00:00) 
Тут я постарался графически отобразить мое понятие временного наложения кольцевого буфера (Оно конечно абстрактно) Себе я выстроил такой алгоритм (поправьте, если заблуждаюсь): 1) Принимаем порцию из 1024 отсчетов. 2) Накладываем окно (т.е. копируем эту порцию 4 раза). 3) Делаем 4096 точечное БПФ. 4) Удаляем порцию из 1024 отсчетов №4. 5) Принимаем новую порцию из 1024 отсчетов. 6) Идем на шаг 3. (Выходит пока буфер "протолкнет" последний отсчет, принятый в самом начале пройдет 4 цикла БПФ - усвоил). и так пока солнце не сгорит.... Верно?В MatLab можно с помощью утилиты Filter Design & Analysis Tool можно рассчитать функцию окна. Там же можно узнать АЧХ этой функции и кучу разных параметров, вообщем вы знаете. Если эту оконную функцию экспортировать в Simulink, то будет построен стандартный прямой КИХ фильтр (вот почему я упоминал слово фильтр). Выходит, что для реализации оконной функции есть два метода: один при помощи кольцевых буферов, второй умножением каждого отсчета сигнала на соответсвующий весовой коэффициент и его сдвигом. Не могу не поучаствовать. При наложении окна на выборку окно ничего не копирует 4 раза. Просто окно как бы сглаживает выборку покраям, уменьшая разрывы функции при FFT. В матлаб для реализации оконной функции есть Window Design & Analysis Tool. И сглаживание, о котором я тебе говорил, не имеет отношение к КИХ-фильтрации. Просто окно может применяться для построения КИХ-фильтров. А алгоритм с перекрытием или скользящее окно - просто чтобы быстродействие системы увеличить, и получать результат FFT через меньшие промежутки времени. Тогда просто часть выборок предыдущей итерации (расчёт FFT) используется для следующей итерации. P.S. Не путай окно как функцию спадающую покраям (Хэмминг, Ханн, Блэкмэн...) и временное окно (время за которое берётся определённое количество выборок). Стучи в ICQ!) ---------------------------------------------------------------------------------------------------------------------------------------------- То, насколько я знаю проблему, позволяет мне сформулировать вопрос. Сигнал поступающий на осциллограф может иметь полосу до 100кГц. Остаётся открытым вопрос о длине выборки. Так как сигнал заведомо неизвестен. Допустим сигнал содержит составляющие 100Гц, 105Гц и 302 Гц. если N = 4096 то частотное разрешение в спектре составит 200000/4096 = 48,82 Гц. И мы просто не увидим с пектре гармоники 105, 302 Гц. Они просто переползут на ближайшие бины БПФ. и сильно могут искозить то, что должно приходиться на эти бины. Можно сделать вывод, что нужно сначала задаться наименьшим возможным шагом гармоник в сигнале? Как это решается в современных анализаторах спектра? Могу предположить, что в выборки сигнала можно вставить нули....
Сообщение отредактировал TigerSHARC - Mar 8 2010, 07:29
|
|
|
|
|
Mar 13 2010, 17:51
|

山伏
    
Группа: Свой
Сообщений: 1 827
Регистрация: 3-08-06
Из: Kyyiv
Пользователь №: 19 294

|
Цитата(TigerSHARC @ Mar 8 2010, 09:11)  Допустим сигнал содержит составляющие 100Гц, 105Гц и 302 Гц. если N = 4096 то частотное разрешение в спектре составит 200000/4096 = 48,82 Гц. И мы просто не увидим с пектре гармоники 105, 302 Гц. Они просто переползут на ближайшие бины БПФ. и сильно могут искозить то, что должно приходиться на эти бины. Надуманная проблема. А вот если изменения звукового давления - не нарушая Найквиста-Котельникова - будут приходиться не на целые дискреты времени от начала выборки(уже смешно  ) а на дробные? Перезапустить прибор? И так пока не угадаем? То что Вы описываете на самом деле не проблема. Временной сэмпл или частотный бин - однозначно-обратимо-разделимо размазывается по соседним выборкам. Но для отдельных случаев, например извечная тема - измерение Кг 50(60) Hz-овой синусоиды, это не очень удобно. Потому там и мухлюют с этим периодом измерений и числом точек FFT. Для любых "чуть более стохастических" сигналов с этим уже не заморачиваются... Единственное что - иногда при частоте дискретизации не кратной степени двойки (например кратной 44100) хотят получить кратный десяткам(удобно для восприятия человеком) шаг частотных бинов. Тогда нужно писать специфическое FFT - не для степеней 2-ки... Цитата(TigerSHARC @ Mar 8 2010, 09:11)  Можно сделать вывод, что нужно сначала задаться наименьшим возможным шагом гармоник в сигнале? Как это решается в современных анализаторах спектра? Никак... Такой проблемы нет. Цитата(TigerSHARC @ Mar 8 2010, 09:11)  Могу предположить, что в выборки сигнала можно вставить нули.... Куда? Интересно бы мне было узнать... Цитата(Nukers @ Mar 13 2010, 19:15)  Кто-нибудь может дать ссылку, где можно найти информацию по времени выполнения реального БПФ для ADSP-21375 при количестве точек 256, 512, 1024, 2048 и 4096?
Заранее огромное спасибо В листинге самих исходников приведены такты...  ...Кстати "реального" FFT, насколько помню там нет (а оно таки есть)... Но для 1024 точек RealFFT - заведомо быстрее ComplexFFT для 1024 точек. Прикиньте - не ошибетесь... Возьмите RealFFT из этой библиотеки. Далее есть 2-а пути - так и оставить - сомневаюсь что ассемблерный результат будет колоссально выше. Второй путь - убрать внутреннее комплексное БПФ (а оно там есть по-любому) и вставить ассемблерное с сайта AD...
--------------------
Нас помнят пока мы мешаем другим... //-------------------------------------------------------- Хороший блатной - мертвый... //-------------------------------------------------------- Нет старик, это те дроиды которых я ищу...
|
|
|
|
|
Mar 14 2010, 06:50
|
Знающий
   
Группа: Свой
Сообщений: 688
Регистрация: 4-09-09
Пользователь №: 52 195

|
Цитата(DRUID3 @ Mar 13 2010, 20:51)  Надуманная проблема. А вот если изменения звукового давления - не нарушая Найквиста-Котельникова - будут приходиться не на целые дискреты времени от начала выборки(уже смешно  ) а на дробные? Перезапустить прибор? И так пока не угадаем? То что Вы описываете на самом деле не проблема. Временной сэмпл или частотный бин - однозначно-обратимо-разделимо размазывается по соседним выборкам. Но для отдельных случаев, например извечная тема - измерение Кг 50(60) Hz-овой синусоиды, это не очень удобно. Потому там и мухлюют с этим периодом измерений и числом точек FFT. Для любых "чуть более стохастических" сигналов с этим уже не заморачиваются... Единственное что - иногда при частоте дискретизации не кратной степени двойки (например кратной 44100) хотят получить кратный десяткам(удобно для восприятия человеком) шаг частотных бинов. Тогда нужно писать специфическое FFT - не для степеней 2-ки... Никак... Такой проблемы нет. Куда? Интересно бы мне было узнать... В листинге самих исходников приведены такты...  ...Кстати "реального" FFT, насколько помню там нет (а оно таки есть)... Но для 1024 точек RealFFT - заведомо быстрее ComplexFFT для 1024 точек. Прикиньте - не ошибетесь... Возьмите RealFFT из этой библиотеки. Далее есть 2-а пути - так и оставить - сомневаюсь что ассемблерный результат будет колоссально выше. Второй путь - убрать внутреннее комплексное БПФ (а оно там есть по-любому) и вставить ассемблерное с сайта AD... Ну думаю теперь всё решено.
|
|
|
|
Сообщений в этой теме
Nukers Анализатор спектра ультразвукового диапазона Mar 7 2010, 11:13 DRUID3 Цитата(Nukers @ Mar 7 2010, 13:13) 1) Есл... Mar 7 2010, 11:28 Nukers Цитата..мало того, можно его отобразить с достовер... Mar 7 2010, 12:16 DRUID3 Цитата(Nukers @ Mar 7 2010, 14:05) Знаю, ... Mar 7 2010, 12:39 Nukers ЦитатаЦитата
Думаю, понятно что он делает.
Да, он... Mar 7 2010, 15:09 DRUID3 Цитата(Nukers @ Mar 7 2010, 17:09) Фильтр... Mar 7 2010, 19:04 DRUID3 Цитата(Nukers @ Mar 7 2010, 23:00) Тут я ... Mar 7 2010, 22:18    Nukers Спаасибо огромное. Но я нашел лишь для 21364. А дл... Mar 13 2010, 18:25     DRUID3 Цитата(Nukers @ Mar 13 2010, 20:25) Спаас... Mar 13 2010, 18:45 Nukers Уважаемый DRUID3. Есть к вам вопрос.
Уолт Кестер в... Mar 15 2010, 13:09 Nukers Господа форумчане подскажите!
Собираюсь испол... Mar 22 2010, 18:16 анатолий Цитата(Nukers @ Mar 22 2010, 21:16) Собир... Mar 24 2010, 13:02 TigerSHARC а кокой смысл делать БПФ до фильтрации... как я по... Mar 22 2010, 18:25 DRUID3 Nukers
я часа в 3-4 ночи просыпаюсь, тогда вам и о... Mar 22 2010, 18:50 TigerSHARC всё таки применение FIR в данном случае оправдано ... Mar 22 2010, 19:34 Nukers Я о том же, что и говорит анатолий.
Мне непременно... Mar 24 2010, 16:06 DRUID3 Цитата(анатолий @ Mar 24 2010, 15:02) КИХ... Mar 24 2010, 17:19 TigerSHARC Корректировать - это просто внести поправку. напри... Mar 24 2010, 17:07 Nukers ЦитатаПросто умножаешь выборку на весовую функцию ... Mar 24 2010, 17:17 Nukers ЦитатаУ Анатолия уже в теплице видимо новый урожай... Mar 24 2010, 17:35 TigerSHARC Сань, ну нахрена спектр умножать на окно?
для ... Mar 24 2010, 17:47 DRUID3 Цитата(TigerSHARC @ Mar 24 2010, 19:47) С... Mar 24 2010, 18:05 Nukers Согласен, ошибся. Поторопился. Теперь все вроде но... Mar 24 2010, 17:56 TigerSHARC теперь DRUID3 точно больше ничего не напишет)))) Mar 24 2010, 18:01 TigerSHARC Да, кстати про зеркальный канал. В реальных девайс... Mar 24 2010, 18:12 DRUID3 Цитата(TigerSHARC @ Mar 24 2010, 20:12) Д... Mar 24 2010, 18:30 Nukers ЦитатаНу начнем с того, что смысл этих расчетов по... Mar 25 2010, 06:40 DRUID3 Цитата(Nukers @ Mar 25 2010, 08:40) 1024*... Mar 25 2010, 07:33 Nukers ЦитатаУмножение на функцию окна гораздо легковесне... Mar 25 2010, 07:55
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|