Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Определение передаваемых частот
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
Страницы: 1, 2
Kseniia
Всем доброго времени суток!

Задача: есть DTMF метка, необходимо определить частоты которые передавались, с точностью до 3го знака после запятой. (DTMF - передается сумма двух гармоник, НЧ и ВЧ)

Что проделано:
выделяю из сигнала DTMF, fd=44100 Гц, для того, чтобы N была кратна двум, и равнялась 2048, немного обрезаю сигнал до 0.046 секунд (было 0.05 сек), таким образом T=1/fd=2.268*10^5.
Беру БПФ, строю график зависимости уровня(?)(20 log(sqwr(ReБПФ^2+ImБПФ^2)/fd-N), дБ от частоты, Гц (прикрепляю скрин, freqn=n*fd/N, n=0,...,N-1).
Нажмите для просмотра прикрепленного файла
Пики приходятся на 947,46Гц и 1205,9Гц, хотя должны быть 941Гц и 1209Гц. такая разница по видимому из-за огромного ШАГА по частоте, в 21,55 Гц, то есть передаваемые частоты не кратны нашему "шагу".

Что делать дальше - не понимаю.
Пробовала инетрполяцию Лагранжа - чушь полная, не получается.
Есть предложение использовать коэффициенты корреляции, относительно синусоидального и косинусоидального сигналов, но результатов пока не дал, да и не до конца понятно, что с этими коэф делать.

вопрос: Как математически можно определить частоты?
Ruslan1
Прикрепите файл с вычисленными бинами БПФ и покажите как вы интерполяцию проводите.
И еще, Вы не указали какую оконную функцию применяете.

Начните с Матлаба- подсуньте ему идеальные данные на вход и убедитесь, что Ваш алгоритм считает то что вам нужно с нужной точностью. Помодулируйте поведение результата при изменении, ну хотя бы, разрядности АЦП и частоты семплирования.
Следующий этап- тот же Матлаб с подсунутыми реальными данными (со звуковыми частотами совсем просто- у матлаба спецпакет есть, там есть функция, позволяющая с входа звуковой карты данные оцифровывать напрямую в Матлаб).
Kseniia
Цитата(Ruslan1 @ May 8 2015, 09:22) *
Прикрепите файл с вычисленными бинами БПФ и покажите как вы интерполяцию проводите.
И еще, Вы не указали какую оконную функцию применяете.

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


в тот раз брала полином Лагранжа.

Сейчас попробовала с параболической интерполяцией "поиграть", результаты очень близки (ура-ура), для построения алгоритма вычисления сама создала DTMF метку, то есть начальные параметры знаю. Работаю с Маткадом (не бейте сильно, не программист я, но видимо скоро им стану), МатЛаб устанавливаться не хочет, Математику установила, но еще до конца не разобралась, плюс там все функции "скрыты", а меня интересует именно математика.
Использую окно Гаусса, правда еще не до конца поняла от чего параметр альфа зависит (с альфа = 0.1 результат ближе к искомому)
Нажмите для просмотра прикрепленного файла
сейчас попробую другие окна и все-таки корреляцию посмотрю.
На счет "бинов БПФ" - поясните, пожалуйста, я недавно пытаюсь вникнуть в тему...
serjj
Какие стоят ограничения на вычислительную сложность? Спектральный анализ не ограничивается методами, основанными на преобразовании Фурье. Существуют алгоритмы высокого разрешения, которые позволяют выделять сигналы с высокой точностью. Главные преимущества - возможность разделять сигналы с малым отличием по частоте или с большой разницей в мощности. Но можно использовать и для высокоточного определения частот в случаях обычного анализа, как, кажется, у вас. Если интересно, могу посоветовать начать изучение с непараметрических методов: Capon, MUSIC, root MUSIC, т.к. они проще чем параметрические (AR модели и прочие).
Вот пример из матлаба, использующего встроенную функцию (матлаб вы все таки как нибудь поставте, никуда без него)
Код
clear all;
Ns = 2048;
fs = 1e5;
Ts = 1/fs;
t=0:Ts:(Ns-1)*Ts;
f0 = 12344;
f1 = 37115;
SNR = 60;
a0 = 1;
a1 = 1;
s = a0*exp(1i*2*pi*f0*t) + a1*exp(1i*2*pi*f1*t);
s = awgn(s, SNR, 'measured');
[w, p] = rootmusic(s, 2, fs);
disp('SNR, dB:');
disp(SNR);
disp('Estimated frequencies, kHz:')
disp(w/1000);

Для SNR=60 дБ:
Код
Estimated frequencies, kHz:
   37.1150
   12.3440

Для SNR=20дБ:
Код
Estimated frequencies, kHz:
   37.1138
   12.3417

Размер исходной выборки взял как у вас - 2048, но можно и меньше, ошибка будет соответственно расти. Но величина ошибки значительно меньше чем для периодограмм (Фурье)
Kseniia
Цитата(serjj @ May 8 2015, 10:13) *
Какие стоят ограничения на вычислительную сложность? Спектральный анализ не ограничивается методами, основанными на преобразовании Фурье. Существуют алгоритмы высокого разрешения, которые позволяют выделять сигналы с высокой точностью. Главные преимущества - возможность разделять сигналы с малым отличием по частоте или с большой разницей в мощности. Но можно использовать и для высокоточного определения частот в случаях обычного анализа, как, кажется, у вас. Если интересно, могу посоветовать начать изучение с непараметрических методов: Capon, MUSIC, root MUSIC, т.к. они проще чем параметрические (AR модели и прочие).
Вот пример из матлаба, использующего встроенную функцию (матлаб вы все таки как нибудь поставте, никуда без него)


данные непарметрические методы - функции в матЛабе, я правильно поняла? спасибо, сейчас попробую опять установить это чудо техники.
а в "Математике" нет подобных функций, не подскажите?

Цитата(serjj @ May 8 2015, 10:13) *
Какие стоят ограничения на вычислительную сложность?


моя задача предоставить алгоритм программисту.

посмотрела на счет "Capon, MUSIC, root MUSIC"... непараметрические методы: это, например, периодограмма и метод Уэлча, а MUSIC - использует корреляционную матрицу, а на сколько я понимаю, корреляционная матрица - это параметрический метод. Подправьте меня, если я ошибаюсь.
Ruslan1
Kseniia,
Попробуйте Гаусса (я до alpha = 4.05 доходил, но коэффициент экспериментально под свои данные подбирал) и параболическую интерполяцию по трем максимальным бинам.
Про бины- это те самые вычисленные БПФ магнитуды, по которым Вы приложенную картинку нарисовали.
Вот, в интернете нашел коротко и довольно внятно:
Цитата
Единицу FFT-сетки называют "бин" (bin). Один бин FFT содержит информацию о целом диапазоне частот, ширина которого обратно пропорциональна размеру окна FFT. Таким образом, каждый бин "ответственен" за сразу множество частот.
serjj
Цитата
данные непарметрические методы - функции в матЛабе, я правильно поняла? спасибо, сейчас попробую опять установить это чудо техники.
а в "Математике" нет подобных функций, не подскажите?

В матлабе есть pmusic - это обычный MUSIC алгоритм, который считает псевдоспектр, пример:
Нажмите для просмотра прикрепленного файла
Но он всегда немного врёт rolleyes.gif , см. bias in MUSIC estimation.
Функция, которую я упомянул в примере rootmusic, возвращает амплитуды и частоты сигналов, входящих в смесь. Эта оценка у них делается несмещенной, всё норм. Есть еще класс spectrum, в котором поддержан целый набор различных методов в т.ч. параметрических, но я не разбирался особо, как его запускать, однако хелп может помочь.
"Математикой" не пользовался, не подскажу. Обычный MUSIC или Capon можно самому написать. Там ничего сверхсложного, формулы есть и в хелпе матлаба (можно найти в инете) и в книжках и на вике. Если будете разбираться, пишите, постараюсь помочь. А вот с rootmusic или параметрическими - немного посложнее, чуть побольше теории нужно покурить. Есть фундаментальная литература по теме, например
Нажмите для просмотра прикрепленного файла
Ну и книжка Марпл конечно (большая, выложить могу по запросу).

Цитата
посмотрела на счет "Capon, MUSIC, root MUSIC"... непараметрические методы: это, например, периодограмма и метод Уэлча, а MUSIC - использует корреляционную матрицу, а на сколько я понимаю, корреляционная матрица - это параметрический метод. Подправьте меня, если я ошибаюсь.

Ошибаетесь. MUSIC и root MUSIC это т.н. подпространственные методы, которые основаны на анализе собственных чисел автокорреляционной матрицы процесса. Capon - подвид метода наименьших квадратов, согласно Хайкину. Параметрические методы основаны на оценке параметра предложенной модели, которая апроксимирует ваш случайный процесс. Здесь же модель процесса неизвестна и неважна. Для MUSIC единственным допуском является размерность сигнального подпространства, но его можно вычислить с помощью порогового детектора после нахождения собственных чисел.
Kseniia
Цитата(serjj @ May 8 2015, 10:43) *
В матлабе есть pmusic - это обычный MUSIC алгоритм, который считает псевдоспектр, пример:
Нажмите для просмотра прикрепленного файла
Но он всегда немного врёт rolleyes.gif , см. bias in MUSIC estimation.
Функция, которую я упомянул в примере rootmusic, возвращает амплитуды и частоты сигналов, входящих в смесь. Эта оценка у них делается несмещенной, всё норм. Есть еще класс spectrum, в котором поддержан целый набор различных методов в т.ч. параметрических, но я не разбирался особо, как его запускать, однако хелп может помочь.
"Математикой" не пользовался, не подскажу. Обычный MUSIC или Capon можно самому написать. Там ничего сверхсложного, формулы есть и в хелпе матлаба (можно найти в инете) и в книжках и на вике. Если будете разбираться, пишите, постараюсь помочь. А вот с rootmusic или параметрическими - немного посложнее, чуть побольше теории нужно покурить. Есть фундаментальная литература по теме, например
Нажмите для просмотра прикрепленного файла
Ну и книжка Марпл конечно (большая, выложить могу по запросу).


Ошибаетесь. MUSIC и root MUSIC это т.н. подпространственные методы, которые основаны на анализе собственных чисел автокорреляционной матрицы процесса. Capon - подвид метода наименьших квадратов, согласно Хайкину. Параметрические методы основаны на оценке параметра предложенной модели, которая апроксимирует ваш случайный процесс. Здесь же модель процесса неизвестна и неважна. Для MUSIC единственным допуском является размерность сигнального подпространства, но его можно вычислить с помощью порогового детектора после нахождения собственных чисел.

спасибо! пошла читать матчасть. а книжка Марпл - это что? (я только Агату Кристи знаю... 05.gif )
serjj
Марпл-мл. С.Л. "Цифровой спектральный анализ и его приложения"
книжка (>5Мб)
Kseniia
Цитата(serjj @ May 8 2015, 11:00) *
Марпл-мл. С.Л. "Цифровой спектральный анализ и его приложения"
книжка (>5Мб)

Спасибо!
blackfin
Цитата(Kseniia @ May 8 2015, 08:15) *
Задача: есть DTMF метка, необходимо определить частоты которые передавались, с точностью до 3го знака после запятой. (DTMF - передается сумма двух гармоник, НЧ и ВЧ)

А Вам нужно именно измерить значения этих частот, или достаточно обнаружить их присутствие или отсутствие?
Kseniia
Цитата(blackfin @ May 8 2015, 11:07) *
А Вам нужно именно измерить значения этих частот, или достаточно обнаружить их присутствие или отсутствие?


именно измерить.

немного про DTMF:
в DTMF передается 2 частоты: НЧ и ВЧ, то мало сказать что, например, 941 Гц и 1209 Гц = "*", по стандарту отклонение от передаваемой частоты может составлять 1.8% (то есть при 924.062<НЧ<957.938 Гц и 1187.238<ВЧ<1230.762 Гц примет как "*" - все верно/

Моя задача определить что передавалось, с точностью до 3го знака.
serjj
Цитата
в DTMF передается 2 частоты: НЧ и ВЧ, то мало сказать что, например, 941 Гц и 1209 Гц = "*", по стандарту отклонение от передаваемой частоты может составлять 1.8% (то есть при 924.062<НЧ<957.938 Гц и 1187.238<ВЧ<1230.762 Гц примет как "*" - все верно/


Зачем вам сверхточность в этой задаче? Вам нужно оценить какой случай имел место быть при передаче: НЧ, ВЧ, не НЧ не ВЧ. Для этого достаточно грубой энергетической оценки с помощью узкополосных полосовых фильтров или преобразования Фурье без какой либо пост-обработки. Как я понимаю частоты НЧ и ВЧ разнесены достаточно, чтобы их можно было раздельно принимать. Если вся задача сводится к этому то точный спектральный анализ вам не нужен.

Для сравнения, где это действительно необходимо - точная оценка Допплера в обработке принятых сигналов радара/сонара; выделение тонального сигнала радара в сложной помеховой обстановке и т.д. Там применяется и Фурье с интерполяцией и спектрограммы и алгоритмы высокого разрешения.
Kseniia
Цитата(serjj @ May 8 2015, 13:33) *
Зачем вам сверхточность в этой задаче? Вам нужно оценить какой случай имел место быть при передаче: НЧ, ВЧ, не НЧ не ВЧ. Для этого достаточно грубой энергетической оценки с помощью узкополосных полосовых фильтров или преобразования Фурье без какой либо пост-обработки. Как я понимаю частоты НЧ и ВЧ разнесены достаточно, чтобы их можно было раздельно принимать. Если вся задача сводится к этому то точный спектральный анализ вам не нужен.

Для сравнения, где это действительно необходимо - точная оценка Допплера в обработке принятых сигналов радара/сонара; выделение тонального сигнала радара в сложной помеховой обстановке и т.д. Там применяется и Фурье с интерполяцией и спектрограммы и алгоритмы высокого разрешения.


у меня задача не определить символ, это достаточно легко, и да, разнесены они достаточно, моя задача именно определить ЧТО передавали, мол 940,001 или 942,032 (это к примеру)
serjj
Размер выборки кстати ограничен? Или можно копить до посинения?
_pv
вместо быстрого преобразования, посчитайте обычные интегралы Фурье s=\int{f(x)*sin(x)}; c=\int{f(x)*cos(x)}, на частоте 941 +- пара Гц с мелким шагом в 0.1Гц например чтобы не 3 в десяток-другой точек получился, на результат (s^2+c^2) натяните параболу ax^2+bx+c максимум будет в -b/2a.
ну или то же самое с автокорреляционной функцией можно попробовать.

исходные данные сюда выложить можете?
serjj
Цитата
вместо быстрого преобразования, посчитайте обычные интегралы Фурье s=\int{f(x)*sin(x)}; c=\int{f(x)*cos(x)}, на частоте 941 +- пара Гц с мелким шагом в 0.1Гц например чтобы не 3 в десяток-другой точек получился, на результат (s^2+c^2) натяните параболу ax^2+bx+c максимум будет в -b/2a.
ну или то же самое с автокорреляционной функцией можно попробовать.

Подойдёт если всегда а приори известно в каком узком диапазоне будут лежать интересующие частоты. Если нет, то можно также дополнить выборку нулями и сделать БПФ, получится аналог интерполяции между частотными отсчётами. Но все эти операции размазывают пики. Есть гарантия что при таком подходе не будет ложного выделения пика частоты например в условиях шума? Ведь придётся выделять пик из группы отсчётов с отличием по амплитуде << 3 дБ. Как ни крути а разрешающая способность Фурье (любого, в т.ч. обычного ДПФ) ограничена только размерностью входной выборки и никакие операции и ухищрения её не поднимут. Сверхразрешение же даёт всегда выраженные однозначные пики, но они могут сместиться из-за шума/малого размера выборок/криворукости. Кароче смотреть надо laughing.gif Но до третьего знака после запятой это сильно. Обычно речь идёт о Гц, ну максимум десятых долях Герца. Для таких точностей потребуется большой сигнал-шум и выборки порядка не менее 1е4 отсчётов. Это даже для сверхразрешения. Для Фурье будут нужны миллионы отсчётов.
Alex11
Кроме всего прочего, при Гауссовском окне чтобы использовать параболическую интерполяцию нужно взять логарифм амплитуды, и только его аппроксимировать параболой. И полезно еще ввести весовые коэффициенты пропорциональные амплитуде или ее степени.
Hose
В самом начале рассуждений вы назначили что будет бпф. Почему?
Интереса ради, попробуйте взять интервал для анализа кратный не 2^н, а кратный периоду искомой частоты: результат вас порадует )
Alex11
Это отличный совет, но там две частоты не кратные друг другу, да и, скорее всего, поменять частоту дискретизации в готовом устройстве не удастся.
Kseniia
Цитата(serjj @ May 8 2015, 14:25) *
Размер выборки кстати ограничен? Или можно копить до посинения?

размер выборки ограниченг самим сигналом, DTMF по стандарту идут от 40 мс сам сигнал и от 40 мс пауза между другим сигналом. В реальности же одна метка - 40-50 мс+перерыв 40-50мс.

Цитата(_pv @ May 8 2015, 14:55) *
вместо быстрого преобразования, посчитайте обычные интегралы Фурье s=\int{f(x)*sin(x)}; c=\int{f(x)*cos(x)}, на частоте 941 +- пара Гц с мелким шагом в 0.1Гц например чтобы не 3 в десяток-другой точек получился, на результат (s^2+c^2) натяните параболу ax^2+bx+c максимум будет в -b/2a.
ну или то же самое с автокорреляционной функцией можно попробовать.
исходные данные сюда выложить можете?


исходные данные: Нажмите для просмотра прикрепленного файла , fd=44100 Гц

а на счет обычных интегралов Фурье, непонятно что туда подставлять, если у меня есть только отсчеты, что за f(x) и sin (x), что за x?
я параболическую интерполяцию применила, результат близок к истине, но не истина.

на счет автокоореляционной функции - можно поподробнее?
мне предлагают корреляционную функцию использовать, посчитать Rs=СУМ(sin(2pifn)*s(n), n=0..N и Rc=СУМ(cos(2pifn)*s(n). не непонятно становится, первое, у меня 2 частоты, значит не sin надо брать а сумму двух sin от ВЧ и НЧ. Я посчитала Rs и Rc, далее R=sqr(Rs^2+Rc^2), и ничего у меня не получается, да и не понятно, даже если я найду этот коэф корреляции, как мне это поможет найти искомую частоту? по идее я должна КАК-ТО построить график R от f и f взять близлежащие к искомой частоте, но! в формулах Rs и Rc присутсвует N, а оно определено и опять я кручусь на том, что выборка ограничена.

Цитата(serjj @ May 8 2015, 15:08) *
Подойдёт если всегда а приори известно в каком узком диапазоне будут лежать интересующие частоты. Если нет, то можно также дополнить выборку нулями и сделать БПФ, получится аналог интерполяции между частотными отсчётами. Но все эти операции размазывают пики. Есть гарантия что при таком подходе не будет ложного выделения пика частоты например в условиях шума? Ведь придётся выделять пик из группы отсчётов с отличием по амплитуде << 3 дБ. Как ни крути а разрешающая способность Фурье (любого, в т.ч. обычного ДПФ) ограничена только размерностью входной выборки и никакие операции и ухищрения её не поднимут. Сверхразрешение же даёт всегда выраженные однозначные пики, но они могут сместиться из-за шума/малого размера выборок/криворукости. Кароче смотреть надо laughing.gif Но до третьего знака после запятой это сильно. Обычно речь идёт о Гц, ну максимум десятых долях Герца. Для таких точностей потребуется большой сигнал-шум и выборки порядка не менее 1е4 отсчётов. Это даже для сверхразрешения. Для Фурье будут нужны миллионы отсчётов.


впринципе известно в каком диапазоне лежат частоты, можно вначале определить грубо частоты (по стандарту есть 4 НЧ и 4 ВЧ) и уже после грубого определения начинать ухищряться точность определить.
на счет шума - это следующая задача, помехоустойчивость метода определения частот проверить.

Цитата(Alex11 @ May 8 2015, 18:33) *
Кроме всего прочего, при Гауссовском окне чтобы использовать параболическую интерполяцию нужно взять логарифм амплитуды, и только его аппроксимировать параболой. И полезно еще ввести весовые коэффициенты пропорциональные амплитуде или ее степени.


я делала: рассчет окна, перемножение окна с сигналом, БПФ от получившегося сигнала. и уже параболическая интерполяция. Вы предлагаете взять логарифм от |БПФ| и после этого аппрокимировать? правильно?

Цитата(Hose @ May 9 2015, 18:02) *
В самом начале рассуждений вы назначили что будет бпф. Почему?
Интереса ради, попробуйте взять интервал для анализа кратный не 2^н, а кратный периоду искомой частоты: результат вас порадует )

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

Цитата(Alex11 @ May 8 2015, 18:33) *
Кроме всего прочего, при Гауссовском окне чтобы использовать параболическую интерполяцию нужно взять логарифм амплитуды, и только его аппроксимировать параболой. И полезно еще ввести весовые коэффициенты пропорциональные амплитуде или ее степени.


прологарифмировала, результат порадовал, спасибо.
на сечт коэф, у нас же амплитуда меняется, как я могу пропорционально ей или ее степени выбрать? я поперебирала, и нашла что 0.1 - ближе всего результат дает.
_pv
Цитата(Kseniia @ May 13 2015, 12:22) *
размер выборки ограниченг самим сигналом, DTMF по стандарту идут от 40 мс сам сигнал и от 40 мс пауза между другим сигналом. В реальности же одна метка - 40-50 мс+перерыв 40-50мс.
исходные данные: Нажмите для просмотра прикрепленного файла , fd=44100 Гц

а на счет обычных интегралов Фурье, непонятно что туда подставлять, если у меня есть только отсчеты, что за f(x) и sin (x), что за x?
я параболическую интерполяцию применила, результат близок к истине, но не истина.

на счет автокоореляционной функции - можно поподробнее?

впринципе известно в каком диапазоне лежат частоты, можно вначале определить грубо частоты (по стандарту есть 4 НЧ и 4 ВЧ) и уже после грубого определения начинать ухищряться точность определить.
на счет шума - это следующая задача, помехоустойчивость метода определения частот проверить.

про автокорреляцию это я погорячился, не поможет она тут.
а для фурье выборка пожалуй коротковата чтобы 0.001Гц вытянуть за 40мс.

похоже надо грубо определять частоту через БПФ или как обычно в декодерах герцелем чтобы просто понять какая цифра передаётся и знать частоту +-10Гц, а потом просто подгонять коэффициенты у суммы двух синусов наименьшими квадратами например.
Код
d = Import["d:\\downloads\\dtmf.dat"];
fit = FindFit[d, a0*Sin[2*Pi*f0*t + p0] + a1*Sin[2*Pi*f1*t + p1], {{a0, 1}, {f0, 940}, {p0, 0}, {a1, 1}, {f1, 1200}, {p1, 0}}, t]
{a0 -> 0.305163, f0 -> 941., p0 -> 1.76526*10^-6, a1 -> 0.305164, f1 -> 1209., p1 -> 7.98036*10^-8}

Kseniia
Цитата(_pv @ May 13 2015, 12:50) *
про автокорреляцию это я погорячился, не поможет она тут.
а для фурье выборка пожалуй коротковата чтобы 0.001Гц вытянуть за 40мс.

похоже надо грубо определять частоту через БПФ или как обычно в декодерах герцелем чтобы просто понять какая цифра передаётся и знать частоту +-10Гц, а потом просто подгонять коэффициенты у суммы двух синусов наименьшими квадратами например.
Код
d = Import["d:\\downloads\\dtmf.dat"];
fit = FindFit[d, a0*Sin[2*Pi*f0*t + p0] + a1*Sin[2*Pi*f1*t + p1], {{a0, 1}, {f0, 940}, {p0, 0}, {a1, 1}, {f1, 1200}, {p1, 0}}, t]
{a0 -> 0.305163, f0 -> 941., p0 -> 1.76526*10^-6, a1 -> 0.305164, f1 -> 1209., p1 -> 7.98036*10^-8}


Подскажите, это код на чем? попробовала подобную функцию в математике, не получилось, dat файл создавала так же в математике,а не просто переименованием тхт.
petrov
Цитата(Kseniia @ May 8 2015, 12:26) *
именно измерить.

немного про DTMF:
в DTMF передается 2 частоты: НЧ и ВЧ, то мало сказать что, например, 941 Гц и 1209 Гц = "*", по стандарту отклонение от передаваемой частоты может составлять 1.8% (то есть при 924.062<НЧ<957.938 Гц и 1187.238<ВЧ<1230.762 Гц примет как "*" - все верно/

Моя задача определить что передавалось, с точностью до 3го знака.


А зачем определять точность генератора на соответствие стандарту в режиме коротких посылок? Определяйте в непрерывном режиме, в принципе достаточно частотомером опорный генератор померить.
_pv
я там руками столбец со временем добавил. Чтобы с исходным txt работало надо
Код
d = Import["d:\\downloads\\dtmf.txt", "Data"][[;; , 1]];
d = Transpose[{Table[i/44100, {i, Length[d]}], d}];
fit = FindFit[d, a0*Sin[2*Pi*f0*t + p0] + a1*Sin[2*Pi*f1*t + p1], {{a0, 1}, {f0, 940}, {p0, 0}, {a1, 1}, {f1, 1200}, {p1, 0}}, t]
Kseniia
Цитата(petrov @ May 13 2015, 15:08) *
А зачем определять точность генератора на соответствие стандарту в режиме коротких посылок? Определяйте в непрерывном режиме, в принципе достаточно частотомером опорный генератор померить.


дело в том, что генерируя я для создания алгоритма, а в дальнейшем будут использоваться готовые DTMF метки, созданные другими.
petrov
Цитата(Kseniia @ May 13 2015, 15:32) *
дело в том, что генерируя я для создания алгоритма, а в дальнейшем будут использоваться готовые DTMF метки, созданные другими.


Так ведь обычно нужно просто определить код передаваемый, а соответствие стандарту других генераторов головная боль их разработчиков.
Kseniia
Цитата(_pv @ May 13 2015, 15:14) *
я там руками столбец со временем добавил. Чтобы с исходным txt работало надо
Код
d = Import["d:\\downloads\\dtmf.txt", "Data"][[;; , 1]];
d = Transpose[{Table[i/44100, {i, Length[d]}], d}];
fit = FindFit[d, a0*Sin[2*Pi*f0*t + p0] + a1*Sin[2*Pi*f1*t + p1], {{a0, 1}, {f0, 940}, {p0, 0}, {a1, 1}, {f1, 1200}, {p1, 0}}, t]


спасибо большое, заработало с этим файлом, завтра буду разбираться с другими "подопытными"...


Цитата(petrov @ May 13 2015, 15:41) *
Так ведь обычно нужно просто определить код передаваемый, а соответствие стандарту других генераторов головная боль их разработчиков.


Обычно да, просто определить метку - не проблема, а именно в моем случае задача немного другая.
blackfin
Цитата(Kseniia @ May 8 2015, 12:26) *
именно измерить.

в DTMF передается 2 частоты: НЧ и ВЧ, то мало сказать что, например, 941 Гц и 1209 Гц..

Моя задача определить что передавалось, с точностью до 3го знака.

Касательно "измерить".. и именно "с точностью до 3го знака".

Что как-бы намекает на необходимую точность измерения: 0,001/1209 = 0,8 ppm.

Недавно как раз обсуждали похожий случай:
Цитата(blackfin @ Dec 4 2014, 19:09) *
Да дело даже не в алгоритме вычисления.

Спектр, который мы видим после АЦП, равен произведению АЧХ всего тракта (включая АЦП) на спектр измеряемого сигнала: Sацп(f)=K(f)*Sвх(f).

Но спектр самого входного сигнала Sвх(f) из-за того, что импульс короткий, оказывается достаточно широким ~0,5 МГц и, как следствие, будет иметь достаточно пологий максимум.

Ну и немного классики:
Цитата(fontp @ Dec 14 2009, 12:08) *
Этот вопрос был детально изучен в классической статье
Впервые была дана оценка предельной точности измерений параметров (комплексной) синусоиды и предложен алгоритм их измерения, достигающий этих пределов

Single-Tone parameter estimation from Discret-Time observations

То есть, цифру то получить можно.. и даже "до 3го знака"..

Но вот будет ли эта цифра иметь какое-то отношение к действительности? Сомнительно..

biggrin.gif
petrov
Цитата(blackfin @ May 13 2015, 16:27) *
Ну и немного классики:


Причём это для чистой комплексной синусоиды, а тут фильтры для разделения комплексных тонов друг от друга дадут ошибки и смещения больше 3-го знака, не считая нестабильности опорных генераторов.
GeGeL
Мне показалось, что суть задачи TC - в скрытой идентификации индивидуального брелка по сигналу (предполагается, что каждый брелок генерирует сигналы с небольшим постоянным отклонением от стандарта). Чутье подсказывает, что в описанных условиях это нереально.
Hose
Бпф=быстрое преобразование Фурье
Есть еще просто ПФ, где нет необходимости работать с массивом длинной кратной 2^н.
Kseniia
Цитата(blackfin @ May 13 2015, 16:27) *
Касательно "измерить".. и именно "с точностью до 3го знака".

Но вот будет ли эта цифра иметь какое-то отношение к действительности? Сомнительно..


я согласна, я это и должна проверить в принципе...

Цитата(GeGeL @ May 13 2015, 18:35) *
Мне показалось, что суть задачи TC - в скрытой идентификации индивидуального брелка по сигналу (предполагается, что каждый брелок генерирует сигналы с небольшим постоянным отклонением от стандарта). Чутье подсказывает, что в описанных условиях это нереально.


близко к телу...sm.gif

Цитата(Hose @ May 14 2015, 05:56) *
Бпф=быстрое преобразование Фурье
Есть еще просто ПФ, где нет необходимости работать с массивом длинной кратной 2^н.


да, спасибо, я пока только алгоритм составляю и проверяю, я не программист (пока), в маткаде смотрю, там БПФ только.
GeGeL
Цитата
близко к телу...

Тут есть два варианта развития событий:
- присвоение псевдонимов сторонним брелкам (обучение системы);
- использование кастомных брелков с предустановленными параметрами.

В первом случае задача выглядит малореальной с учетом соотношения ошибок определения частот к заводскому разбросу параметров и их стабильности.
Второй случай выглядит оптимистичнее: кроме частоты, можно манипулировать также и таймингом посылок/пауз, возможно, какими-то еще параметрами, и, в принципе, в совокупности выйти на заданную вероятность ошибки гипотезы, применив статистические модели.

Такие стеганографические закладки, в принципе, не редкость, и успешно работают.
Alex11
Цитата
на сечт коэф, у нас же амплитуда меняется, как я могу пропорционально ей или ее степени выбрать? я поперебирала, и нашла что 0.1 - ближе всего результат дает.

Я имел в виду, что Вы аппроксимируете квадратичной зависимостью результат БПФ. При этом используете что-то типа МНК. В него входят несколько отсчетов около максимума, так вот в МНК нужно для каждого отсчета взять весовой коэффициент, пропорциональный его собственному значению или значению в степени (1.5-2-3). Степень поподбирайте, какая будет лучше для Вашего сигнала.
Fourier
Вам тут уже советовали алгоритм MUSIC. Он дает очень хороший результат по точности. Для него не надо генерировать базисных функций, сетка частот заранее не задана. Процедура БПФ тоже не требуется.
В матлабе функция music возвращает оценку частот. Алгоритм основан на разложении оценки автокорреляционной матрицы на собственные вектора, по-моему есть быстрые алгоритмы. Посмотрите в сторону него.
Так же можно попробовать модернизированный ковариационный метод, который есть так же в матлабе - функция armcov. Она возвращает оценку АР-параметров модели сигнала, чтобы посчитать частоты надо вычислить комплексные корни характеристического полинома построенного по АР-параметрам, а потом посчитать их аргумент. Процедура БПФ так же не требуется, сетка частот не задана. Если у вас две комплексные экспоненты, то этот метод может быть эффективнее, чем БПФ и в плане точности и в плане быстродействия.

Однако, следует помнить, что параметрические методы могут быть неустойчивыми к помехам, с которыми не согласуется выбранная модель сигнала.

Насчет точности измерения. В книге Кея "Kay S.M. Fundamentals of Statistical Signal Processing: Estimation Theory (v.1). Prentice Hall, Upper Sadle River, NJ, 1998. 595 p." на 542 странице есть выражение границы Крамера-Рао для оценки частоты комплексной экспоненты на фоне шума. Попробуйте подставить в формулу Ваши условия, может быть такая точность и теоретически то не достижима)))
serjj
Цитата
Вам тут уже советовали алгоритм MUSIC. Он дает очень хороший результат по точности. Для него не надо генерировать базисных функций, сетка частот заранее не задана. Процедура БПФ тоже не требуется.
В матлабе функция music возвращает оценку частот. Алгоритм основан на разложении оценки автокорреляционной матрицы на собственные вектора, по-моему есть быстрые алгоритмы. Посмотрите в сторону него.
Так же можно попробовать модернизированный ковариационный метод, который есть так же в матлабе - функция armcov. Она возвращает оценку АР-параметров модели сигнала, чтобы посчитать частоты надо вычислить комплексные корни характеристического полинома построенного по АР-параметрам, а потом посчитать их аргумент. Процедура БПФ так же не требуется, сетка частот не задана. Если у вас две комплексные экспоненты, то этот метод может быть эффективнее, чем БПФ и в плане точности и в плане быстродействия.

Однако, следует помнить, что параметрические методы могут быть неустойчивыми к помехам, с которыми не согласуется выбранная модель сигнала.

Насчет точности измерения. В книге Кея "Kay S.M. Fundamentals of Statistical Signal Processing: Estimation Theory (v.1). Prentice Hall, Upper Sadle River, NJ, 1998. 595 p." на 542 странице есть выражение границы Крамера-Рао для оценки частоты комплексной экспоненты на фоне шума. Попробуйте подставить в формулу Ваши условия, может быть такая точность и теоретически то не достижима)))


