Rx FSK

Jan 02, 2006 11 Replies

Hi, All!



Подскажите, пожалуйста, алгоритм _некогерентного_ приема частотно-манипулированного (двух частотного) сигнала. Частоты - звуковые.



С уважением, Сергей Ефанов.


Mon Jan 02 2006 16:59, Sergey Efanov wrote to All:

SE> ðÏÄÓËÁÖÉÔÅ, ÐÏÖÁÌÕÊÓÔÁ, ÁÌÇÏÒÉÔÍ _ÎÅËÏÇÅÒÅÎÔÎÏÇÏ_ ÐÒÉÅÍÁ SE> ÞÁÓÔÏÔÎÏ-ÍÁÎÉÐÕÌÉÒÏ×ÁÎÎÏÇÏ (Ä×ÕÈ ÞÁÓÔÏÔÎÏÇÏ) ÓÉÇÎÁÌÁ. SE> þÁÓÔÏÔÙ - Ú×ÕËÏ×ÙÅ.

áÌÇÏÒÉÔÍ ÉÍÅÎÉ áïHÁ.

VLV

"ñ ÄÏÂÒÙÊ, É ÜÔÏ ÅÄÉÎÓÔ×ÅÎÎÙÊ ÍÏÊ ÎÅÄÏÓÔÁÔÏË" (äÏÓÔÏÅ×ÓËÉÊ)

"Vladimir Vassilevsky" snipped-for-privacy@fullnet.net сообщил/сообщила в новостях следующее: news: snipped-for-privacy@p2.f.n5020.z2.ftn...

Хочется чего нибудь другого :) Так, что бы не куски сигнала анализировать, а непрерывно обрабатывать поступающие данные.

С уважением, Сергей Ефанов.

Hello Sergey!

02 Jan 06 17:59, you wrote to All:

SE> ðÏÄÓËÁÖÉÔÅ, ÐÏÖÁÌÕÊÓÔÁ, ÁÌÇÏÒÉÔÍ _ÎÅËÏÇÅÒÅÎÔÎÏÇÏ_ ÐÒÉÅÍÁ SE> ÞÁÓÔÏÔÎÏ-ÍÁÎÉÐÕÌÉÒÏ×ÁÎÎÏÇÏ (Ä×ÕÈ ÞÁÓÔÏÔÎÏÇÏ) ÓÉÇÎÁÌÁ. SE> þÁÓÔÏÔÙ - Ú×ÕËÏ×ÙÅ.

íÁÓÓÁ. ÷ÁÒÉÁÎÔ 1. ïÃÉÆÒÏ×Ù×ÁÅÛØ ÓÉÇÎÁÌ, ÐÅÒÅÍÎÏÖÁÅÛØ ÎÁ ÓÉÎÕÓÎÕÀ É ËÏÓÉÎÕÓÎÕÀ ËÏÍÐÏÎÅÎÔÕ ËÁÖÄÏÊ ÞÁÓÔÏÔÙ, ÎÁËÁÐÌÉ×ÁÅÛØ ÐÏÌÂÉÔÁ, ÂÅÒÅÛØ ÍÏÄÕÌÉ, ÐÏ ÒÁÚÎÉÃÅ ÄÅÌÁÅÛØ ×Ù×ÏÄ Ï ÚÎÁËÅ ÏÔËÌÏÎÅÎÉÑ. ÷ÁÒÉÁÎÔ 2. ïÃÉÆÒÏ×Ù×ÁÅÛØ ÓÉÇÎÁÌ, ÐÅÒÅÍÎÏÖÁÅÛØ ÎÁ ÓÉÎÕÓ É ËÏÓÉÎÕÓ ÓÒÅÄÎÅÊ ÞÁÓÔÏÔÙ, ÕÓÒÅÄÎÑÅÛØ ÓËÏÌØÚÑÝÉÍ ÓÒÅÄÎÉÍ ÎÁ ÐÏÓÌÅÄÎÉÈ ÐÏÌÂÉÔÁ, ÂÅÒÅÛØ ÁÒËÔÁÎÇÅÎÓ, ÓÍÏÔÒÉÛØ, × ËÁËÕÀ ÓÔÏÒÏÎÕ ×ÒÁÝÁÅÔÓÑ ÁÒËÔÁÎÇÅÎÓ. ÷ÁÒÉÁÎÔ 3. ôÕÐÏ ÉÚÍÅÒÑÅÛØ ÐÅÒÉÏÄ ÓÉÇÎÁÌÁ.

