Снова про SSB

Что мы всё про вой­ну, давай­те про радио пого­во­рим. Бла­го радио нераз­рыв­но свя­за­но с преп­пин­гом к этой самой войне.

Читаю я всё, читаю про гене­ра­цию боко­вой поло­сы мето­дом квад­ра­тур­ной моду­ля­ции, и все гово­рят, что да, метод норм, и несу­щая пре­крас­но давит­ся на ‑40 деци­бел. Самое слож­ное во всей опе­ра­ции — это сдвиг фазы для моду­ли­ру­ю­ще­го сиг­на­ла на девя­но­сто гра­ду­сов. Если бы там была одна часто­та, то было бы без про­блем. Но речь при свя­зи на КВ — это поло­са от 300 герц до 2700 герц, и дви­гать по фазе все эти сиг­на­лы зада­ча уже нетри­ви­аль­ная.

Мож­но сде­лать это на мик­ро­схе­мах ОУ. Каж­дый такой блок сдви­га­ет сиг­нал опре­де­лён­ной поло­сы, что­бы сдви­нуть весь сиг­нал, таких бло­ков пона­до­бит­ся несколь­ко. Вот, напри­мер, схе­ма из аме­ри­кан­ско­го радио­лю­би­тель­ско­го жур­на­ла QST от Апре­ля 1993 года.

Тут потре­бу­ет­ся аж шесть опе­ра­ци­он­ных уси­ли­те­лей — в схе­ме, прав­да, исполь­зу­ют­ся счет­ве­рён­ные ОУ мик­ро­схе­мы NE5514, так что физи­че­ски их нуж­но толь­ко две:

Мало того, что надо шесть опе­ра­ци­он­ных уси­ли­те­лей — так ещё ком­по­нен­ты в этих бло­ках тре­бу­ют­ся пре­цен­зи­он­ные, рези­сто­ры с допус­ком 1% или луч­ше, а они нифи­га не дешё­вые.

А не мож­но ли попро­ще? Ока­зы­ва­ет­ся, мож­но. Прав­да, это попро­ще уже лич­но мне, так как я ним­нош­ка умею в про­грам­ми­ро­ва­ние. Это не обя­за­тель­но будет попро­ще всем.

Сдви­гать сиг­нал по фазе мож­но мето­да­ми циф­ро­вой обра­бот­ки зву­ка. В част­но­сти, у нас есть пре­об­ра­зо­ва­ние Гиль­бер­та. В рус­ской Вики­пе­дии про него напи­са­но косо­жо­по и непо­нят­но, поэто­му даю ссыл­ку на англий­скую вер­сию. Пре­об­ра­зо­ва­ние Гиль­бер­та, тес­но свя­зан­ное с обрат­ным пре­об­ра­зо­ва­ни­ем Фурье, сдви­га­ет сиг­на­лы всех частот на π⁄2 ради­ан (90 гра­ду­сов). То, что и было нуж­но.

Ска­жи­те, вы люби­те язык про­грам­ми­ро­ва­ния Питон? Я да. Разу­ме­ет­ся, не за косо­ру­кий син­так­сис, и не за выде­ле­ние бло­ков кода отступ­ле­ни­ем, когда поиск того, что выпол­ня­ет­ся и когда в слож­ном вло­жен­ном if(), ста­но­вит­ся мукой. Я люб­лю язык про­грам­ми­ро­ва­ния Питон за то, что в нём есть про­сто ТУЕВА ХУЧА нуж­но­го, что не надо писать само­сто­я­тель­но с нуля рука­ми. Осо­бен­но кру­ты моду­ли Numpy и SciPy — ну, я вот даже не знаю, как бы я без них жил.

И что бы вы дума­ли, пре­об­ра­зо­ва­ние Гиль­бер­та там тоже есть: scipy.signal.hilbert

Так что оциф­ро­вы­ва­ем кусо­чек в ℝ мас­сив, суём его scipy.signal.hilbert. Оциф­ро­ван­ный и обра­бо­тан­ный звук мож­но совать в выход зву­ко­вой кар­точ­ки: в левом кана­ле не обра­бо­тан­ный звук, в пра­вом обра­бо­тан­ный.

Если очень хочет­ся без «боль­шо­го» ком­пью­те­ра, совре­мен­ные мик­ро­кон­трол­ле­ры на архи­тек­ту­ре ARM тоже смо­гут. Напри­мер, моде­ли плат Teensy постар­ше. И писать пре­об­ра­зо­ва­ние Гиль­бер­та с нуля там тоже не надо, люди уже напи­са­ли Teensy Audio Library, где всё это уже есть.

В‑общем, конеч­но, совре­мен­ное радио — это SDR. Фор­маль­но оно слож­ное, так как тре­бу­ет про­цес­сор­ных мощ­но­стей, но это как раз тот слу­чай, когда сде­лать слож­но — про­ще.