У меня знакомый копал в свое время в сторону АР-моделей и метода Юли-Уолкера, дают хороший результат для малого количества спектральных компонент, это как раз примеры параметрических методов. Из непараметрических еще ESPRIT можно глянуть. Фурье имеет фундаментальное ограничение в точности, связанное с размером выборки и тут как ни крути, это ограничение никуда не денется. Не знаю, зачем себя ограничивать в данном случае, оговаривая именно примение Фурье. Речь ведь идет не о жестком реальном времени с ограниченными ресурсами.
А книжкой не поделитесь?)
ЗЫ: хорошая идея по поводу Крамера-Рао, как раз с этого и стоило бы начинать дискуссию rolleyes.gif
Fourier
Цитата
А книжкой не поделитесь?)

Книжка
blackfin
Цитата(serjj @ May 15 2015, 23:43) *
.. хорошая идея по поводу Крамера-Рао, как раз с этого и стоило бы начинать дискуссию rolleyes.gif

Так шума нет! Причем тут граница Крамера-Рао? У Kseniia идеальный сферический DTMF в MATLAB'е!

И тем не менее, даже в отсутствии шума оценки частот неверны!

Но они и не будут верны, пока не придет понимание того, что реально существующий спектр суммы двух гармоник умноженных на любое окно ограниченной длительности,
имеет максимумы отнюдь не на тех частотах из которых эта сумма гармоник была сформирована!

