Страница 1 из 2 12 Последняя
Показано с 1 по 20 из 28

Тема: Как сжать полосу?

  1. #1
    Зарегистрировался
    Автор темы
    Аватар для olegoleg
    Регистрация
    04.04.2024
    Сообщений
    8

    По умолчанию Как сжать полосу?

    Прошу подсказать, как грамотно решить следующую практическую задачу.

    От датчика в компьютер приходит сигнал с частотой дискретизации 125 КГц. Для целей анализа именно такая частота и нужна, все в порядке.

    Но еще я строю спектр. На спектре я хочу видеть полосу приблизительно до 1000 Гц. Чтобы этого добиться (сжать полосу), я сначала суммировал по N точек и подавал эти значения на вход БПФ. Получилось плохо, т.к. амплитуды гармонических составляющих падали, тонули в шуме.

    Поэтому я стал выдергивать каждую N-ю точку. Все работает хорошо, частоты на спектре видны, но... Я ведь отбрасываю 99% полезной информации!

    Наверное, можно делать как-то по-другому?

  2. #2
    Завсегдатай Аватар для LepekhinV
    Регистрация
    20.02.2007
    Адрес
    г.Рязань
    Возраст
    65
    Сообщений
    4,455

    По умолчанию Re: Как сжать полосу?

    Офф. Н.А. Некрасов .
    "Поздняя осень. Грачи улетели,
    Лес обнажился, поля опустели,

    Только не сжата полоска одна…
    Грустную думу наводит она."
    Пардон, навеяло.

  3. #3
    Зарегистрировался
    Автор темы
    Аватар для olegoleg
    Регистрация
    04.04.2024
    Сообщений
    8

    По умолчанию Re: Как сжать полосу?

    Цитата Сообщение от LepekhinV Посмотреть сообщение
    Офф. Н.А. Некрасов .
    "Поздняя осень. Грачи улетели,
    Лес обнажился, поля опустели,

    Только не сжата полоска одна…
    Грустную думу наводит она."
    Пардон, навеяло.
    off/off:

    Kech kuz. Qoraqarg*alar uchib ketishdi
    O*rmon yalang*och, dalalar bo*m-bo*sh,
    Faqat bitta tasma siqilmagan...
    U meni xafa qiladi.

    ---------- Сообщение добавлено 16:55 ---------- Предыдущее сообщение было 16:54 ----------

    Пошутили и ладно

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

  4. #4
    Не хочу! Аватар для Alex
    Регистрация
    20.03.2003
    Адрес
    Worldwide
    Возраст
    62
    Сообщений
    37,605

    По умолчанию Re: Как сжать полосу?

    А какой Вам нужен "ответ"?

    Хотите полосу до 1кгц? Так сделайте даунсемплинг со 125кГц до 2 или 4 кГц, а дальше ФФТ.

    Цитата Сообщение от olegoleg Посмотреть сообщение
    Чтобы этого добиться (сжать полосу), я сначала суммировал по N точек и подавал эти значения на вход БПФ. Получилось плохо, т.к. амплитуды гармонических составляющих падали, тонули в шуме.

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


    Цитата Сообщение от olegoleg Посмотреть сообщение
    Поэтому я стал выдергивать каждую N-ю точку. Все работает хорошо, частоты на спектре видны, но... Я ведь отбрасываю 99% полезной информации!
    Так перед децимацией надо ФНЧ делать!
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Да мне-то что, меняйтесь!"(с)анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

  5. #5

    По умолчанию Re: Как сжать полосу?

    olegoleg, Вы чего-то странного хотите. Возможно, я Вас просто не понимаю.
    Если Вам для решения каких-то своих задач нужна частота дискретизации именно 125 кГц, то теорема Котельникова (она же Шеннона) даст Вам оценку полосы пропускания на уровне 60 кГц ( к точному значению прошу не придираться, для этого есть срачи на разных форумах). После правильно выполненного БПФ именно это Вы и увидите. НО! Вам регистрация столь широкого спектра не нужна. Вы поглядите на картинку и обрежете частоты свыше 1000 Гц. Вас же не смущает, что кучу информации Вы отбрасываете. Поэтому и непонятно, что Вам не нравиться.

    ---------- Сообщение добавлено 17:14 ---------- Предыдущее сообщение было 17:13 ----------

    Ну вот? Alex опередил и всё сильно лучше меня объяснил.

  6. #6
    Зарегистрировался
    Автор темы
    Аватар для olegoleg
    Регистрация
    04.04.2024
    Сообщений
    8

    По умолчанию Re: Как сжать полосу?

    Цитата Сообщение от Мирон Посмотреть сообщение
    olegoleg, Вы чего-то странного хотите. Возможно, я Вас просто не понимаю.
    Если Вам для решения каких-то своих задач нужна частота дискретизации именно 125 кГц, то теорема Котельникова (она же Шеннона) даст Вам оценку полосы пропускания на уровне 60 кГц ( к точному значению прошу не придираться, для этого есть срачи на разных форумах). После правильно выполненного БПФ именно это Вы и увидите. НО! Вам регистрация столь широкого спектра не нужна. Вы поглядите на картинку и обрежете частоты свыше 1000 Гц. Вас же не смущает, что кучу информации Вы отбрасываете. Поэтому и непонятно, что Вам не нравиться.

    ---------- Сообщение добавлено 17:14 ---------- Предыдущее сообщение было 17:13 ----------

    Ну вот? Alex опередил и всё сильно лучше меня объяснил.

    Я использую БПФ, который дает мне спектр, скажем, с 4096 точками. Если я лупой смотрю на участок этого спектра 0 - 1000 Гц, я вижу на этом участке всего точек 30, то есть очень грубо.
    Эта проблема прекрасно решается, если я использую только каждую сотую точку. Потому что я получаю спектр из все тех же 4096 точек, но все они лежат в низкочастотном диапазоне, то есть я прекрасно вижу низкие частоты.

    Мой вопрос в том, как бы мне использовать информацию, содержащуюся в отброшенных точках сигнала?

  7. #7
    Не хочу! Аватар для Alex
    Регистрация
    20.03.2003
    Адрес
    Worldwide
    Возраст
    62
    Сообщений
    37,605

    По умолчанию Re: Как сжать полосу?

    Выше написано "как".

    ---------- Сообщение добавлено 17:36 ---------- Предыдущее сообщение было 17:34 ----------

    Цитата Сообщение от olegoleg Посмотреть сообщение
    Я использую БПФ, который дает мне спектр, скажем, с 4096 точками. Если я лупой смотрю на участок этого спектра 0 - 1000 Гц, я вижу на этом участке всего точек 30, то есть очень грубо.
    А Вы в курсе простой формулы, связываюшей разрешающую способность по частоте, с частотой дискретизации и числом точек БПФ?
    Ее учат чуть ли не в самом начале курса ЦОС.

    ---------- Сообщение добавлено 17:38 ---------- Предыдущее сообщение было 17:36 ----------

    Цитата Сообщение от olegoleg Посмотреть сообщение
    Эта проблема прекрасно решается, если я использую только каждую сотую точку.
    Вы никогда не получите спектр до 1кгц, если будете из 125кгц делать 1.25кгц, надеюсь понятно "почему".
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Да мне-то что, меняйтесь!"(с)анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

  8. #8
    Зарегистрировался
    Автор темы
    Аватар для olegoleg
    Регистрация
    04.04.2024
    Сообщений
    8

    По умолчанию Re: Как сжать полосу?

    Эвереджинг коненчо не самый лучший варинт даунсмплинга
    Вот я, собственно, и спрашиваю, а какие еще бывают варианты?

    В этом и состоит мой вопрос. Все остальное мне понятно.
    Последний раз редактировалось olegoleg; 04.04.2024 в 18:19. Причина: Уточнение.

  9. #9
    Не хочу! Аватар для Alex
    Регистрация
    20.03.2003
    Адрес
    Worldwide
    Возраст
    62
    Сообщений
    37,605

    По умолчанию Re: Как сжать полосу?

    Цитата Сообщение от olegoleg Посмотреть сообщение
    а какие еще бывают варианты?
    Выше написано.

    Собственно, все классические способы описаны в учебниках по ЦОС.
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Да мне-то что, меняйтесь!"(с)анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

  10. #10
    Зарегистрировался
    Автор темы
    Аватар для olegoleg
    Регистрация
    04.04.2024
    Сообщений
    8

    По умолчанию Re: Как сжать полосу?

    Спасибо, я все понял.

    У меня дополнительный вопрос. Вот я в свое время написал на C++ класс для БПФ, им и пользуюсь.

    Кто знает, где можно найти аналогичный класс? Только не советуйте погуглить. Меня интересует такой класс, которым все пользуются для встраивания в свой код.

  11. #11
    Не хочу! Аватар для Alex
    Регистрация
    20.03.2003
    Адрес
    Worldwide
    Возраст
    62
    Сообщений
    37,605

    По умолчанию Re: Как сжать полосу?

    Это уже не ко мне, я "++" не использую, у меня просто "С".
    Последний раз редактировалось Alex; 05.04.2024 в 08:22.
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Да мне-то что, меняйтесь!"(с)анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

  12. #12
    Завсегдатай Аватар для Станислафф
    Регистрация
    18.10.2007
    Адрес
    Тольятти
    Возраст
    46
    Сообщений
    1,614

    По умолчанию Re: Как сжать полосу?

    Цитата Сообщение от olegoleg Посмотреть сообщение
    125 КГц. Для целей анализа именно такая частота и нужна, все в порядке.

    .......... но... Я ведь отбрасываю 99% полезной информации!
    Как-то взаимоисключающе звучит.

    Если тащите в комп 125 кГц - значит оно нужно и ПОЛЕЗНО. А если НЕ ПОЛЕЗНО - зачем в комп тащите, может не всё в порядке?
    приму в дар видеокарту ET6000 TsengLabs

  13. #13
    Завсегдатай Аватар для dortonyan
    Регистрация
    03.06.2009
    Адрес
    BLR
    Возраст
    38
    Сообщений
    3,572

    По умолчанию Re: Как сжать полосу?

    Цитата Сообщение от olegoleg Посмотреть сообщение
    Но еще я строю спектр. На спектре я хочу видеть полосу приблизительно до 1000 Гц. Чтобы этого добиться (сжать полосу), я сначала суммировал по N точек и подавал эти значения на вход БПФ. Получилось плохо, т.к. амплитуды гармонических составляющих падали, тонули в шуме.

    Поэтому я стал выдергивать каждую N-ю точку. Все работает хорошо, частоты на спектре видны, но... Я ведь отбрасываю 99% полезной информации!

    Наверное, можно делать как-то по-другому?
    Т.е. вам нужно выполнить децимацию?
    Перед отбрасыванием семплов сначала необходимо выполнить фильтрацию, как указал Alex. Только делать фильтрацию как у вас описано - неправильно.
    Если надо отображать полосу до 1кГц, то частота семплирования должна быть как минимум вдвое выше (теорема Котельникова-Найквиста). Но реально надо больше чем в два раза, т.к. у фильтра есть еще переходная полоса.
    Т.е. частота семплирования после децимации должна быть условно 3..10кГц, в зав-ти от типа фильтра. А по хорошему нужно еще учитывать АЧХ аналогового ФНЧ на входе АЦП.
    Если надо фильтр попроще, то гуглите "фильтр скользящего среднего" и его экономичную реализацию "CIC-фильтр". CIC фильтром можно сразу выполнить и децимацию, и его можно использовать разного порядка. Чем выше порядок, тем более крутая переходная полоса.
    Если надо совсем узкая переходная полоса (условно менее киллогерца), то для этого уже нужен FIR фильтр.
    Моделить фильтры удобно в матлабе, там же можно и запустить ФФТ анализ с выхода фильтра.

  14. #14
    Зарегистрировался
    Автор темы
    Аватар для olegoleg
    Регистрация
    04.04.2024
    Сообщений
    8

    По умолчанию Re: Как сжать полосу?

    Спасибо, я все понял.

    Конечно, теперь я буду использовать перед БПФом свой ФНЧ.

    Почему я вошел в ступор. Дело в том, что перед АЦП у меня стоит фильтр Баттерворта. Поэтому мне не приходило в голову использовать еще один ФНЧ. Вот я и подумал, что бывает какой-то специальный метод сжатия полосы, а не просто фильтр + децимация.

    Заинтересовался CIC-фильтром, спасибо.

  15. #15
    Не хочу! Аватар для Alex
    Регистрация
    20.03.2003
    Адрес
    Worldwide
    Возраст
    62
    Сообщений
    37,605

    По умолчанию Re: Как сжать полосу?

    Цитата Сообщение от olegoleg Посмотреть сообщение
    Дело в том, что перед АЦП у меня стоит фильтр Баттерворта. Поэтому мне не приходило в голову использовать еще один ФНЧ
    Это разные фильтры.
    Первый обязателен как антиалиасный перед АЦП, дожен резать у Вас все, что выше 62кГц.
    Второй - перед децимацией (по большому счету, он тоже вроде как "антиалиасный", только на другую частоту, поскольку найквист другой).

    Цитата Сообщение от olegoleg Посмотреть сообщение
    какой-то специальный метод сжатия полосы,
    Например усреднение. Но у Вас оно почему-то не работает.
    И это не "сжатие полосы" а даунсемплинг.
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Да мне-то что, меняйтесь!"(с)анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

  16. #16
    Завсегдатай Аватар для dortonyan
    Регистрация
    03.06.2009
    Адрес
    BLR
    Возраст
    38
    Сообщений
    3,572

    По умолчанию Re: Как сжать полосу?

    Цитата Сообщение от Alex Посмотреть сообщение
    Это разные фильтры.
    Первый обязателен как антиалиасный перед АЦП, дожен резать у Вас все, что выше 62кГц.
    Второй - перед децимацией (по большому счету, он тоже вроде как "антиалиасный", только на другую частоту, поскольку найквист другой).
    Немного дополню.
    Оба фильтра выполняют одну и ту же роль - антиалиясинговый фильтр. И формально можно обойтись только одним аналоговым фильтром на входе АЦП. В "цифре" останется только "выдернуть каждую N-ю точку", как и описано в первом посте.
    Если в оцифрованном сигнале отсутствуют компоненты с частотой выше 1к, то такую децимацию (без цифровой фильтрации) вполне можно считать корректной.
    А вот если такие компоненты присутствуют, и если нужна узкая переходная полоса, то аналоговый фильтр получается слишком громоздкий.
    Поэтому аналоговые антиалиясинговые ФНЧ проектируют максимально просто, т.е. так чтобы обеспечить необходимое ослабление на частоте Найквиста (половине частоты семплирования) АЦП. А дальше уже при децимации выполняют фильтрацию в цифре.
    Последний раз редактировалось dortonyan; 05.04.2024 в 13:14.

  17. #17
    Не хочу! Аватар для Alex
    Регистрация
    20.03.2003
    Адрес
    Worldwide
    Возраст
    62
    Сообщений
    37,605

    По умолчанию Re: Как сжать полосу?

    Цитата Сообщение от dortonyan Посмотреть сообщение
    И формально можно обойтись только одним аналоговым фильтром на входе АЦП.
    Можно, на 2-4кГц, но тогда непонятно - зачем делать оцифровку на 125кГц и тащить ее в комп?
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Да мне-то что, меняйтесь!"(с)анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

  18. #18
    Завсегдатай Аватар для dortonyan
    Регистрация
    03.06.2009
    Адрес
    BLR
    Возраст
    38
    Сообщений
    3,572

    По умолчанию Re: Как сжать полосу?

    Цитата Сообщение от Alex Посмотреть сообщение
    Можно, на 2-4кГц, но тогда непонятно - зачем делать оцифровку на 125кГц и тащить ее в комп?
    Чтобы упростить аналоговую фильтрацию.

    ФНЧ должен пропустить полезный сигнал (в данном случае 1кГц), и задержать все частоты выше частоты Найквиста (половина частоты семплирования).
    Допустим надо обеспечить ДД в 60дБ. Тогда и ослабление на частоте Найквиста должно быть на те же 60дБ.
    Если частота семплирования 4кГц, а полоса пропускания 1к, то это означает, что ФНЧ должен обеспечить спад в 60дБ в полосе с 1к до 2к, т.е. на переходной полосе всего в 1кГц.
    Другое дело, если частота семплирования 125кГц. Тогда для аналогового ФНЧ переходная полоса получается с 1кГц до 62,5кГц. Обеспечить подавление 60дБ на 62,5кГц при полосе пропуская 1кГц гораздо проще.

  19. #19
    Не хочу! Аватар для Alex
    Регистрация
    20.03.2003
    Адрес
    Worldwide
    Возраст
    62
    Сообщений
    37,605

    По умолчанию Re: Как сжать полосу?

    Цитата Сообщение от dortonyan Посмотреть сообщение
    Обеспечить подавление 60дБ на 62,5кГц при полосе пропуская 1кГц гораздо проще.
    Это если бы небыло последущей децимации, а с ней - ему аналоговый фильтр перед АЦП придется ставить точно такой-же, как если бы семрейт был несколько килогерц.
    То есть., весь нынешний 125-килогерцовый семплрейт "в свисток уйдет".
    (Он и так уйдет, но с меньшими затратами).
    "Замполит, чайку?"(с)"Охота за Красным Октябрем".
    "Да мне-то что, меняйтесь!"(с)анек.
    <-- http://altor1.narod.ru --> Вопросы - в личку, е-мейл, скайп.

  20. #20
    Завсегдатай Аватар для dortonyan
    Регистрация
    03.06.2009
    Адрес
    BLR
    Возраст
    38
    Сообщений
    3,572

    По умолчанию Re: Как сжать полосу?

    Цитата Сообщение от Alex Посмотреть сообщение
    Это если бы небыло последущей децимации, а с ней - ему аналоговый фильтр перед АЦП придется ставить точно такой-же, как если бы семрейт был несколько килогерц.
    Не придется.
    Для аналогового ФНЧ достаточно отфильтровать алиясинг на частотах выше половины частоты семплирования АЦП. Тогда мы получим корректное представление данных в "цифре".
    На дальнейшие манипуляции аналоговый ФНЧ уже не влияет, и всю обработку можно выполнять в чисто цифровом виде.

    По этой причине фильтровать вход ДС АЦП гораздо проще, чем SAR (при сходном ДД обоих конвертеров). Т.к. у первого частота семплирования (частота модулятора) в разы выше.

    ---------- Сообщение добавлено 16:56 ---------- Предыдущее сообщение было 16:45 ----------

    Точнее даже не так.
    Цифровая фильтрация еще больше упрощает аналогоавй фильтр, т.к. при децимации смещает частоту фильтрации алиясинга выше частоты Найквиста.
    Если частота семплирования Fs = 125кГц, полоса пропускания ЦФ Fp = 1кГц, а частота макс. подавления Fd = 2кГц (переходная полоса 1кГц), то для аналоговго ФНЧ необходимо обеспечить требуемое ослабление на частоте F = Fs - Fd = 125 - 2 = 122кГц.
    Для иллюстрации картинка из ДШ ADS12L01:
    Нажмите на изображение для увеличения. 

Название:	изображение_2024-04-05_165538610.png 
Просмотров:	32 
Размер:	56.7 Кб 
ID:	452597
    Красными точками я пометил точки пересечения АЧХ аналогового и цифрового ФНЧ, которые определяют максимальный уровень алиясинга в сигнале при оцифровке.

Страница 1 из 2 12 Последняя

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •