Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: И опять определение частотного смешения
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
DMax
Есть несущая частота, принятая с шумом и снесённая на номинальный ноль. В идеале весь мой сигнал выродится в зашумлённую константу, но на практике из-за того, что есть частотное смещение, я получу комплексную экспоненту с маленькой частотой. Вот мне нужно эту частоту определить самым простым и быстрым способом.

Алгоритм 1:
Я беру две выборки сигнала длиной N отсчетов и скалярно помножаю друг на друга (понятно, начала этих выборок находятся во времени друг от друга ближе, чем минимальный период искомой частоты). Аргумент полученного комплексного скаляра делённый на количество отсчетов в выборке - это есть прирост фазы на отсчёт. Если я его поделю на 2*Pi и умножу на Fs, то получу искомую частоту.

Алгоритм 2:
Предположим, что фаза меняется медленно. Я беру две выборки длиной N отсчетов и усредняю каждые K соседних отсчетов в каждой выборке. Таким образом я получаю две выборки длинной (N/K) отсчетов и далее действую по алгоритму 1. В предельном случае, при определённых ограничениях на N, можно взять K = N.

В отсутствие шума результаты алгоритмов совпадают. Но если шум присутствует, то в результате второго алгоритма, как бы получается, что перед тем, как находится прирост фазы на сэмпл, мы усредняем шум, уменьшая его амплитуду в sqrt(k) раз. Или мне это приглючилось и алгоритмы одинаково эффективны?
Pechka
На первый взгляд мне кажется так: в первом случае получается уменьшение шума в sqrt(N) раз поскольку делите аргумент полученного комплексного скаляра на число отсчётов в выборке т.е. на N. Во втором случае вы сначала делите на k, уменьшая шум в sqrt(k) раз, а после по алгоритму 1 ещё в sqrt(N/k) раз (поскольку у вас осталось не N, а N/k отсчётов в выборке) итого выигрыш во втором случае равен sqrt(k)*sqrt(N*k)=sqrt(N).
Мне думается, что эффективность будет одинаковой, хотя может где-то чего-то и наврал.
А моделировать не пробовалось?
DMax
Цитата(Pechka @ May 6 2010, 20:53) *
На первый взгляд мне кажется так: в первом случае получается уменьшение шума в sqrt(N) раз поскольку делите аргумент полученного комплексного скаляра на число отсчётов в выборке т.е. на N. Во втором случае вы сначала делите на k, уменьшая шум в sqrt(k) раз, а после по алгоритму 1 ещё в sqrt(N/k) раз (поскольку у вас осталось не N, а N/k отсчётов в выборке) итого выигрыш во втором случае равен sqrt(k)*sqrt(N*k)=sqrt(N).
Мне думается, что эффективность будет одинаковой, хотя может где-то чего-то и наврал.
А моделировать не пробовалось?

Пока не пробовалось. Нет под рукой матлаба sad.gif
alex_os
Цитата(Pechka @ May 6 2010, 20:53) *
На первый взгляд мне кажется так: в первом случае получается уменьшение шума в sqrt(N) раз поскольку делите аргумент полученного комплексного скаляра на число отсчётов в выборке т.е. на N. Во втором случае вы сначала делите на k, уменьшая шум в sqrt(k) раз, а после по алгоритму 1 ещё в sqrt(N/k) раз (поскольку у вас осталось не N, а N/k отсчётов в выборке) итого выигрыш во втором случае равен sqrt(k)*sqrt(N*k)=sqrt(N).
Мне думается, что эффективность будет одинаковой, хотя может где-то чего-то и наврал.
А моделировать не пробовалось?

Не правильно. Второй алгоритм лучше (если изменение фазы за время k не велико), т.к. для первого случае уменьшение шума будет в sqrt(N/2) раз.
Пусть s, s1, - фрагменты сигнала, n, n1 - шум, все вектор столбец. Скалярное произведение
(s'+n')*(s1+n1) = s'*s1 + s'*n1 + n'*s1 + n'*n1.
s'*s1 - полезный сигнал,
s'*n1 + n'*s1 - шумовая компонента, ее дисперсия будет в 2*N раз больше чем дисперсия исходного шума
n'*n1 - для больших сигнал шум этим можно пренебречь.