Достаточно наглядно это можно увидеть уже просто сложив спектры двух радиоимпульсов имеющих близкие частоты несущих.
При таком сложении максимум в спектре каждого из радиоимпульсов сместится в сторону максимума соседнего радиоимпульса.

Чтобы продемонстрировать это формально, можно воспользоваться разложением спектров обоих радиоимпульсов в ряд вблизи максимума спектра одного из радиоимпульсов.

Разложив эти спектры в ряд в окрестности точки f1 и отбросив все члены ряда Тейлора выше второй степени, находим:

S1(f) = A*(f - f1)2 + C + ...

S2(f) = B*(f - f1) + ...

В этих разложениях предполагается, что спектр S1(f) имеет максимум в точке f1, а спектр S2(f) представлен в точке f1 линейным членом, так как максимум его спектра находится в точке f2.

Сложив оба спектра, находим суммарный спектр вблизи точки экстремума функции S1(f):

Sсум(f) = A*(f - f1)2 + B*(f - f1) + С.

Теперь, чтобы найти максимум функции Sсум(f), мы находим её производную и приравниваем её нулю:

S'сум(f) = 2*A*(f - f1) + B = 0.

Откуда:

fmax = f1 - B/(2*A).

Из этой формулы видно, что каждый из максимумов суммы спектров уже не совпадает с максимумом каждого из спектров по отдельности, он сместился в направлении соседнего максимума.

