реклама на сайте
подробности

 
 
> Точно измерить частоту.
b-volkov
сообщение Feb 21 2008, 16:40
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 137
Регистрация: 10-04-07
Из: г. Троицк
Пользователь №: 26 907



Имеем на выходе датчика синусоиду примерно 2кГц в течении 0.5 сек. , т.е. цуг из примерно 1000 периодов. В зависимости от физ. величины частота меняется на +-10% Считается, что во время цуга частота не меняется. Надо определить частоту с точностью хотя бы до 0.01Гц. На данный момент метод используетсяпрямое измерение периода каждого колебания с дальнейшей статистической обработкой. При существующем уровне помех, наводок и т.д. точность получается не лучше 0.1Гц. Вопрос: как методами ЦОС уточнить результат измерения? Это вообще возможно теоретически? Сразу должен оговориться, что я о цифровой обработке имею весьма общие представления и никакой практики. Мне в голову приходит только свертка с синусоидами от (f0 – 0.1Гц) до ( f0 + 0.1Гц) с шагом 0.01Гц (f0-приблицительно измеренная частота) и поиском "резонанса". Может быть можно как по другому, попроще?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
leksa
сообщение Mar 3 2010, 17:04
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 20-09-08
Пользователь №: 40 352



Всем здравствуйте!
Тема интересная, позвольте выложить матлабовский скрипт, в котором я набросал алгоритм оценки частоты комплексной экспоненты на основе планарной фильтрации.
Ничего сверхестественного, просто один из adhoc способов. Идея в том, чтобы умножая отсчеты комплексной экспоненты на свою задержанную и взятую с комплексным сопряжением копию, получить последовательность фазоров, угол которых пропорционален частоте исходной экспоненты. Затем нужно сложить полученные фазоры как комплексные числа, получив на комплексной плоскости длиный вектор, угол которого опять же пропорционален искомой частоте(эта операция и есть планарная фильтрация). Таким образом уменьшается воздействие шума на оценку. Далее вычисляем угол этого длинного вектора, умножаем на коэффициент Fs/(2*pi) и получаем оценку частоты.
Правда полученная таким образом оценка достаточно сильно подвержена влиянию шума.
Чтобы несколько улучшить оценку, я пошел немного дальше и используя вычисленную оценку частоты, создаю комплексный КИХ фильтр с ИХ в виде 1 периода комплексной экспоненты на полученной оценкой частоте. Получается такой комплексный ППФ со средней частотой совпадающей с нашей оценкой частоты.
Затем пропускаю входной сигнал через этот ППФ и снова нахожу оценку по вышеописанному методу.
Засчет второй итерации после фильтрации, погрешность оценки может уменьшиться на порядок по сравнению с первой оценкой.
Вот такой вот способ.
Правда, вторая итерация имеет смысл только в определенном диапазоне отношения сигнал шум (если ОСШ выше 45 дБ, то полезный эффект от второй итерации уже незначителен)
Планарная фильтрация используется в ряде прямых(feedforward) методов синхронизации, описанных например в
в часто упоминающейся на форуме книге Synchronization Techniques for Digital Receivers.

Собственно, скрипт:

%test_carr_freq_ff_est
script
clear
clc
close all

