Hello Eugene.
Sat Sep 10 2005 01:45, Eugene Markov wrote to me:
DT>> 16-ÒÁÚÒÑÄÎÙÅ ÄÁÎÎÙÅ, ÁÐÐÁÒÁÔÎÏÅ ÕÍÎÏÖÅÎÉÅ 16*16->32. ÷ÏÔ É ÄÕÍÁÀ, DT>> È×ÁÔÉÔ ÌÉ.
EM> úÁ×ÉÓÉÔ ÏÔ ÄÉÎÁÍÉÞÅÓËÏÇÏ ÄÉÁÐÁÚÏÎÁ ×ÈÏÄÎÏÇÏ ÓÉÇÎÁÌÁ. åÓÌÉ Õ ÔÅÂÑ EM> ÄÁÎÎÙÅ ÄÅÊÓÔ×ÉÔÅÌØÎÏ 16-ÒÁÚÒÑÄÎÙÅ, Ô.Å. ÄÉÎÁÍÉÞÅÓËÉÊ ÄÉÁÐÁÚÏÎ EM> ÂÏÌØÛÅ 80 Äâ
äÁ ÎÅÔ, ÔÁÍ áãð 12-ÒÁÚÒÑÄÎÙÊ. äÏ ËÁËÏÊ ÒÁÚÒÑÄÎÏÓÔÉ ÍÁÓÛÔÁÂÉÒÏ×ÁÔØ ËÏÜÆÆÉÃÉÅÎÔÙ
- ÎÁÄÏ ÐÏÓÍÏÔÒÅÔØ. ðÒÏÓÔÏ Ñ ÐÌÏÈÏ ÓÅÂÅ ÐÒÅÄÓÔÁ×ÌÑÀ ×ÌÉÑÎÉÅ ÐÏÔÅÒÉ ÔÏÞÎÏÓÔÉ ÎÁ ÒÁÂÏÔÏÓÐÏÓÏÂÎÏÓÔØ ÁÌÇÏÒÉÔÍÁ.
DT> KF>> çÅÒÃÅÌØ ÌÉÛØ ÜËÏÎÏÍÉÔ ÞÉÓÌÏ ÕÍÎÏÖÅÎÉÊ. þÁÝÅ ÎÅ ÁËÔÕÁÌØÎÏ, Ñ ÄÕÍÁÀ.
DT>> á ÞÔÏ ÁËÔÕÁÌØÎÏ? âðæ - ÌÕÞÛÅ?
EM> óÍÏÔÒÑ ÓËÏÌØËÏ ÞÁÓÔÏÔ ÎÕÖÎÏ ÏÄÎÏ×ÒÅÍÅÎÎÏ ÏÂÒÁÂÏÔÁÔØ. äÌÑ 2-4 çÅÒÃÅÌØ EM> ×ÙÇÏÄÎÅÅ.
ûÅÓÔØ. :)
EM> ÷ âðæ-Å ÐÒÏÝÅ ÍÁÓÛÔÁÂÉÒÏ×ÁÎÉÅ ÐÒÏÍÅÖÕÔÏÞÎÙÈ ÒÅÚÕÌØÔÁÔÏ×, ÐÏÜÔÏÍÕ, ÐÒÉ EM> ÔÁËÏÍ ÄÉÎÁÍÉÞÅÓËÏÍ ÄÉÁÐÁÚÏÎÅ ÍÏÖÎÏ ÏÂÏÊÔÉÓØ 16x16 (×ÒÏÄÅ ÂÙ).
ëÓÔÁÔÉ#1, ÇÄÅ ÂÙ ÎÁ ÜÔÏÔ âðæ ÐÏÇÌÑÄÅÔØ × ×ÉÄÅ ÉÓÈÏÄÎÉËÁ Ó ËÏÍÍÅÎÔÁÒÉÑÍÉ? çÅÒÃÅÌØ ÄÌÑ ÍÅÎÑ ÓףÌÓÑ Ë ÔңÍ ÆÕÎËÃÉÑÍ:
1) ðÒÅÄ×ÁÒÉÔÅÌØÎÙÊ ÒÁÓޣÔ ËÏÜÆÆÉÃÉÅÎÔÏ×
procedure InitGoertzel (idx : tIdx; iFreq, Sampling_Rate : longint); var omega: float; begin
omega := 2.0 * Pi * iFreq / Sampling_Rate; tab[idx].coeff := 2.0 * cos(omega);
end;
2) ïÂÒÁÂÏÔËÁ ÓÜÍÐÌÁ
procedure ProcessSample(idx : tIdx; sample : word); var Q0 : float; begin with tab[idx] do begin Q0 := Q1*coeff - Q2 + sample; Q2 := Q1; Q1 := Q0; end; end;
3) ðÏÌÕÞÅÎÉÅ ÒÅÚÕÌØÔÁÔÁ
function GetMagnitude (idx : tIdx) : float; begin with tab[idx] do result := 10 * log10 (sqrt( Q1*Q1 + Q2*Q2 - Q1*Q2*coeff )); end;
÷ӣ ËÒÁÊÎÅ ÐÒÏÓÔÏ É ÐÒÏÚÒÁÞÎÏ. :)
EM> ðÒÁ×ÄÁ, ÌÕÞÛÅ ×ÓÅ ÜÔÏ ÄÅÌÁÔØ ÎÁ DSP Ó ÆÉÛËÁÍÉ ÔÉÐÁ ÂÉÔÒÅ×ÅÒÓÎÏÊ EM> ÁÄÒÅÓÁÃÉÉ, ÐÏÄÄÅÒÖËÁ ÂÌÏÞÎÏÊ ÐÌÁ×ÁÀÝÅÊ ÔÏÞËÉ É Ô.Ð.
ëÓÔÁÔÉ#2, ÞÔÏ ÂÙ ÐÏÞÉÔÁÔØ ÏÂÚÏÒÎÏÇÏ ÐÒÏ DSP? ñ ×ÏÏÂÝÅ ÎÅ ÐÒÅÄÓÔÁ×ÌÑÀ, ÞÔÏ ÜÔÏ ÔÁËÏÅ É ËÁË Ó ÎÉÍÉ ÒÁÂÏÔÁÔØ. ðÏÈÏÖÅ ÌÉ ÏÎÏ ÎÁ íë Ó ÐÌÁ×ÁÀÝÅÊ ÔÏÞËÏÊ, ÉÌÉ ÜÔÏ ÞÔÏ-ÔÏ ÓÏ×ÓÅÍ ÓÐÅÃÉÆÉÞÅÓËÏÅ? :) HÁ ËÁËÉÈ ÑÚÙËÁÈ ÐÏÄ ÎÉÈ ÐÒÏÇÒÁÍÍÙ ÐÉÛÕÔ?
Dimmy.