ps шум предполагается не коррелированным.
DMax
Цитата(alex_os @ May 7 2010, 09:25) *
Не правильно. Второй алгоритм лучше (если изменение фазы за время k не велико), т.к. для первого случае уменьшение шума будет в sqrt(N/2) раз.
Пусть s, s1, - фрагменты сигнала, n, n1 - шум, все вектор столбец. Скалярное произведение
(s'+n')*(s1+n1) = s'*s1 + s'*n1 + n'*s1 + n'*n1.
s'*s1 - полезный сигнал,
s'*n1 + n'*s1 - шумовая компонента, ее дисперсия будет в 2*N раз больше чем дисперсия исходного шума
n'*n1 - для больших сигнал шум этим можно пренебречь.

ps шум предполагается не коррелированным.


Всё правильно. Спасибо! Чего-то вчера вечером уже башка не работала smile.gif

Всех с наступающим праздником!
Serg76
Цитата(DMax @ May 6 2010, 20:35) *
Есть несущая частота, принятая с шумом и снесённая на номинальный ноль. В идеале весь мой сигнал выродится в зашумлённую константу, но на практике из-за того, что есть частотное смещение, я получу комплексную экспоненту с маленькой частотой. Вот мне нужно эту частоту определить самым простым и быстрым способом.

В этом источнике описан целый ряд алгоритмов по оценке частоты Нажмите для просмотра прикрепленного файла
Pechka
Цитата(alex_os @ May 7 2010, 09:25) *
Не правильно. Второй алгоритм лучше (если изменение фазы за время k не велико), т.к. для первого случае уменьшение шума будет в sqrt(N/2) раз.
Пусть s, s1, - фрагменты сигнала, n, n1 - шум, все вектор столбец. Скалярное произведение
(s'+n')*(s1+n1) = s'*s1 + s'*n1 + n'*s1 + n'*n1.
s'*s1 - полезный сигнал,
s'*n1 + n'*s1 - шумовая компонента, ее дисперсия будет в 2*N раз больше чем дисперсия исходного шума
n'*n1 - для больших сигнал шум этим можно пренебречь.

ps шум предполагается не коррелированным.


А по-моему правильно, за исключением оценки подавления шума. Пусть первый алгоритм давит шум в sqrt(N/2) раз.
N - полное число отсчётов в выборке
k - число усреднений при получении одной точки (во втором алгоритме)
n=N/k
тогда если через второй алгоритм работать получаем: sqrt(k), после переходим к алгоритму (1) и получаем sqrt(n/2). перемножаем и получаем sqrt(k)*sqrt(n/2)=sqrt(k)*sqrt(N/2k)=sqrt(N/2).
Так, что вроде бы алгоритмы одинаковые.
Serg76
Добрый день. На днях столкнулся с подобного рода задачей. Интересует следующий вопрос: если в качестве ядра алгоритма оценки используется преобразование Фурье с дальнейшей интерполяцией отсчетов спектра, то существует ли какая-нибудь методика оптимального (с точки зрения минимального отклонения по частоте) выбора основания преобразования Фурье, или же проблема рещается просто: чем выше разрешение пр-ия Фурье, тем лучше оценка, и тогда ничего не надо интерполировать?
Pechka
Цитата(Serg76 @ May 11 2010, 18:48) *
Добрый день. На днях столкнулся с подобного рода задачей. Интересует следующий вопрос: если в качестве ядра алгоритма оценки используется преобразование Фурье с дальнейшей интерполяцией отсчетов спектра, то существует ли какая-нибудь методика оптимального (с точки зрения минимального отклонения по частоте) выбора основания преобразования Фурье, или же проблема рещается просто: чем выше разрешение пр-ия Фурье, тем лучше оценка, и тогда ничего не надо интерполировать?

