Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как определить точную частоту звукового сигнала, какой алгоритм лучше использовать ? 
:(
    Опции темы
Santik
Дата 13.3.2012, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 13.3.2012
Где: Мирный (Якутия)

Репутация: нет
Всего: нет



Цитата(vedun @ 13.3.2012,  22:56)
Несколько раз наблюдал эфект "затягивания" частоты в полосовых фильтрах при прохождении через них радио импульсов. Если частота импульса не совпадает с центральной частотой фильтра то во время переходного процесса частота импульса немного смещается, это хорошо видно на фазовой плоскости. 

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

Основной алгоритм был как у      Pavia                    , но процедура нахождения максимума по частоте - итерационная (кстати, с помощью параболы  smile )

Это сообщение отредактировал(а) Santik - 14.3.2012, 00:15
PM MAIL   Вверх
Santik
Дата 14.3.2012, 01:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 13.3.2012
Где: Мирный (Якутия)

Репутация: нет
Всего: нет



Kpeved,
А если вернуться к основной задаче...
Если я, зажав на 3 ладу, 5 струну ударю, что я должен получить с учётом всех гармоник? 
Аккорд До- мажор! То есть До будет само собой , какая то из гармоник - Ми и Соль
А уж если взять аккорд До-мажор - мне даже трудно представить. Хотя надо посчитать - может всё не так страшно...
Для полифонии всё-таки надо взаимную корреляцию.
Через FFT это просто. Делаешь FFT  своих данных, FFT  эталона (хотя эталоны уже могут храниться в виде FFT ) - умножаешь и делаешь обратное FFT (получишь функцию взаимной корреляции).
Может какую-то итерационную процедуру можно придумать для более быстрого выбора эталона.
Эталоны можно эмулировать. 
Я бы на твоём месте просто вычислил sin( До )+sin( Ми )+sin( Соль ) и нашел ФВК с записанными аккордами. На записи с До- мажор должен быть максимум ФВК.

Это сообщение отредактировал(а) Santik - 14.3.2012, 08:42
PM MAIL   Вверх
Pavia
Дата 14.3.2012, 05:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 6.12.2008

Репутация: 11
Всего: 12



Santik
Да напутал с частотой дескритизации. Вот правильные. 
2606,337;
2606,338;
2606,338;
2606,338;
2606,338;
2606,338;
2606,339;
2606,339;
2606,339;
2606,339;
2606,339;
2606,340;
2606,340;
2606,340;
2606,340;
2606,340;
2606,340;
2606,340;
2606,340;
2606,340;
2606,340;
2606,341;
2606,341;
2606,347;
2606,322;
 
PM MAIL   Вверх
Santik
Дата 14.3.2012, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 13.3.2012
Где: Мирный (Якутия)

Репутация: нет
Всего: нет



Pavia ,Ну вот это уже другое дело! Хотел свою программу восстановить для сравнения, но наверное не получится.  10 лет прошло. Она ещё на Паскале писана.  Паскаля у меня нет давно, я только текст с трудом в Блокноте смог прочитать. Да и смысла теперь особого не вижу.
Единственное могу сказать, что выигрышь по сравнению с другими методами получился только при большых шумах. Мой магнитометр заработал в помещении!!! И чувствовал проезжающие по трассе "Жигули" (расстояние около 100 метров)! А так тяжелый алгоритм. У меня тогда только Р-133 был. smile 
PM MAIL   Вверх
Pavia
Дата 14.3.2012, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 6.12.2008

Репутация: 11
Всего: 12



Santik
Ради интереса померил путем подсчёта перехода через 0. Точность на порядок грубее.

Цитата(Santik @  14.3.2012,  09:34 Найти цитируемый пост)
А так тяжелый алгоритм. 

Можно ускорить.

Это сообщение отредактировал(а) Pavia - 14.3.2012, 09:55
PM MAIL   Вверх
Santik
Дата 14.3.2012, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 13.3.2012
Где: Мирный (Якутия)

Репутация: нет
Всего: нет



Конечно грубее при такой частоте дискретизации  smile 
В реальном магнитометре - 1 бит , но время очень точно считают.
PM MAIL   Вверх
Santik
Дата 14.3.2012, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 13.3.2012
Где: Мирный (Якутия)

Репутация: нет
Всего: нет



Посмотрел спектр сигнала (1-ая стуна 44кГц). В некотором шоке. Вообще-то надо струну "дёргать" надо было автору  на 12 ладу... Но от этого пока интерес к задаче не потерялся. 
Смысл: "Кто нам мешает - тот нам поможет!"  (С)
Кто мешает для расчёта использовать гармоники? 

Это сообщение отредактировал(а) Santik - 14.3.2012, 22:25
PM MAIL   Вверх
Kpeved
Дата 14.3.2012, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 26.2.2012

Репутация: нет
Всего: нет



Santik, если мы зажмем на 3м ладу 5ую струну то мы получим .. мм.. С - то есть До . Ноту До - не До мажор. Если ударить 5 струн и зажать С -аккорд то тогда мы его получим . Разобрать такой аккорд не зная что за он - нереально (мозг то умеет , а вот с фурье врятли ))- ноты имеют свойство иметь двойную или тройную частоту какой нибудь совершенно другой ноты - эта же совершенно другая имеет свойство н-ых гармоник и т.д , поэтому и возникает путанница . 
Не думаю что взаимная корелляция подойдет . Даже если мы и будем брать взаимную корреляцию с какой то забитой частотой , то определить частоту мы никак не сможем в силу того что частота у гитары не постоянная , к тому же минимальное отклонение и все идет на смарку - а нам ведь как раз нужно определить отклонение частоты , чего мы не сможем сделать.