Поэтому, если частота несущей из которой был получен сигнал DTMF равнялась f1, тем не менее любой спектральный метод оценивания даст в результате смещенную оценку f1±Δf даже и при отсутствии шума вообще.

Точную оценку обеих частот f1 и f2 в этом случае можно получить только лишь зная амплитуды и фазы обеих гармоник из которых был получен сигнал DTMF..
GeGeL
Цитата
Точную оценку обеих частот f1 и f2 в этом случае можно получить только лишь зная амплитуды и фазы обеих гармоник из которых был получен сигнал DTMF.

Итог сильно зависит от конкретной задачи ТС. Возможно, для каждого конкретного брелка соотношение фаз будет постоянным, и ТС не обязательно оценивать f1 и f2 по отдельности для эффективной идентификации брелка. Возможно, есть какие-то статистические модели, позволяющие выполнить поставленную задачу иным способом, чем "в лоб" оценкой каждой из частот до 3-его знака.
В любом случае, измерение частот - не конечная цель в данном случае, эти данные будут передаваться далее на алгоритм принятия решения, например, типа скрытой модели Маркова.
Kseniia
всем спасибо за советы, на счет книги, скачала, буду изучать.

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

имеем сигнал s(x), далее находим составляющие коэф корреляции по синусу и по косинусу, и коэф корреляции, строим график, определяем максимумы, видно, что небольшая погрешность есть, но результат очень близок к истине.
Нажмите для просмотра прикрепленного файла
на счет music в матлабе, то попозже посмотрю, каков там результат будет. и про помехи я не забываю, надо еще проверить будет с реальными сигналами.
serjj
А какие частоты у вас в WavDataS? Там точно 941 и 1209? Если да, то результат на выходе алгоритма имеет значительную погрешность для вашей задачи. Попробуйте сделать шаг fk не в 1 Гц а в 0,1 Гц например. Даст ли это вам выигрыш в точности? И неплохо бы еще подмешать шум в исходный сигнал, проверить работу алгоритма при snr = 60, 50, 40, 30, 20 дБ, например. Или даже с более плотным шагом и построить график СКО от сигнал-шум для выбранного алгоритма. Было бы познавательно и вам и нам, если у вас есть время rolleyes.gif
blackfin
Цитата(Kseniia @ May 18 2015, 10:05) *
..если Вы именно это и советовали, то я пропустила - прошу прощения...