Anatoly

Hello, Sergey! You wrote to Vladimir Vassilevsky on Tue, 3 Jan 2006 01:58:23 +0000 (UTC):

SE>>> ðÏÄÓËÁÖÉÔÅ, ÐÏÖÁÌÕÊÓÔÁ, ÁÌÇÏÒÉÔÍ _ÎÅËÏÇÅÒÅÎÔÎÏÇÏ_ ÐÒÉÅÍÁ SE>>> ÞÁÓÔÏÔÎÏ-ÍÁÎÉÐÕÌÉÒÏ×ÁÎÎÏÇÏ (Ä×ÕÈ ÞÁÓÔÏÔÎÏÇÏ) ÓÉÇÎÁÌÁ. SE>>> þÁÓÔÏÔÙ - Ú×ÕËÏ×ÙÅ. ??>>

??>> áÌÇÏÒÉÔÍ ÉÍÅÎÉ áïHÁ.

SE> èÏÞÅÔÓÑ ÞÅÇÏ ÎÉÂÕÄØ ÄÒÕÇÏÇÏ :) ôÁË, ÞÔÏ ÂÙ ÎÅ ËÕÓËÉ ÓÉÇÎÁÌÁ SE> ÁÎÁÌÉÚÉÒÏ×ÁÔØ, Á ÎÅÐÒÅÒÙ×ÎÏ ÏÂÒÁÂÁÔÙ×ÁÔØ ÐÏÓÔÕÐÁÀÝÉÅ ÄÁÎÎÙÅ.

ëÏÇÄÁ-ÔÏ × su.hardw.schemes ÔÁËÉÅ ÁÌÇÏÒÉÔÍÙ ÐÒÏÂÅÇÁÌÉ.
formatting link
With best regards, Serg.

Tue Jan 03 2006 03:58, Sergey Efanov wrote to Vladimir Vassilevsky:

SE> èÏÞÅÔÓÑ ÞÅÇÏ ÎÉÂÕÄØ ÄÒÕÇÏÇÏ :) ôÁË, ÞÔÏ ÂÙ ÎÅ ËÕÓËÉ ÓÉÇÎÁÌÁ SE> ÁÎÁÌÉÚÉÒÏ×ÁÔØ, Á ÎÅÐÒÅÒÙ×ÎÏ ÏÂÒÁÂÁÔÙ×ÁÔØ ÐÏÓÔÕÐÁÀÝÉÅ ÄÁÎÎÙÅ.

ëÁËÉÅ ÐÒÏÂÌÅÍÙ? ïÂÒÁÂÁÔÙ×ÁÊ ÎÅÐÒÅÒÙ×ÎÏ.

VLV

"ñ ÄÏÂÒÙÊ, É ÜÔÏ ÅÄÉÎÓÔ×ÅÎÎÙÊ ÍÏÊ ÎÅÄÏÓÔÁÔÏË" (äÏÓÔÏÅ×ÓËÉÊ)

Hello Sergey.

Mon Jan 02 2006 17:59, Sergey Efanov wrote to All:

SE> ðÏÄÓËÁÖÉÔÅ, ÐÏÖÁÌÕÊÓÔÁ, ÁÌÇÏÒÉÔÍ _ÎÅËÏÇÅÒÅÎÔÎÏÇÏ_ ÐÒÉÅÍÁ SE> ÞÁÓÔÏÔÎÏ-ÍÁÎÉÐÕÌÉÒÏ×ÁÎÎÏÇÏ (Ä×ÕÈ ÞÁÓÔÏÔÎÏÇÏ) ÓÉÇÎÁÌÁ. SE> þÁÓÔÏÔÙ - Ú×ÕËÏ×ÙÅ.

ñ ÐÏÌØÚÏ×ÁÌÓÑ ÁÌÇÏÒÉÔÍÏÍ çÅÒÃÅÌÑ, ÍÎÅ ÐÏÎÒÁ×ÉÌÏÓØ. :) þÉÓÌÏ ÓÜÍÐÌÏ× - ÌÀÂÏÅ, ÐÒÏÓÔÏ ÞÅÍ ÂÏÌØÛÅ - ÔÅÍ ×ÙÛÅ ÔÏÞÎÏÓÔØ. þÉÓÌÏ ÁÎÁÌÉÚÉÒÕÅÍÙÈ ÞÁÓÔÏÔ ÔÏÖÅ ÌÀÂÏÅ.

