|
Точно измерить частоту. |
|
|
|
 |
Ответов
|
Mar 3 2010, 17:04
|
Участник

Группа: Участник
Сообщений: 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)
|
|
|
|
Сообщений в этой теме
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
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|