Ну.. я лично, советовал вот это:
Цитата(fontp @ Dec 16 2009, 17:56) *
Если мы знаем, что комплексная синусоида вообще одна на фоне шума - то в ДПФ мы в точности имеем отдискретизированную в спектральной области функцию окна, центрированную на частоте синусоиды.
Поэтому всегда, независимо от того пападает ли частота кратно на бины ДПФ, мы можем увидев эту функцию окна в полученом ДПФ, провести интерполяцию и найти частоту, амплитуду и фазу этой синусоиды.
Причем Райф и Бурстин доказали, что в случае одиночной синусоиды наибольшую точность даёт прямоугольное (т.е. никакое) окно.
Они же предложили проводить интерполяцию посредством добавления нулей в данные и квадратичной интерполяцией в окрестности максимума.

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

Лучший из них не очень давно предложен в работе МакЛеода (не путать с горцем Маклаудом и не размахивать здесь саблей!)

Вы, вероятно, просто не дочитали дискуссию по первой ссылке до конца..

А вообще, эта тема всплывала на форуме неоднократно, и всегда заканчивалась отсылкой к оценке Крамера-Рао, поэтому все эти темы можно найти поиском по форуму: Крамера..
Kseniia
Цитата(serjj @ May 18 2015, 09:24) *
А какие частоты у вас в WavDataS? Там точно 941 и 1209? Если да, то результат на выходе алгоритма имеет значительную погрешность для вашей задачи. Попробуйте сделать шаг fk не в 1 Гц а в 0,1 Гц например. Даст ли это вам выигрыш в точности? И неплохо бы еще подмешать шум в исходный сигнал, проверить работу алгоритма при snr = 60, 50, 40, 30, 20 дБ, например. Или даже с более плотным шагом и построить график СКО от сигнал-шум для выбранного алгоритма. Было бы познавательно и вам и нам, если у вас есть время rolleyes.gif