HÁÐÒÉÍÅÒ, ÄÌÑ DTMF (ÎÅÏÐÔÉÍÉÚÉÒÏ×ÁÎÎÙÊ, ÎÏ ÂÏÌÅÅ ÐÏÎÑÔÎÙÊ ×ÁÒÉÁÎÔ):

unit Goertzel;

interface uses AuxTypes;

type tIdx = 1..8; tILo = 1..4; tIHi = 5..8;

procedure InitGoertzel (idx : tIdx; iFreq, Sampling_Rate : longint); procedure ResetOne (idx : tIdx ); procedure ResetAll; procedure ProcessSample (idx : tIdx; sample : word); procedure GetRealImag (idx : tIdx; var realPart: float; var imagPart: float); function GetMagnitude (idx : tIdx) : float;

implementation

uses SysUtils, Math, Auxil, MMInput;

type

tOneF = record coeff, Q1, Q2, sine, cosine : float; end;

var acc : array [tIdx] of tOneF;

// Call this routine before every "block" of samples.

procedure ResetOne ( idx : tIdx ); begin with acc[idx] do begin Q2 := 0; Q1 := 0; end; end;

// Reset all "accumulators"

procedure ResetAll; var i : tIdx; begin for i := low(tIdx) to high(tIdx) do ResetOne(i); end;

// Call this once for every iFreq, to precompute the constants.

procedure InitGoertzel (idx : tIdx; iFreq, Sampling_Rate : longint); var omega: float; begin

with acc[idx] do begin

omega := 2.0 * Pi * iFreq / Sampling_Rate; sine := sin(omega); cosine := cos(omega); coeff := 2.0 * cosine;

end;

ResetOne(idx);

end;

// Call this routine for every sample.

procedure ProcessSample(idx : tIdx; sample : word); var Q0 : float; begin with acc[idx] do begin Q0 := Q1*coeff - Q2 + sample; Q2 := Q1; Q1 := Q0; end; end;

// Call this routine after every block to get the complex result.

procedure GetRealImag (idx : tIdx; var realPart: float; var imagPart: float); begin with acc[idx] do begin realPart := (Q1 - Q2 * cosine); imagPart := (Q2 * sine); end; end;

// Call this after every block to get the magnitude in something like decibels

function GetMagnitude (idx : tIdx) : float; begin with acc[idx] do result := 10 * log10 (sqrt ( sqr(Q1) + sqr(Q2) - Q1*Q2*coeff)); end;

end.

"Sergey Mudry" snipped-for-privacy@nsk.ru сообщил/сообщила в новостях следующее: news: snipped-for-privacy@linux-server.nicit.com.ua...

Спасибо, Сергей, и большое спасибо Алексею Владимирову!

С уважением, Сергей Ефанов.

"Vladimir Vassilevsky" snipped-for-privacy@fullnet.net сообщил/сообщила в новостях следующее: news: snipped-for-privacy@p2.f.n5020.z2.ftn...

Договорились! :)

С уважением, Сергей Ефанов.

"Anatoly Mashanov" snipped-for-privacy@f282.n.z2.fidonet.org> сообщил/сообщила в новостях следующее: news: snipped-for-privacy@f282.n.z2.ftn...

А как посмотреть, в какую сторону вращается? И почему полбита, а не целый бит?

Суважением, Сергей Ефанов.

"Dimmy Timchenko" snipped-for-privacy@f15.n.z2.fidonet.org> сообщил/сообщила в новостях следующее: news: snipped-for-privacy@f15.n.z2.ftn...

Спасибо, пригодится!

С уважением, Сергей Ефанов.

Hello Sergey.

Wed Jan 04 2006 20:11, Sergey Efanov wrote to me:

SE> óÐÁÓÉÂÏ, ÐÒÉÇÏÄÉÔÓÑ!

çÌÁ×ÎÏÅ - ÐÒÏÓÔÏ É ÐÏÎÑÔÎÏ, ÎÉËÁËÉÈ ÐÏÌÕÂÉÔÏ× É ×ÒÁÝÁÀÝÉÈÓÑ ÁÒËÔÁÎÇÅÎÓÏ×. ;)

Dimmy.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required