Fs=6400;
Tau=1.00;%
Nlen=Tau*Fs;
t=[1/Fs:1/Fs:Nlen/Fs].';
SNR=6;
Fc=47.333333333333333333333;%
disp(['SNR = ' num2str(SNR)])
disp(['Fc = ' num2str(Fc)])
ini_phase = (rand(1)*2-1)*pi
y = 1.*exp(j*(2*pi*Fc*t+ini_phase));
Sinp = awgn(y,SNR,'measured');
Sinp_d = Sinp(1:end-1).*conj(Sinp(2:end));
Sinp_d_pf = sum(Sinp_d)
% цикл чисто для наглядности работы алгоритма
Sinp_d_pf_k = zeros(size(Sinp_d));
for k=2:length(Sinp_d)
Sinp_d_pf_k(k)=Sinp_d_pf_k(k-1)+Sinp_d(k);
% figure(101)
% plot([Sinp_d_pf_k(k-1) Sinp_d_pf_k(k)],'y- *'),grid on,hold on
% pause(1/25)
end
figure(11)
plot(Sinp_d_pf_k,'y- *'),grid on,hold on,title('планарная фильтрация');
phase_pf = -angle(Sinp_d_pf);
phase_pf_pi = phase_pf/pi;
Fc_est = phase_pf_pi*Fs/2;
delta_F = Fc_est-Fc;
disp(['Оценка частоты: Fc_est = ' num2str(Fc_est)])
disp(['Погрешность оценки частоты: delta_F = ' num2str(delta_F)])
figure(12)
sz=prod(size(Sinp));
tv=[1/Fs:1/Fs:sz/Fs];
plot(tv,real(Sinp),'b- .'),grid on,hold on,title('IQ сигнала после фильтра');
plot(tv,imag(Sinp),'r- .'),grid on,hold off
figure(13)
[PSDPSD,f]=pwelch(Sinp,[],[],[],Fs,'twosided');
plot(f-Fs/2,fftshift(10*log10(PSDPSD/max(PSDPSD))),'y- '),grid on,title('Спектр сигнала после фильтра'),hold on;
% пофильтруем
h_len = round(Fs/Fc_est)*1;
hbpf = exp(j*2*pi*(Fc_est/Fs)*[1:h_len]);
Sinp_f = filter(hbpf,1,Sinp);

% еще разок
Sinp = Sinp_f;
Sinp_d = Sinp(1:end-1).*conj(Sinp(2:end));
Sinp_d_pf = sum(Sinp_d);
% цикл чисто для наглядности работы алгоритма
Sinp_d_pf_k = zeros(size(Sinp_d));
for k=2:length(Sinp_d)
Sinp_d_pf_k(k)=Sinp_d_pf_k(k-1)+Sinp_d(k);
% figure(101)
% plot([Sinp_d_pf_k(k-1) Sinp_d_pf_k(k)],'y- *'),grid on,hold on
% pause(1/25)
end
figure(21)
plot(Sinp_d_pf_k,'y- *'),grid on,hold on,title('планарная фильтрация');
phase_pf = -angle(Sinp_d_pf);
phase_pf_pi = phase_pf/pi;
Fc_est2 = phase_pf_pi*Fs/2;
delta_F2 = Fc_est2-Fc;
disp(['Оценка частоты №2: Fc_est2 = ' num2str(Fc_est2)])
disp(['Погрешность оценки частоты: delta_F2 = ' num2str(delta_F2)])
figure(22)
sz=prod(size(Sinp));
tv=[1/Fs:1/Fs:sz/Fs];
plot(tv,real(Sinp),'b- .'),grid on,hold on,title('IQ входного сигнала');
plot(tv,imag(Sinp),'r- .'),grid on,hold off
figure(23)
[PSDPSD,f]=pwelch(Sinp,[],[],[],Fs,'twosided');
plot(f-Fs/2,fftshift(10*log10(PSDPSD/max(PSDPSD))),'y- '),grid on,title('Спектр вх сигнала'),hold on;
% % характеристики фильтра
% figure(31)
% plot(real(hbpf),'b- .'),grid on,hold on
% plot(imag(hbpf),'r- .'),grid on
% figure(32)
% freqz(hbpf,1)

Сообщение отредактировал leksa - Mar 3 2010, 17:28


