Цифровые фильтры

Тема в разделе "WASM.ELECTRONICS", создана пользователем Aids, 26 дек 2007.

  1. Aids

    Aids New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2007
    Сообщения:
    275
    Необходимо составить программу цифрового фильтра. Чтобы в последствии вшить в микроконтроллер. Фильтр должен выделять из сигнала определённую частоту.
    Всё что я нашёл в инете это разностное уравнение с помощю которого можно создать фильтр. Но как расчитать коэффициенты чтобы они соответствовали моему фильтру мне не понятно. И какой порядок уравнения брать?
     
  2. al79

    al79 Алексей

    Публикаций:
    0
    Регистрация:
    11 май 2006
    Сообщения:
    133
    Адрес:
    Екатеринбург
    Вот здесь есть немножко о цифровых фильтрах http://www.naf-st.ru/main/digit
    Может наталкнет на какие то идеи.
     
  3. Bat

    Bat New Member

    Публикаций:
    0
    Регистрация:
    6 май 2005
    Сообщения:
    12
    Адрес:
    Ukraine
    Aids
    Почитайте теорию. Есть достаточно книг.
    Фильтры бывают КИХ и БИХ...
    Есть много программ..Например тот же матлаб.Там есть специальный тулбокс для расчёта.
    Порядок определяется заданными вами условиями для АЧХ. Полоса, неравномерность в полосе частот, подавление за полосой пропускания...
     
  4. Aids

    Aids New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2007
    Сообщения:
    275
    Bat
    Книг по ЦФ накачал. Теорию рассчёта коэффициентов тяжело как то понимается. Скачал программу VisSim. Она в виде симулятора.Может рассчитывать коэффициенты. Задаю в ней полосу пропускания для фильтра и порядок уравнения и получаю коэффициенты. Потом подаю сигнал с генератора на фильтр и снимаю осцилограмму. Результат какой то странный получается. Не то что должно быть на самом деле.
     
  5. S_Alex

    S_Alex Alex

    Публикаций:
    0
    Регистрация:
    27 авг 2004
    Сообщения:
    561
    Адрес:
    Ukraine
    Простите за не скромный вопрос.
    А, частота выборки сигнала какая?
    И совпадает ли она с расчетной?
     
  6. MIX

    MIX New Member

    Публикаций:
    0
    Регистрация:
    10 янв 2008
    Сообщения:
    14
    Может не совсем по теме, но почему-бы не Systolix от analog device
    AD7725 ?

    Требует минимум познаний.
     
  7. Aids

    Aids New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2007
    Сообщения:
    275
    S_Alex
    частота сигнала f=1500гц соответственно дескритизации f=3000Гц или более
     
  8. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    S_Alex
    теорема Котельникова гласит, что частота выборок (дискретизации) должна быть в 2 раза больше верхней частоты дскретизируемого сигнала
     
  9. S_Alex

    S_Alex Alex

    Публикаций:
    0
    Регистрация:
    27 авг 2004
    Сообщения:
    561
    Адрес:
    Ukraine
    Есть один простой способ получения рекурентного уравнения для передаточной функции цифрового фильтра.
    Например:
    есть у нас передаточная фунция цифрового фильтра вида.

    D(z) = Y(z)/X(z) = (a1*z^^(-3)+a2*z^^(-2)+a3*z^^(-1)+a4)/(b1*z^^(-3)+b2*z^^(-2)+b3*z^^(-1)+b4)

    если перейти к отчетам [n], то получим

    Y[n-3]*b1+Y[n-2]*b2+Y[n-1]*b3+Y[n]*b4 = X[n-3]*b1+X[n-2]*b2+X[n-1]*b3+X[n]*b4

    тогда для выходного сигнала на текущем такте запишем:

    Y[n] = (X[n-3]*b1+X[n-2]*b2+X[n-1]*b3+X[n]*b4 - (Y[n-3]*b1+Y[n-2]*b2+Y[n-1]*b3) )/b4

    где Y[n],X[n] текущий выходной и входной сигнал
    Y[n-1],X[n-1] выходной и входной сигнал на предыдущем такте
    Y[n-2],X[n-2] выходной и входной сигнал на 2 такта назад
    и т.д.
    Остаеться подсчитать математику с плавающей точкой и всё пучком.
    Удачи!
     
  10. probka

    probka New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    170
    Aids, мне бы твои проблемы. В МК активируй АЦП. Принимай все значения. Из принятых, бери то, которое тебе нужно. Для корректировки, осцилограф рулит.
     
  11. pas

    pas New Member

    Публикаций:
    0
    Регистрация:
    18 апр 2003
    Сообщения:
    330
    Адрес:
    Russia
    Извините, а не проще собрать хардварный аналоговый фильтр, если частота заранее известна?
     
  12. Aids

    Aids New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2007
    Сообщения:
    275
    probka ты предлагаешь замерять частоту входного сигнала, а потом в соответствии с этим пропускать сигнал или нет. Я правильно тебя понял?
     
  13. probka

    probka New Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    170
    Да. Смотри:
    1. Беги по всем частотам постоянно. (МК возможности).
    2. Как только принял цифру, то есть обнаружил рабочаю частоту, СТОП ЧАСТОТА.
    3. Принимай и обрабатывай.

    Вроде так. Попробуй :))
     
  14. S_Alex

    S_Alex Alex

    Публикаций:
    0
    Регистрация:
    27 авг 2004
    Сообщения:
    561
    Адрес:
    Ukraine
    probka
    Я тут что-то не врубаюсь. Как это?

    Проще прошить в МК классическую (прямую) форму реализации цифрового фильтра и не ...

    http://elib.ispu.ru/library/lessons/faleev/index.html
     
  15. Aids

    Aids New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2007
    Сообщения:
    275
    probka
    Мне не совсем понятна фраза "Беги по всем частотам" это как?
    Как это можно реализовать. На сколько я знаю в MK можно только померять частоту путём подсчёта импульсов за определённое время. А как я буду сканировать? Можно конечно считать перепады с + на - после АЦП, после перепада определять время,а потом подсчитать частоту. И если сигнал соответствует данной частоте то пропускать его. Но тут не совсем понятно как такой фильтр будет себя вести при подаче на вход суммы сигналов? И какой результат выдаст в таком случае АЦП.
     
  16. Aids

    Aids New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2007
    Сообщения:
    275
    S_Alex использовал по твоему совету разностное уравнение. Собрал фильтр на МК PIC16F877. в принципе работает нормально. вот только коэффициенты подбирал на угад:). Уравнение получилось 9го порядка.
     
  17. S_Alex

    S_Alex Alex

    Публикаций:
    0
    Регистрация:
    27 авг 2004
    Сообщения:
    561
    Адрес:
    Ukraine
    Aids
    Зачем же наугад.
    Есть четкая зависимость. Смотри УРЛ.
    Больше можешь узнать из Теории Автоматического Управления (ТАУ) раздел импульсных или цифровых систем.
    Если у тебя есть асимптотическая АЧХ обычного фильтра, то можно получить разностное уравнение и выполнить его реализацию.
     
  18. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Aids
    Непонял частота известна или нет? И что значит выделять? Определить ее присутствие или еще что-то?


    Делаешь Быстрое Преобразование Фурье (БПФ/FFT) после преобразования отсчетов имеем частотный спектр. Собственно пробигаешь по массиву частот.

    Если частота известна то достаточно сделать Фурье разложение по заданной частоте.
    Выгледит это просто

    Код (Text):
    1. N- число отсчетов
    2. A - буффер отсчетов
    3. f - частота которую проверяем в Гц
    4. d - частота дискретизации Гц
    5. f:=50;
    6. d:=44100
    7. w:=-2*pi*f;
    8. w:=w/d;
    9. s:=0;
    10. c:=0;
    11. for i:=0 to N-1 do
    12.  begin
    13.  Re:=Re+a[i]*cos(w*i);
    14.  Im:=Im+a[i]*sin(w*i);
    15.  end;
    16. Amp:=Sqrt(Re*Re+Im*Im);
    Дальше проверяешь Amp на некоторый порог.
     
  19. S_Alex

    S_Alex Alex

    Публикаций:
    0
    Регистрация:
    27 авг 2004
    Сообщения:
    561
    Адрес:
    Ukraine
    Pavia
    Как я понял, то необходимо выделить сигнал (т.е. выполнить фильтрацию сигнала), а не обнаружить сигнал заданной частоты.
    Или я не так понял?
     
  20. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    S_Alex
    Это у автора темы надо спрашивать, что он хочет получить. Собственно если нужно отфильтровать одну частоту, то это делается очень просто так как амлитуды частоты мы знаем начальная фаза тоже известна arctan(Im/Re) То простое вычетание гармоники отфильтрует заданную частоту. Правда это не лучший из фильтеров.