шаг меняла, от шага зависит только график, а значения Xmax не изменяются.
на счет шума, думаю на этой неделе заняться, так как это и мне интересно...

Цитата(blackfin @ May 18 2015, 09:55) *
Ну.. я лично, советовал вот это:

Вы, вероятно, просто не дочитали всю ту дискуссию до конца..

А вообще, эта тема всплывала на форуме неоднократно, и всегда заканчивалась отсылкой к оценке Крамера-Рао, поэтому все эти темы можно найти поиском по форуму: Крамера..


дело в том, что я читала все до конца, но в силу того, что математическим языком общения я только начала овладевать, то не до конца поняла, что Вы имели ввиду. А где у меня оконные функции? я их не применяла вроде бы... (или применила, но сама этого не поняла? Поясните, если не сложно)

спасибо, поищю и почитаю.
blackfin
Цитата(Kseniia @ May 18 2015, 11:28) *
А где у меня оконные функции? я их не применяла вроде бы... (или применила, но сама этого не поняла? Поясните, если не сложно)

Там же, по ссылке, всё это и объясняли:
Цитата(fontp @ Dec 16 2009, 17:56) *
Не особенно. В этом смысле и дискретный сигнал сильно отличается от непрерывного.
ДПФ (БПФ это реализация ДПФ) - это дискретизация непрерывного физического спектра взятого с функцией окна. Дискретные отсчеты свертки физического спектра с функцией окна в спектральной области.
Если окно не применяется, то вставится прямоугольное окно (спектральные sin(x)/x) помимо нашего желания.