В общем виде работает правило чем выше разрешение преобразования, тем лучше. Однако, если есть какая-либо априорная информация о сигнале ( ключевых частотах спектра, например) то основание для преобразования можно оптимизировать так, чтобы ключевые частоты не расползались по соседним бинам. Это нужно моделировать на конкретных сигналах.
Stanislav
Цитата(DMax @ May 6 2010, 20:35) *
Есть несущая частота, принятая с шумом и снесённая на номинальный ноль. В идеале весь мой сигнал выродится в зашумлённую константу, но на практике из-за того, что есть частотное смещение, я получу комплексную экспоненту с маленькой частотой. Вот мне нужно эту частоту определить самым простым и быстрым способом.
Существует несколько способов быстрой оценки частоты комплексного гармонического сигнала. Для начала, следует задаться границами её изменения, а также другими характаристиками сигнала (напр., стационарность имеет важное значение).
А о шуме что-нибудь известно?

Цитата(DMax @ May 6 2010, 20:35) *
Алгоритм 2:
Предположим, что фаза меняется медленно. Я беру две выборки длиной N отсчетов и усредняю каждые K соседних отсчетов в каждой выборке. Таким образом я получаю две выборки длинной (N/K) отсчетов и далее действую по алгоритму 1. В предельном случае, при определённых ограничениях на N, можно взять K = N.
Первый алгоритм сгодится для оценки только при достаточно большом отношеннии сигнал-шум.
Второй выглядит несколько получше, но тоже далёк от оптимума, насколько я могу судить.
Думается, (кусочная) полиномиальная или комплексно-экспоненциальная аппроксимация функции будет работать лучше. По методу наименьших квадратов, например, если шум гауссов.

Цитата(Serg76 @ May 11 2010, 18:48) *
Добрый день. На днях столкнулся с подобного рода задачей. Интересует следующий вопрос: если в качестве ядра алгоритма оценки используется преобразование Фурье...
При малом числе периодов функции, ДПФ будет давать сильно смещённую оценку, и не из-за низкого разрешения, а, в основном, по причине растекания спектральных компонентов (явления Гиббса).
AlikM
Цитата(DMax @ May 6 2010, 20:35) *
Есть несущая частота, принятая с шумом и снесённая на номинальный ноль. В идеале весь мой сигнал выродится в зашумлённую константу, но на практике из-за того, что есть частотное смещение, я получу комплексную экспоненту с маленькой частотой. Вот мне нужно эту частоту определить самым простым и быстрым способом.

В литературе описано огромное кол-во методов оценки частоты. А Вам нужно сделать правильный выбор для вышей конкретной задачи и доступных ресурсов для ее решения. Например, по критерию максимального правдоподобия отимальный метод - это БПФ.
Посмотрите еще здесь Нажмите для просмотра прикрепленного файла



Цитата(Serg76 @ May 11 2010, 18:48) *
Добрый день. На днях столкнулся с подобного рода задачей. Интересует следующий вопрос: если в качестве ядра алгоритма оценки используется преобразование Фурье с дальнейшей интерполяцией отсчетов спектра, то существует ли какая-нибудь методика оптимального (с точки зрения минимального отклонения по частоте) выбора основания преобразования Фурье, или же проблема рещается просто: чем выше разрешение пр-ия Фурье, тем лучше оценка, и тогда ничего не надо интерполировать?

Не совсем так, явление "утечки" в БПФ может пивести к неправильным результатам, даже при больших разрешениях БПФ. Так, бин в котором расположена интересующая нас спектральная компонента может быть сильно искажен боковыми лепестками соседних бинов, в которых расположены мощные мешающие сигналы. Для борьбы с эффектом "утечки" применяют окна, но платить придется уменьшением разрешающей способности.
Еще совет, если точно известны все возможные значения частоты (например OFDM), то частоту дискретизации сигнала и размер БПФ следует выбирать так чтобы эти частоты находились в середине бинов.
И по-поводу интерполяции, это тоже метод smile.gif . Вот, например, простой и эффективный метод локализации спектрального пика.
mpeak = mmax - Re(delta), delta = (X(mmax+1) - X(mmax-1)) / (2*X(mmax) - X(mmax+1) - X(mmax-1) ), где mmax - целочисленный индекс наибольшей по модулю спектарльной компоненты |X(mmax)|. X(mmax+1), X(mmax-1) - комплексные спектральные отсчеты по сторонам от наибольшего отсчета. fpeak = mpeak*Fs/N, mpeak - дробный
Этот метод дает погрешность при сигнал/шум 3 дБ примерно 0.06 от ширины бина.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.