Перейти к содержанию
    

Смесители цифровых сигналов

Ребят подскажите как сложить два сигнала уже писал на другом форуме (http://forum.sources.ru/index.php?showtopic=316049), но что-то там никаких, даже попыток направить в нужную сторону, понимаю что скорее всего это просто, но где почитать или где на пальцах принцип этого изложен в инете не нашел, именно программная реализация, электронная расписана везде про смесители...

---------------------------------------------скопировано из форума

Всем привет! Кто нибудь сталкивался со смешением сигналов мне нужно 2 разных типа(метода) смешения. Первый линейный реализуется оч просто значения первого звукового файла (WAV) + второго (WAV) файла и разделить результат на 2. На скриншоте видно результат смешение синусоид 87Гц и 877Гц.

 

tmp1 = DB_Mas1(cnt1) 'последовательные выборки первого файла (WAV)

tmp2 = DB_Mas2(cnt2) 'последовательные выборки второго файла (WAV)

If AmlMethod = True Then

MSFlexGrid1.TextMatrix(MSFlexGrid1.row, MSFlexGrid1.col)= Round((tmp1 + tmp2) / 2) ' забиваем послед ячейки в программе

Else

...

 

Второй метод нужен нелинейный где-то читал он через умножение делается результат должен содержать в простейшем случае разность и сумму смешиваемых частот, как это реализовать для тех же переменных tmp1 tmp2 незнаю, простое перемножение делает какую-то кашу. Могут получатся и другие гармоники по нисходящей мощности но главной получить основные разность и сумма частот 2х синусоид.

----------------------------------------------

post-23016-1287418676_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

DRUID3 я читал там (это еднсьвенный сайт где хоть чтото описано), но не понял особо что откуда берется, именно эти формулы sin(A) sin (B) = (1/2) cos(A + B) - (1/2) cos(A - B), Ai.sin(2π.fi.t) и Ao.sin(2π.fo.t), Ai.sin(2π.fi.t).Ao.sin(2π.fo.t)= (1/2)AiAo{cos[2π.t(fo + fi)]- cos[2π.t(fo - fi)]} сигналы как я понимаю синусами описаны, а я в мат не силен и мне нужен именно мой частный случай когда есть последовательные выборки 2х сигналов в переменных tmp1, tmp2 как вывести формулы именно к моим 2 переменным :laughing: Что на что умножать делить мои переменные. Пишу просто программу для AVR32 на VB вот на этом остановился... Простое смешение реализовано скриншот как раз из программы.

Изменено пользователем TViT

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

DRUID3 я читал там (это еднсьвенный сайт где хоть чтото описано), но не понял особо что откуда берется...

 

именно эти формулы sin(A) sin (B) = (1/2) cos(A + B) - (1/2) cos(A - B), Ai.sin(2π.fi.t) и Ao.sin(2π.fo.t), Ai.sin(2π.fi.t).Ao.sin(2π.fo.t)= (1/2)AiAo{cos[2π.t(fo + fi)]- cos[2π.t(fo - fi)]} сигналы как я понимаю синусами описаны...

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

 

а я в мат не силен

...я как-бы тоже...

 

и мне нужен именно мой частный случай когда есть последовательные выборки 2х сигналов в переменных tmp1, tmp2 как вывести формулы именно к моим 2 переменным :laughing: Что на что умножать делить мои переменные. Пишу просто программу для AVR32 на VB вот на этом остановился... Простое смешение реализовано скриншот как раз из программы.

Вам нужно просто посемплово умножать сигналы... Идеальный смеситель - это арифметический умножитель...

 

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

...какой ужас! Еще одна жертва системы образования на просторах СНГ? :biggrin: Вам не нужно моделировать(ну, конечно, если это не программа ВЧ анализа/моделирования) неидеальности физической реализации смесителя. Разработчики аналоговых каскадов наоборот стараются уйти от нелинейности умножения на ВАХ полупроводниковых или вакуумных приборов минимизировав в разложении Тейлора(e^x = 1 + x + x2/2! + x3/3! + x4/4! etc...) все члены за ислкючением линейного. Сделать это можно применяя например балансную схему (четных порядков составляющие при этом компенсируются, но нечетных правда удвоятся). Или применяя вообще параметрический принцип - там совершенно другая формула. Но Вам все это не нужно! Просто сделайте как я напейсал жирным шрифтом ;) ...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ребят подскажите как сложить два сигнала уже писал на другом форуме (http://forum.sources.ru/index.php?showtopic=316049), но что-то там никаких, даже попыток направить в нужную сторону, понимаю что скорее всего это просто, но где почитать или где на пальцах принцип этого изложен в инете не нашел, именно программная реализация, электронная расписана везде про смесители...

---------------------------------------------скопировано из форума

Всем привет! Кто нибудь сталкивался со смешением сигналов мне нужно 2 разных типа(метода) смешения. Первый линейный реализуется оч просто значения первого звукового файла (WAV) + второго (WAV) файла и разделить результат на 2. На скриншоте видно результат смешение синусоид 87Гц и 877Гц.

 

tmp1 = DB_Mas1(cnt1) 'последовательные выборки первого файла (WAV)

tmp2 = DB_Mas2(cnt2) 'последовательные выборки второго файла (WAV)

If AmlMethod = True Then

MSFlexGrid1.TextMatrix(MSFlexGrid1.row, MSFlexGrid1.col)= Round((tmp1 + tmp2) / 2) ' забиваем послед ячейки в программе

Else

...

 

Второй метод нужен нелинейный где-то читал он через умножение делается результат должен содержать в простейшем случае разность и сумму смешиваемых частот, как это реализовать для тех же переменных tmp1 tmp2 незнаю, простое перемножение делает какую-то кашу. Могут получатся и другие гармоники по нисходящей мощности но главной получить основные разность и сумма частот 2х синусоид.

----------------------------------------------

 

 

Мда. На исходниках.ру Вам вряд ли ответят, там больше по программированию форум.

На всякий случай: если Вам необходимо получить на выходе разностные гармоники, то полученную поэлементным умножением "кашу", надо пропустить через соответствующий полосовой фильтр. Тогда на выходе будет сигнал соответствующей частоты.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

DRUID3 Я тоже понял после прочтения о смесителях что это что-то с умножением должно быть связано поэтому первым делом сделал умножение tmp1*tmp2 только от получ произведения взял корень чтобы размах сигнала снизить до примерно размаха входных сигналов тоже что-то непонятное получается после FFT частоты сдвигаются не получается разности и суммы входных частот.

 

 

Sleepin' Cat... & DRUID3 Домой приду попробую еще раз по всякому вечером выложу графики.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

TViT:

Всем привет! Кто нибудь сталкивался со смешением сигналов мне нужно 2 разных типа(метода) смешения. Первый линейный реализуется оч просто значения первого звукового файла (WAV) + второго (WAV) файла и разделить результат на 2. На скриншоте видно результат смешение синусоид 87Гц и 877Гц.

 

tmp1 = DB_Mas1(cnt1) 'последовательные выборки первого файла (WAV)

tmp2 = DB_Mas2(cnt2) 'последовательные выборки второго файла (WAV)

If AmlMethod = True Then

MSFlexGrid1.TextMatrix(MSFlexGrid1.row, MSFlexGrid1.col)= Round((tmp1 + tmp2) / 2) ' забиваем послед ячейки в программе

Else

...

 

Второй метод нужен нелинейный где-то читал он через умножение делается результат должен содержать в простейшем случае разность и сумму смешиваемых частот, как это реализовать для тех же переменных tmp1 tmp2 незнаю, простое перемножение делает какую-то кашу. Могут получатся и другие гармоники по нисходящей мощности но главной получить основные разность и сумма частот 2х синусоид.

 

Собственно, смешение сигналов (микширование) - взвешенная поотсчетная сумма.

Все остальные "смесители" - это преобразователи частоты. Преобразование частоты - умножение на комплексную экспоненту нужной частоты. (Ну и берем вещественную часть, если комплексный сигнал не нужен). Чего тут изобретать?

 

x=sin(2*pi*100/8000*(0:1023));
y=x.*exp(j*2*pi*1000/8000*(0:1023));
plot(0:8000/1024:8000-8000/1024,abs(fft(real(y))))
grid on

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все получилось просто умножением! :rolleyes: Спасибо большое всем! Как и говорили :wassat:

Получается я в самом начале ошибся чтобы привести сигнал к размаху как у входных (оба синуса одинаковые только частоты разные) с чего то решил брать значения корень из полученого произведения и получилась каша на FFT и графике...

post-23016-1287502870_thumb.jpg

Изменено пользователем TViT

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...