Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс. e-mail:jobsmp@pochta.ru |
В MatLabe7.0 вычислил спектр сигнала стандартной функцией fft(s, Nf), и функцией Гертцеля (для всех частот) goertzel(s, 1:Nf), результаты немного отличаются.
В описаниях самого алгоритма в явном виде нигде не сказано, что он приближенный, вот меня сомнения и терзают.
Или может я что не правильно в МатЛабе сделал?
%Клок
Fclk = 3200000;
%Число точек времени
Nt = 1024;
%интервал времени
t = 0: 1/Fclk: Nt/Fclk
%Максимум входного сигнала
Us = 55;
%Частота входного сигнала
Fsig = 400e3;
%Форма сигнала
x = abs(t)>=222e-6;
z = abs(t)>=100e-6;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
s = -(z-x).*(sin(2*pi*(Fsig)*t))*Us + 0;%сигнал
%№ гармоник для отображения на графике (соответсвуют 326,5-440,625кГц)
vec = 116:141;
%колво точек БПФ
Nf = 1024;
Ygoe = goertzel(s, 1:Nf);
Y = fft(s,Nf);
subplot (N_sub_plot,1,1)
plot( (vec), abs(Ygoe(vec)), 'g' );%Goertzel
hold on
xlabel('# harmonics ')
plot( (vec), abs(Y(vec)), 'r');%FFT
hold off