Поиск:

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


Шустрый
*


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

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



Цитата(Kpeved @ 29.2.2012,  22:37)
...Позже выложу файлы с самой записью...
Вот это было бы замечательно, от вашей картинки толку мало smile

Цитата(Pavia @ 1.3.2012,  05:34)
Берем записанные данные, массив А кратные 2^n. Создаешь массив новой длины B
A[0],0, 0, 0, 0,0....,0,A[1],0,0,0,0,..,0,A[2],....
Хмм, и что это даст ?

Цитата(Pavia @ 1.3.2012,  05:34)
Точность повыситься в 16 раз, если надо больше бери больше нулей.
 Точность чего повысится ?

Цитата(Pavia @ 1.3.2012,  05:34)
Обычная передескритезация. Только фильтровать не нужно так как это лишняя операция.
 В данном случае вы предлагаете интерполяцию но зачем? Можно взять частоту дискретизации 44100 Гц и запас будет выше крыши. Pavia, ход вашей мысли не уловил. Если можно разъясните по подробней.

PM ICQ Skype Jabber   Вверх
Kpeved
Дата 1.3.2012, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Pavia, можете объяснить каким образом это может нам помочь ? Мы ведь просто увеличиваем ЧД , и взяв дпф мы просто получаем тот же сигнал только растянутый на большую частоту .
Этот способ сможет помочь при использовании АКФ , но при определении частоты с помощью дпф - только увеличит вычислительную нагрузку.
PM MAIL   Вверх
Pavia
Дата 1.3.2012, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



vedun
Kpeved
С утра времени подумать не хватило. 
Малость ошибся. Интерполировать надо в частотной области. Во временной выражается добавлением нулей к хвосту. Хотя я предпочту вместо нулей сделать так. БПФ как есть, а потом уже поиск максимума и после уже его уточнение через интерполяцию (кубическую).

Это сообщение отредактировал(а) Pavia - 1.3.2012, 15:18
PM MAIL   Вверх
vedun
Дата 1.3.2012, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Pavia @ 1.3.2012,  15:15)
... Хотя я предпочту вместо нулей сделать так. БПФ как есть, а потом уже поиск максимума и после уже его уточнение через интерполяцию (кубическую).
 Собственно я делал тоже самое, только вместо кубической квадратичная интерполяция.
PM ICQ Skype Jabber   Вверх
Kpeved
Дата 1.3.2012, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



vedun, не знаю , подойдет ли тебе вот в таком вот формате - PCM 16 бит ,по 2 байта на значение .Чд 44100 и 8000.  Каждую струну я записывал отдельно по 10с по 2 удара (имеется ввиду извлекал звук из струны )). Они подписаны с 6(самая толстая ) по 1 (самая тонкая) , и ещё все вместе .Просто скинул считанные массивы в .txt файлы , так что никакой кодировки .
 Инструмент- дешёвая электруха , микрофон в 15ти см от струн .

http://dl.dropbox.com/u/29529555/44k-1.rar
PM MAIL   Вверх
vedun
Дата 1.3.2012, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Kpeved @ 1.3.2012,  21:46)
vedunне знаю , подойдет ли тебе вот в таком вот формате...
 Думаю что подойдёт, на выходных попробую, потом отпишу что получилось.
PM ICQ Skype Jabber   Вверх
Kpeved
Дата 1.3.2012, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Да, и совсем забыл сказать . Всего 6 струн , настроены по тюнеру кроме двух , кот-е я немного расстроил ) Если определишь какие - думаю задача решена ) . Строй стандартный , в инете все частоты есть . 
PM MAIL   Вверх
vedun
Дата 2.3.2012, 01:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Kpeved @ 1.3.2012,  21:46)
PCM 16 бит ,по 2 байта на значение .Чд 44100 и 8000.
 Напишите ещё порядок байт, первый байт в файле это младший в слове, второй старший или наоборот? А то по спектрам сложно понять, они на глазок выглядят одинаково. smile И ещё, я правильно догадался что числа со знаком?

Цитата(Kpeved @ 1.3.2012,  21:46)
Строй стандартный
 Мне это вообще ни о чём не говорит. Я посчитаю частоты а вы решайте что там и куда отстроено. smile
PM ICQ Skype Jabber   Вверх
Pavia
Дата 2.3.2012, 05:18 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Kpeved
А wav не судьба было выложить?
PM MAIL   Вверх
Kpeved
Дата 2.3.2012, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Pavia, я думал напрямую с массивом проще работать . Ок , позже wav выложу .

vedun, числа обычные signed short . Да , со знаком - амплитуда ведь и вверх и вниз идет ) 
 Порядок такой - младший , потом старший .
PM MAIL   Вверх
vedun
Дата 2.3.2012, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Померял на файлах с ЧД = 8000 Гц, везде второй импульс.
Там на спектрах стоит лес гармоник, мерял частоту 1-й (она везде почти самого низкого уровня, возможно это завал АЧХ микрофона на низких частотах её давит):
  • 1 - 329,25 Гц
  • 2 - 252,00 Гц
  • 3 - 195,59 Гц
  • 4 - 147,49 Гц
  • 5 - 110,31 Гц
  • 6 - 81,69 Гц