Поэтому каждый отсчет ДПФ для непрерывного спектра формируется суммой от всех частот, но с весом от функции окна. Функция окна быстро затухает по разности частот.
А значит каждый отсчет ДПФ преобразования формируется непрерывным физическим спектром Фурье только от близких частот к данному бину.
Ситуация ничем не отличается от той которая возникнет, если поставить банк узкополостных фильтров на соответствующих бинах ДПФ. Но ДПФ ещё и обладает полезными математическими свойствами.
Спектральное разрешение в этих случаях непрерывного спектра сигнала всегда будет определяться шириной функции окна, которая в спектральной области в соответствии с критерием "неопределённости" Рэлея будет 1/N (или 1/T в размерных единицах).

У Вас, это прямоугольное окно как раз и вставилось в график КФ.

Но для частот расположенных близко друг от друга (то есть, 941 Гц и 1209 Гц), необходимо окно типа Гаусса,

чтобы выполнялось условие: "Функция окна быстро затухает по разности частот."..
serjj
Цитата
я вот какой выход нашла, и без всякого БПФ... если ошибаюсь - подправьте пожауйста, если Вы именно это и советовали, то я пропустила - прошу прощения...
имеем сигнал s(x), далее находим составляющие коэф корреляции по синусу и по косинусу, и коэф корреляции, строим график, определяем максимумы, видно, что небольшая погрешность есть, но результат очень близок к истине.
...
шаг меняла, от шага зависит только график, а значения Xmax не изменяются.

Приведенные вами формулы не что иное как сэмплирование DTFT вашего сигнала. DFT и FFT тоже сэмплированный DTFT только с другими параметрами сэмплирования. Почитать можно например здесь. Если вы будете уменьшать частотный шаг, вы будете получать все больше точек DTFT функции, но разрешающая способность определяется только длиной исходной выборки вашего сигнала. Интерполяция DFT(FFT) в окрестностях максимума для уточнения результата - это восстановление значений функции DTFT в окрестностях этого самого максимума. Так что приведенные формулы корреляций не дадут результата принципиально иного в сравнении с Фурье преобразованием, т.к. математика там абсолютно одинаковая (внимательно сравните ваши формулы с формулировкой преобразования Фурье). Окно у вас действительно прямоугольное, т.к. данные перед преобразованием вы никак не взвешиваете.
Kseniia
Цитата(serjj @ May 18 2015, 11:08) *
Приведенные вами формулы не что иное как сэмплирование DTFT вашего сигнала. DFT и FFT тоже сэмплированный DTFT только с другими параметрами сэмплирования. Почитать можно например здесь. Если вы будете уменьшать частотный шаг, вы будете получать все больше точек DTFT функции, но разрешающая способность определяется только длиной исходной выборки вашего сигнала. Интерполяция DFT(FFT) в окрестностях максимума для уточнения результата - это восстановление значений функции DTFT в окрестностях этого самого максимума. Так что приведенные формулы корреляций не дадут результата принципиально иного в сравнении с Фурье преобразованием, т.к. математика там абсолютно одинаковая (внимательно сравните ваши формулы с формулировкой преобразования Фурье). Окно у вас действительно прямоугольное, т.к. данные перед преобразованием вы никак не взвешиваете.


