[an error occurred while processing this directive]
|
|
Результат при SNR=-20 (20 дб), и такой помехе в пол-амплитуды полезного сигнала на 50 герц - макс. ошибка 0.0028 герц.
Тестировалось в 256 случайных точках в диапазоне 200...300 герц.
шум бэлий. Длительность измерения - 2 секунды (16384 точек с дискретностью 8 кГц).
function [err,freq] = freqmeas (F,SNR)Fs = 8000;
N=16384;
t = (0:N-1);
ph=rand(1,2)*2*pi;
% signal
s = sin((2*pi*(F/Fs).*t)+ph(1));
% 50 Hz, amp. 1/2 of signal
ss = 0.5.*sin(2*pi*(50/Fs).*t+ph(2));
% noise
n = (10^(SNR/20)).*(2*rand(1,N)-1);
s = s+n+ss;w = hanning(N)';
s = s .* w;spectr = (-1/N)*abs(fft(s));
spectr = spectr(1:N/2);fr = (0:N/2-1) .* (Fs / N);
sp = spapi(7,fr,spectr);[c,i] = min(spectr);
fq = (i-1)*(Fs / N);
resol = Fs/N;[dummy,freq] = fnmin(sp,[(fq-resol*2) (fq+resol*2) ]);
err = abs(F - freq);
А вот этим тестировалось
SNR = -20;
N=256;F = rand(1,N).*(300-200)+200;
for i = 1:N
[e(i),f(i)] = freqmeas(F(i),SNR);
e(i)
end
E-mail: info@telesys.ru