Bir x86-64 işlemci kullanılarak uygulanan saniyede örnekleri sabit örnek hızında çalışan bir kayan nokta dijital sinyal işleme sistemi var . DSP sistemi eşzamanlı neyse konularla kilitli olduğunu varsayarsak, bazı frekans bir dijital osilatör uygulamak için en iyi yolu nedir ?f
Özellikle, sinyali oluşturmak istiyorum: burada örnek numarası için .t = n / f s n
Bir fikir, her saat döngüsünde \ Delta \ phi = 2 \ pi f / f_s açısıyla döndürdüğümüz bir vektörün (x, y) takip edilmesidir .
Bir Matlab sözde kodu uygulaması olarak (gerçek uygulama C'dir):
%% Initialization code
f_s = 32768; % sample rate [Hz]
f = 19.875; % some constant frequency [Hz]
v = [1 0]; % initial condition
d_phi = 2*pi * f / f_s; % change in angle per clock cycle
% initialize the rotation matrix (only once):
R = [cos(d_phi), -sin(d_phi) ; ...
sin(d_phi), cos(d_phi)]
Sonra, her saat döngüsünde, vektörü biraz döndürüyoruz:
%% in-loop code
while (forever),
v = R*v; % rotate the vector by d_phi
y = v(1); % this is the sine wave we're generating
output(y);
end
Bu, osilatörün döngü başına sadece 4 çarpımla hesaplanmasını sağlar. Ancak, faz hatası ve genlik kararlılığı konusunda endişelenirim. (Basit testlerde ben genlik ölmek veya hemen patlayabilir vermedi şaşırdı - belki sincos
talimat teminatların ?).
Bunu yapmanın doğru yolu nedir?
sincos
bir avuç çarpma ile nasıl karşılaştırılır?mod
Operasyona dikkat edilmesi gereken olası tuzaklar var mı?