Да билн .. Вы тут точности считаете до тысячных . Достаточно 10х ).  Частота струн гитары плавает - думаю обычное явление - дерево вибрирует + другие струны + ещё хз что .Это ведь не генератор сигналов . 
Начет алгоритма Pavia - очень медленный . На слабенькой машинке считает 2000 знач с частотой +-2 Гц (первый проход по 0.5 гц , второй +-0.5 по 0.1 Гц ) пол секунды .  Тут и речи не может быть о мульти где 6 раз нужно пики считать ..
PM MAIL   Вверх
Pavia
Дата 15.3.2012, 08:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 6.12.2008

Репутация: 11
Всего: 12



Kpeved
Ускорить в 100 раз это не проблема.
PM MAIL   Вверх
Santik
Дата 15.3.2012, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 13.3.2012
Где: Мирный (Якутия)

Репутация: нет
Всего: нет



Цитата(Kpeved @ 14.3.2012,  23:57)
 если мы зажмем на 3м ладу 5ую струну то мы получим .. мм.. С - то есть До . Ноту До - не До мажор. Если ударить 5 струн и зажать С -аккорд то тогда мы его получим . 

Вот возьми и сам посчитай штук 11 гармоник от ноты С !!!
Увидишь там и Е  и G !!!       А это уже - аккорд  smile 
PM MAIL   Вверх
Kpeved
Дата 15.3.2012, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 26.2.2012

Репутация: нет
Всего: нет



Santik, интересная особенность  ). 5ую я нашёл точно (G ) , а вот 3ая немного не строит на 5Гц . 
Получается в мажоре выходит немного больше этой частоты , а в миноре немного меньше )

Pavia, и как это можно сделать не потеряв точность ?
PM MAIL   Вверх
Santik
Дата 15.3.2012, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 13.3.2012
Где: Мирный (Якутия)

Репутация: нет
Всего: нет



"Кто нам мешает - тот нам поможет!"  (С)
 Сделал взаимную корреляцию сигнала не с чистым синусом, а со смесью гармоник.
Результаты положительные!


Это сообщение отредактировал(а) Santik - 15.3.2012, 17:05
PM MAIL   Вверх
Santik
Дата 15.3.2012, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 13.3.2012
Где: Мирный (Якутия)