спасибо, пересчитала с оконной функцией. В данном случае возникает другая проблема. Если я ЗНАЮ какая частоты была при формировании, то я могу подобрать альфа, НО подобранная альфа для одного сигнала - не подходит для другого сигнала (опять же мною сформированного), что уж тогда говорить о сигнале, который я получу извне?

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

на счет окон, близка ли мое предположение к реальности, как думаете?

В DTMF может быть 16 вариантов позиций (от 697 и 1209 до 941 и 1633), если я создам 16 символов, для них подберу лучшую альфа, то можно ли в дальнейшем применить это значение альфа к другим образцам, извне? насколько это может быть полезным? с учетом что у меня, в моем дтмф нет шума, а он, насколько я понимаю, должен быть...
serjj
Цитата
В DTMF может быть 16 вариантов позиций (от 697 и 1209 до 941 и 1633), если я создам 16 символов, для них подберу лучшую альфа, то можно ли в дальнейшем применить это значение альфа к другим образцам, извне? насколько это может быть полезным? с учетом что у меня, в моем дтмф нет шума, а он, насколько я понимаю, должен быть...

Вы разрабатываете алгоритм, у вас должны быть требования по минимальному сигнал-шуму (SNR), по возможным помехам и их уровню к полезному сигналу (SIR). Вы нам пока озвучили только точность и размер выборки. Скажите какие у вас требования по шуму/помехам и любую идею нужно проверять именно в этих условиях иначе всё это теряет смысл. Если вы придумаете сверхточный алгоритм спектрального анализа, который не будет работать в требуемой шумовой/помеховой обстановке, никто у вас его не примет.
blackfin
Цитата(Kseniia @ May 18 2015, 16:10) *
Правильно ли я понимаю, что Гаусса выбираем, так как при окне Гаусса мы имеем наименьшую величину смещения оценки основной частоты напряжения? Но так ведь она зависит от альфа... Поясните пожалуйста.

Окно Гаусса, помимо всего прочего, хорошо ещё и тем, что для случая непрерывного времени и в предположении, что максимумы спектра смещаются незначительно: Δf << f,
можно найти верхнюю оценку для смещения частоты Δf в зависимости от ширины окна причем, чисто аналитически и в явном виде.
Это позволяет выбрать минимально возможную для заданной точности Δf ширину окна (без учета шума, есс-но).

На практике, для окна Гаусса заданного формулой:

g(t) = exp(-t2/T2),

и для взвешенной суммы гармоник заданной формулой:

s(t) = g(t)*[cos(2*pi*f1*t) + cos(2*pi*f2*t)],

получаем верхнюю оценку для смещения частоты Δf = fmax - f1, равную:

Δf = exp(-pi2*(f2 - f1)2*T2)*(f2 - f1).

Для относительного смещения Δf/f1 это дает:

Δf/f1 = exp(-pi2*(f2 - f1)2*T2)*(f2 - f1)/f1.

Для относительного смещения равного Δf/f1 = 10-6, это дает:

Tmin = {1/[pi*(f2 - f1)]} * sqrt(ln[f1/Δf] + ln[(f2 - f1)/f1]), или:

Tmin ~= {1/[pi*(1209 - 941)]} * sqrt(ln[284803]) = {1/[pi*(1209 - 941)]} * 3,544 = 4,21 [мс].
Kseniia
Цитата(serjj @ May 18 2015, 15:50) *
Вы разрабатываете алгоритм, у вас должны быть требования по минимальному сигнал-шуму (SNR), по возможным помехам и их уровню к полезному сигналу (SIR). Вы нам пока озвучили только точность и размер выборки. Скажите какие у вас требования по шуму/помехам и любую идею нужно проверять именно в этих условиях иначе всё это теряет смысл. Если вы придумаете сверхточный алгоритм спектрального анализа, который не будет работать в требуемой шумовой/помеховой обстановке, никто у вас его не примет.


Вы полностью правы, сижу перечитываю форум, в матлабе Ваш код смотрела. у меня возникла проблема, не могу разобраться как в матлабе использовать только один канал при чтении вав файла (левый или правый).
я действительно на "потом" оставила вопрос с "шумом", что неверно. на счет требований к SNR - шум теле/радио канала. Но как правило dtmf-метки немного "приглушены", мы их слышим конечно но они тише, чем основной сигнал.
Опять же, Вы в коде задавали SNR, а мне как быть? поискать стандарты, по идее же SNR должно быть урегулировано, для хороших передачи и приема?

Цитата(blackfin @ May 19 2015, 08:00) *
Окно Гаусса, помимо всего прочего, хорошо ещё и тем, что для случая непрерывного времени и в предположении, что максимумы спектра смещаются незначительно: Δf << f,
можно найти верхнюю оценку для смещения частоты Δf в зависимости от ширины окна причем, чисто аналитически и в явном виде.
Это позволяет выбрать минимально возможную для заданной точности Δf ширину окна (без учета шума, есс-но).

На практике, для окна Гаусса заданного формулой:

g(t) = exp(-t2/T2),

и для взвешенной суммы гармоник заданной формулой:

s(t) = g(t)*[cos(2*pi*f1*t) + cos(2*pi*f2*t)],

получаем верхнюю оценку для смещения частоты Δf = fmax - f1, равную:

Δf = exp(-pi2*(f2 - f1)2*T2)*(f2 - f1). (*)

Для относительного смещения Δf/f1 это дает:

Δf/f1 = exp(-pi2*(f2 - f1)2*T2)*(f2 - f1)/f1.

Для относительного смещения равного Δf/f1 = 10-6, это дает:

Tmin = {1/[pi*(f2 - f1)]} * sqrt(ln[f1/Δf] + ln[(f2 - f1)/f1]), или:

Tmin ~= {1/[pi*(1209 - 941)]} * sqrt(ln[284803]) = {1/[pi*(1209 - 941)]} * 3,544 = 4,21 [мс].


не могу понять, что есть fmax и как получена ф-ла (*)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.