Автор Тема: Weaver (математика)  (Прочитано 5842 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн GenaSPB

  • Jr. Member
  • **
  • Сообщений: 74
Re: Weaver (математика)
« Ответ #15 : Сентябрь 24, 2020, 03:17:47 pm »
Да понятно. Я про fpga.

Оффлайн GenaSPB

  • Jr. Member
  • **
  • Сообщений: 74
Re: Weaver (математика)
« Ответ #16 : Сентябрь 24, 2020, 04:14:35 pm »
Кстати, маскиратор с полностью цифровой обработкой тоже не должен свистеть.

Оффлайн Игорь 2

  • Administrator
  • *****
  • Сообщений: 19527
Re: Weaver (математика)
« Ответ #17 : Сентябрь 24, 2020, 05:11:03 pm »
Кстати, маскиратор с полностью цифровой обработкой тоже не должен свистеть.

У меня он был полностью аналоговый. Сто лет назад дело было... cr123
Ничего невозможного нет

Оффлайн ra0ahc

  • Hero Member
  • *****
  • Сообщений: 4872
  • Сергей, RD6AH
Re: Weaver (математика)
« Ответ #18 : Октябрь 03, 2020, 05:39:06 pm »
ЛАБА
Смеситель

freq = 400;//сигнал герц
freqOpora = 2000;// несушка

Заполнение буферов выглядит так:

        float32_t amp = 600;//амплитуда, макс 2048 для 12бит

        for (int i = 0; i < FRAME_SIZE; i++) {
            float32_t opora = arm_sin_f32(phaseOpora);
            float32_t signal = arm_sin_f32(phase);


            pOutDac[dacTxBankNawNumber][i ] = ((uint32_t) (amp + signal*opora * amp));

            phase += delta;
            if (phase >= pp) phase -= pp;

            phaseOpora += deltaOpora;
            if (phaseOpora >= pp) phaseOpora -= pp;

            opora = arm_sin_f32(phaseOpora);
            signal = arm_sin_f32(phase);

            pOutDac[dacTxBankNawNumber][i ] |= (((uint32_t) (amp + signal*opora *amp))) << 16;
            phase += delta;
            if (phase >= pp) phase -= pp;

            phaseOpora += deltaOpora;
            if (phaseOpora >= pp) phaseOpora -= pp;

        }
Да да, я знаю, у меня ничего не получится )))

Оффлайн ra0ahc

  • Hero Member
  • *****
  • Сообщений: 4872
  • Сергей, RD6AH
Re: Weaver (математика)
« Ответ #19 : Октябрь 03, 2020, 05:42:16 pm »
а вот тоже самое, но для сигнала 645Гц
Да да, я знаю, у меня ничего не получится )))

Оффлайн ra0ahc

  • Hero Member
  • *****
  • Сообщений: 4872
  • Сергей, RD6AH
Re: Weaver (математика)
« Ответ #20 : Октябрь 03, 2020, 08:28:18 pm »
После запуска FIR фильтра на 3кГц + шум
Получился на выходе цап такой сигнал
Да да, я знаю, у меня ничего не получится )))

Оффлайн ra0ahc

  • Hero Member
  • *****
  • Сообщений: 4872
  • Сергей, RD6AH
Re: Weaver (математика)
« Ответ #21 : Октябрь 03, 2020, 09:08:43 pm »
Интересный феномен я нашел. Не знаю что это за глюк в математике. Но вот смотрите (вопрос к математикам)

амплитуду умножаю на 10. (все числа float)
 float32_t amp = 199*10;
.
.
дальше перемножаю сигналы (они тоже float) и делю на теже 10.  цифра от -1 до +1

arrDac[i ] = (signal* opora)/10;  //цифра от -1 до +1

дальше формирую амплитуду для цап от 0...4000
умножаю на амплитуду и смещаю на эту же амплитуду, убираю отрицательный значения.

 pOutDac[dacTxBankNawNumber][y] = (uint32_t) (amp + firOutDac[i ] * amp);

И получается вот такая красивая картинка....
(все дальше 3кГц это перегруз звуковой платы, в программе работает фир фильтр со срезом 3кГц)
« Последнее редактирование: Октябрь 03, 2020, 09:11:18 pm от ra0ahc »
Да да, я знаю, у меня ничего не получится )))

Оффлайн ra0ahc

  • Hero Member
  • *****
  • Сообщений: 4872
  • Сергей, RD6AH
Re: Weaver (математика)
« Ответ #22 : Октябрь 03, 2020, 09:10:56 pm »
А теперь убираю умножения 10 и деление на 10
и получается вот такая картинка
Да да, я знаю, у меня ничего не получится )))

Оффлайн ra0ahc

  • Hero Member
  • *****
  • Сообщений: 4872
  • Сергей, RD6AH
Re: Weaver (математика)
« Ответ #23 : Октябрь 03, 2020, 09:55:51 pm »
ачх FIR
Да да, я знаю, у меня ничего не получится )))

Оффлайн ra0ahc

  • Hero Member
  • *****
  • Сообщений: 4872
  • Сергей, RD6AH
Re: Weaver (математика)
« Ответ #24 : Октябрь 04, 2020, 01:14:22 pm »
Нашел причину  lol22
Программер фигов. А всего то надо было выспаться.
Смещение амплитуды надо делать константой.

pOutDac[dacTxBankNawNumber][y ] = (uint32_t) (2048 + firOutDac[i-1] * amp);
Да да, я знаю, у меня ничего не получится )))