Репутация: нет
Всего: нет



Вот ещё добавление. 
Интересно, что при изменении начала записи существенного изменения частоты не обнаружил!
Скачком изменилась частота на 0.2 Гц .   Как будто 2 конкурирующих процесса существуют....
Амплитудная модуляция??? Но тогда 3 частоты должно быть... Не понятно... smile 
Подробности в файле (лист "Задержка")

Это сообщение отредактировал(а) Santik - 15.3.2012, 22:38

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  1004_2.xlsx 44,19 Kb
PM MAIL   Вверх
Santik
Дата 17.3.2012, 08:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 13.3.2012
Где: Мирный (Якутия)

Репутация: нет
Всего: нет



Проблема быстродействия существует. Кто-то обещал в 100 раз увеличить?
Я пока двигаюсь в сторону FFT:

Код

integer*4 function GSM19(Wav_name)
use msfwina
use IMSL
USE DFWIN

Type(T_COORD) wpos
character*100    Wav_name
integer*4 i,j,k,N,Ng
double complex , dimension (400000) :: X,FX, X1
real*8  N1,xr,xi,f0,f10,Fd,wt,eR,ey
integer*2 , dimension (400000) :: Vib1
Real*8 , dimension (40) :: A
integer*2 xxx
double complex  ez

OPEN (8, FILE = '44k-1.txt'C, ACTION='READ',FORM='UNFORMATTED', ACCESS = 'DIRECT',RECL=2)
OPEN (7, FILE = '1004.txt'C, ACCESS = 'SEQUENTIAL' , STATUS = 'REPLACE')

Fd=44100  !частота дискретизации
N=44100*1 !                44100 - 1 секунда
N1=1./N

do  i=1, N !  Cчитываем данные 
read(8,REC=i+44100+12900+30000 )xxx            !+44100+12900+30000
Vib1(i)=(xxx)
er=real(Vib1(i))
X(i)= cmplx(er,0.0)
end do

go to 200            ! Обход тест-сигнала
do  i=1, N 
er=2*3.1415926*328.5*(i-1)/Fd
er = sin(er)
X(i)= cmplx(er,0.0)
end do
200 continue

    call DFFTCF(N,X,FX)  ! БПФ

f0= 328.0     !центральная частота
 Ng=7    ! Число гармоник

do 100 k=1,80

f10= f0 + (k-40)/40.   ! Расстройка частоты +- 
do i=1,N            !Формируем сигнал с гармониками
wt=2*3.1415926*f10*(i-1)/Fd
xr=0.
xi=0.
    do j=1,Ng  
    xr= xr + cos(j*wt)  ! *A(j)
    xi= xi + sin(j*wt)
    end do 
X(i)= cmplx(xr,xi)
end do

    call DFFTCF(N,X,X1)                !БПФ

do i=1,N
X(i)= X1(i)*DCONJG(FX(i))    !  DCONJG  - комплексное сопряжение
end do

    call DFFTCB(N,X,X1)  !  в Re(X1) - взаимная корреляция
    er=CDABS(X1(1))*N1*N1

     write(7,1032) f10, er
1032 format(F10.4,E14.6)

100 continue

    close(7)
    close(8)
gsm19=N
  ret = MessageBox (hwndDlg,'END!', "ВНИМАНИЕ!"C, MB_OK) 
return
end



Проблема в том, что каждый раз приходится FFT считать для суммы синусов и косинусов.
Как это сделать без FFT???

В файле - результаты расчёта интегралом и FFT.

Это сообщение отредактировал(а) Santik - 17.3.2012, 08:48

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  1006.xlsx 46,94 Kb
PM MAIL   Вверх
Pavia
Дата 17.3.2012, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 6.12.2008

Репутация: 11
Всего: 12



Santik
Цитата

Как это сделать без FFT???

Построить можно, но много не выиграешь N*ng против N*log(N)
А вот если ng=1. То там FFT можно вынести из цикла.  Правда потребует переделки FFT. 


PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0822 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.