--------------------
A designer knows he has achieved perfection not when there is nothing left to add, but when there is nothing left to take away (Antoine de Saint-Exupery)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- b-volkov   Точно измерить частоту.   Feb 21 2008, 16:40
- - akl   Цитата(b-volkov @ Feb 21 2008, 20:40...   Feb 21 2008, 17:35
- - fontp   Существует теоретический предел точности измерения...   Feb 21 2008, 20:13
|- - TigerSHARC   Цитата(fontp @ Feb 22 2008, 00:13) Сущест...   Mar 1 2010, 14:38
|- - fontp   Цитата(TigerSHARC @ Mar 1 2010, 17:38) А ...   Mar 1 2010, 15:01
|- - TigerSHARC   Цитата(fontp @ Mar 1 2010, 19:01) Чем бол...   Mar 1 2010, 15:09
|- - fontp   Цитата(TigerSHARC @ Mar 1 2010, 18:09) Сп...   Mar 1 2010, 15:13
- - Михаил_K   Судя по тому, что вы производите статистическую об...   Feb 29 2008, 11:08
- - TigerSHARC   А как насчёт способа когда определяем две опорные ...   Mar 1 2010, 17:54
|- - fontp   Цитата(TigerSHARC @ Mar 1 2010, 20:54) А ...   Mar 1 2010, 18:18
- - DMax   Цитата(b-volkov @ Feb 21 2008, 19:40...   Mar 2 2010, 11:57
|- - fontp   Цитата(DMax @ Mar 2 2010, 14:57) Если час...   Mar 2 2010, 12:58
- - TigerSHARC   Я так понимаю, что это всё рекомендации для общего...   Mar 2 2010, 20:12
|- - bahurin   Вариант такой есть. Умножить на комплексную экспон...   Mar 3 2010, 05:17
||- - fontp   Цитата(bahurin @ Mar 3 2010, 08:17) Вариа...   Mar 3 2010, 07:49
||- - bahurin   Цитата(fontp @ Mar 3 2010, 10:49) Такая о...   Mar 3 2010, 08:39
|||- - fontp   Цитата(bahurin @ Mar 3 2010, 11:39) Интер...   Mar 3 2010, 11:41
|||- - petrov   Цитата(fontp @ Mar 3 2010, 14:41) Она не ...   Mar 3 2010, 12:58
||||- - fontp   Цитата(petrov @ Mar 3 2010, 15:58) Без вс...   Mar 3 2010, 13:18
||||- - petrov   Цитата(fontp @ Mar 3 2010, 16:18) Но не т...   Mar 3 2010, 13:40
||||- - fontp   Цитата(petrov @ Mar 3 2010, 16:40) Но име...   Mar 3 2010, 14:06
|||- - bahurin   Цитата(fontp @ Mar 3 2010, 14:41) Возможн...   Mar 3 2010, 14:08
|||- - fontp   Цитата(bahurin @ Mar 3 2010, 17:08) Думаю...   Mar 3 2010, 14:38
||- - blackfin   Цитата(fontp @ Mar 3 2010, 10:49) Сравнит...   Mar 4 2010, 07:54
||- - fontp   Цитата(blackfin @ Mar 4 2010, 10:54) Мне ...   Mar 4 2010, 08:15
|- - blackfin   Цитата(TigerSHARC @ Mar 2 2010, 23:12) Пр...   Mar 3 2010, 08:37
- - TigerSHARC   для fontp: хочу всё таки запустить метод маклеода....   Mar 3 2010, 17:38
|- - fontp   Цитата(TigerSHARC @ Mar 3 2010, 20:38) дл...   Mar 3 2010, 18:04
|- - TigerSHARC   Цитата(fontp @ Mar 3 2010, 21:04) Во всех...   Mar 3 2010, 21:26
- - fontp   вот ещё нашелся тот матлабовский тест по ссылке, ...   Mar 4 2010, 07:31
- - TigerSHARC   А я делаю так. Беру выборку размером в два периода...   Mar 4 2010, 12:57
|- - КонстантинТ   Судя по всему измеряете частоту прецессии (измерен...   Mar 4 2010, 13:38
|- - TigerSHARC   Цитата(КонстантинТ @ Mar 4 2010, 16:38) С...   Mar 4 2010, 14:27
|- - КонстантинТ   Цитата(TigerSHARC @ Mar 4 2010, 18:27) Не...   Mar 5 2010, 08:51
- - TigerSHARC   Скажите мне, ну причём тут разговоры про сигнал/шу...   Mar 11 2010, 17:31
|- - Oldring   Цитата(TigerSHARC @ Mar 11 2010, 20:31) С...   Mar 11 2010, 18:13
|- - fontp   Цитата(TigerSHARC @ Mar 11 2010, 20:31) Т...   Mar 11 2010, 19:15
- - vadon   случайно наткнулся на открытый проект по измерению...   Jul 28 2010, 09:08
- - Pechka   А не пробовали моделировать фильтр Герцеля? В смыс...   Jul 31 2010, 16:04
- - bahurin   читаю и понимаю, что люди вопросы задают и ждут оп...   Aug 2 2010, 05:19


Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th June 2025 - 01:04
Рейтинг@Mail.ru


Страница сгенерированна за 0.01409 секунд с 7
ELECTRONIX ©2004-2016