Алгоритм простой, как угол дома. Выделяем импульс, я делал это вручную, можно сделать амплитудный детектор. Берём ДПФ от этого импульса и находим на нём первый максимум. Берём его и 2 окружающих отсчёта. По 3-м точкам строим параболу и находим её максимум. Теперь зная ЧД, номер отсчёта ДПФ и дробную поправку находим положение пика частоты.
В данныхрасчётах я брал длину ДПФ 8192. Каков результат судить вам.

Это сообщение отредактировал(а) vedun - 2.3.2012, 21:14
PM ICQ Skype Jabber   Вверх
Pavia
Дата 3.3.2012, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



vedun
Пока грубо посчитал с точностью до 0.5Гц через  БПФ N=16*1024 отсчёта fd=8000

1 - 328.6 Гц 
2 - 251 Гц 
3 - 194.8 Гц 
4 - 146 Гц
5 -  109.4  Гц
6 - 80 Гц

Что то у нас результаты разнятся на 1 Гц.

Пересчитал более точно через ПФ с шагом 0.1 Гц N=4*16*1024  fd=44100  
1 - 328.5
2 - 251.2
3 - 196.1
4 - 146.5
5 - 109.5
6 - 80.8

Пересчитал более точно через ПФ тс шагом 0.01 Гц N=4*16*1024  fd=44100
1 - 328.53
2 - 251.24
3 - 196.09
4 - 146.55
5 - 109.53
6 - 80.81

Видимо над точностью надо поработать.

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


Шустрый
*


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

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



Цитата(Pavia @ 3.3.2012,  10:52)
Пересчитал более точно через ПФ

А какой вы фильтр использовали?
PM ICQ Skype Jabber   Вверх
Pavia
Дата 3.3.2012, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



vedun
Прямоугольный, по пробовал Ланцоша и Хэмминга разница 0.02 Гц от прямоугольного.
Но видимо из-за упругости струны часта плавает в пределах 1 Гц. Постепенно уменьшаясь. Но у вас всё равно на 1-2 ГЦ больше.

Само ПФ.
И детектирование частоты
Код

function FT(w:Real; N:Integer; a:PAReal):Complex;Overload;
var i:Integer;
N1:Real;
begin
Result.Re:=0;
Result.Im:=0;
N1:=1/N;
for i:=0 to N-1 do
 begin
 Result.Re:=Result.Re+A[i]*Cos(-2*Pi*i*w*N1);
 Result.Im:=Result.Im+A[i]*Sin(-2*Pi*i*w*N1);
 end;
Result.Re:=Result.Re*N1;
Result.Im:=Result.Im*N1;
end;

function DetectF(a:TArrayReal; dwSamplesPerSec:DWord; f1:Real=20; f2:Real=20000):Real;
var i:Integer;
 N:Integer;
 fd:Real;
 z:Complex;
 r,MaxR,f,MaxF:Real;
begin
n:=Length(a);
fd:=dwSamplesPerSec;
f:=f1;
MaxR:=0;
repeat
z:=FT(f/(Fd/N),N,PAReal(@a[0]));
r:=Amp(z);
if r>MaxR then
  begin
  MaxF:=f;
  MaxR:=r;
  end;
f:=f+1;
until f>f2;

f:=MaxF-10;
MaxR:=0;
for i:=0 to 20 do
  begin
  z:=FT(f/(Fd/N),N,PAReal(@a[0]));
  r:=Amp(z);
  if r>MaxR then
    begin
    MaxF:=f;
    MaxR:=r;
    end;
  f:=f+1;
  end;

f:=MaxF-1;
MaxR:=0;
for i:=0 to 20 do
  begin
  z:=FT(f/(Fd/N),N,PAReal(@a[0]));
  r:=Amp(z);
  if r>MaxR then
    begin
    MaxF:=f;
    MaxR:=r;
    end;
  f:=f+0.1;
  end;

f:=MaxF-0.1;
MaxR:=0;
for i:=0 to 20 do
  begin
  z:=FT(f/(Fd/N),N,PAReal(@a[0]));
  r:=Amp(z);
  if r>MaxR then
    begin
    MaxF:=f;
    MaxR:=r;
    end;
  f:=f+0.01;
  end;

result:=MaxF;
end;




Это сообщение отредактировал(а) Pavia - 3.3.2012, 12:37
PM MAIL   Вверх
vedun
Дата 3.3.2012, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Pavia @ 3.3.2012,  12:21)
Прямоугольный, по пробовал Ланцоша и Хэмминга разница 0.02 Гц от прямоугольного.
 Если я правильно понял то ПФ - это полосовой фильтр. Меня интересовало какая у него полоса пропускания и центральная частота. Это FIR или IIR?

Цитата(Pavia @ 3.3.2012,  12:21)
Но видимо из-за упругости струны часта плавает в пределах 1 Гц. Постепенно уменьшаясь. Но у вас всё равно на 1-2 ГЦ больше.
 А что от этого частота может менятся ? Мне казалось что параметры струны влияют только на скорость затухания звука а не на его частоту.


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

maxim1000

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


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

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


 




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


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

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