Weaver (математика)
33866 просмотров, 25 ответов — стр. 2 из 2
24 сентября 2020 г. в 03:17#16
Да понятно. Я про fpga.
24 сентября 2020 г. в 04:14#17
Кстати, маскиратор с полностью цифровой обработкой тоже не должен свистеть.
24 сентября 2020 г. в 05:11#18
Кстати, маскиратор с полностью цифровой обработкой тоже не должен свистеть.
У меня он был полностью аналоговый. Сто лет назад дело было...

3 октября 2020 г. в 05:39#19
ЛАБА
Смеситель
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;
}
Смеситель
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;
}
3 октября 2020 г. в 05:42#20
а вот тоже самое, но для сигнала 645Гц
3 октября 2020 г. в 08:28#21
После запуска FIR фильтра на 3кГц + шум
Получился на выходе цап такой сигнал
Получился на выходе цап такой сигнал
3 октября 2020 г. в 09:08#22
Интересный феномен я нашел. Не знаю что это за глюк в математике. Но вот смотрите (вопрос к математикам)
амплитуду умножаю на 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кГц)
амплитуду умножаю на 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кГц)
3 октября 2020 г. в 09:10#23
А теперь убираю умножения 10 и деление на 10
и получается вот такая картинка
и получается вот такая картинка
3 октября 2020 г. в 09:55#24
ачх FIR
4 октября 2020 г. в 01:14#25
Нашел причину 
Программер фигов. А всего то надо было выспаться.
Смещение амплитуды надо делать константой.
pOutDac[dacTxBankNawNumber][y ] = (uint32_t) (2048 + firOutDac[i-1] * amp);
Программер фигов. А всего то надо было выспаться.
Смещение амплитуды надо делать константой.
pOutDac[dacTxBankNawNumber][y ] = (uint32_t) (2048 + firOutDac[i-1] * amp);