Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 06.04.2018
Сообщений: 5

Алгоритм Shazam

17.05.2018, 16:20. Показов 1061. Ответов 6

Студворк — интернет-сервис помощи студентам
Всем, кто может помочь, помогите пожалуйста.... Тема такая, не выходит посчитать амплитуду сигнала.. Не знаю в чем ошибка. Может ошибка в комплексных числах..
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
public static void freq() {  // создание частотных характеристик
                 
                 try { 
             
            int chunkSize = 4; // размер скользящего окна 4 кб
              byte audio [] = out.toByteArray();
              int ts = audio.length; // длина аудиопотока
              int ap= ts/chunkSize; // кол-во анализируемых блоков за одну секунду
              Complex [][] results = new Complex[ap][]; // создаем массив 
              FileWriter lg = new FileWriter("lenght",true); // сохр длину аудиопотока
              lg.write("Длина аудиопотока"+ " "+ ts +"\n"); // добавление в файл
                       lg.close();
              FileWriter qn = new FileWriter("quantity",true); // кол-во потоков за одну секнду
             qn.write("Количество блоков"+ " "+ ap +"\n"); // добавление в файл
                       qn.close();
            
                       
                       
             for (int times = 0;times< ap; times++) { // Во внешнем цикле проходим по всем блокам данных и для каждого из них запускаем БПФ-анализ
                  Complex[] x = new Complex[chunkSize];
                  for(int i = 0; i<chunkSize; i++) { // Во внутреннем цикле мы помещаем данные из временной области (образцы звука) в комплексные числа с мнимой частью равной 0.
                      x[i] = new Complex(audio[(times*chunkSize+i)], 0);
                  }
                  
                  results[times] = FFT.fft(x); 
                  
                  
                   }
             for (int i = 0; i<ap; i++) {
                 System.out.println(results[i] +"\n");
             }
                
                int [ ] s = new int [ap];
                     try {
                          for (int t = 0; t < results.length; t++) {
                              for (int j = 0; j < results.length; j++) {
                              double max = 0;
                               for (int freq = 100; freq < 2000 ; freq++) {
                                   // Получим силу сигнала:
                                   double mag = Math.log(results[t][freq].abs() );
                                   if (max< mag) {
                                     max = mag;  
                                   }
                                }
                               s[j] = (int) max;
                               System.out.println(s[j]);
                              }
                          }
                            
                             //Сохраним самое высокое значение силы сигнала и соответствующую частоту:
                    
                     } catch(Exception e) {System.out.println("Ошибка в поиске максимальных амплитуд");}
                          
                     
                 } catch(Exception e) {System.out.println("Ошибка в получении частотных характеристик");}
             }
Класс complex
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
 
public class Complex {
      private final double re;   // the real part
        private final double im;   // the imaginary part
 
        public Complex(double real, double imag)
        {
            re = real;
            im = imag;
        }
 
        public String toString()
        {
            if (im == 0) return re + "";
            if (re == 0) return im + "i";
            if (im <  0) return re + " - " + (-im) + "i";
            return re + " + " + im + "i";
        }
 
        public double abs()   
        { return Math.hypot(re, im); }  // Math.sqrt(re*re + im*im)
        public double phase() 
        { return Math.atan2(im, re); }  // between -pi and pi
 
        public Complex sqrt()
        {
            Complex a = this;             // invoking object
            double r = Math.sqrt(this.abs());
            double theta = this.phase()/2;
            return new Complex(r*Math.cos(theta), r*Math.sin(theta));
        }
 
        public Complex log()
        {
            Complex a = this;             // invoking object
            double x = Math.log(this.abs());
            double y = this.phase();
            return new Complex(x, y);
        }
 
        public Complex plus(Complex b)
        {
            Complex a = this;
            double real = a.re + b.re;
            double imag = a.im + b.im;
            return new Complex(real, imag);
        }
 
        public Complex minus(Complex b)
        {
            Complex a = this;
            double real = a.re - b.re;
            double imag = a.im - b.im;
            return new Complex(real, imag);
        }
 
        public Complex times(Complex b)
        {
            Complex a = this;
            double real = a.re * b.re - a.im * b.im;
            double imag = a.re * b.im + a.im * b.re;
            return new Complex(real, imag);
        }
 
        public Complex times(double alpha)
        {  return new Complex(alpha * re, alpha * im); }
 
        public Complex conjugate() {  return new Complex(re, -im); }
 
        public Complex reciprocal()
        {
            double scale = re*re + im*im;
            return new Complex(re / scale, -im / scale);
        }
 
        public double re() { return re; }
        public double im() { return im; }
 
        public Complex divides(Complex b)
        {
            Complex a = this;
            return a.times(b.reciprocal());
        }
 
        public Complex exp()
        {  return new Complex(Math.exp(re) * Math.cos(im), 
                              Math.exp(re) * Math.sin(im));  }
 
        public Complex sin()
        {  return new Complex(Math.sin(re) * Math.cosh(im), 
                              Math.cos(re) * Math.sinh(im)); }
 
        public Complex cos()
        {  return new Complex(Math.cos(re) * Math.cosh(im), 
                             -Math.sin(re) * Math.sinh(im)); }
 
        public Complex tan()
        { return sin().divides(cos()); }
 
        public static Complex plus(Complex a, Complex b)
        {
            double real = a.re + b.re;
            double imag = a.im + b.im;
            Complex sum = new Complex(real, imag);
            return sum;
        }
 
        public static Complex neg(Complex z)
        {
            return new Complex(-z.re(), -z.im());
        }
 
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.05.2018, 16:20
Ответы с готовыми решениями:

Реализация алгоритма shazam
Всем привет! Пишу программу по реализации алгоритма shazam.... При реализации алгоритма БПФ вылазит следующая ошибка: &quot;Cannot create...

Нужен алгоритм поиска пути в этом лабиринте (будь то волновой алгоритм или алгоритм правой/левой руки )
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; void lab () { int s1 = 0; int s2 =...

Волновой алгоритм поиска (Алгоритм A* / Алгоритм А стар)
Хочу разработать алгоритм для решения головоломки с подвижными дисками (перестановочная головоломка). Определение. Перестано́вочные...

6
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
17.05.2018, 17:02
что значит "не выходит"?
0
 Аватар для Aviz__
2755 / 2062 / 509
Регистрация: 17.02.2014
Сообщений: 9,491
17.05.2018, 17:57
butuy, а дебагер, что показывает? он точно покажет в каких числах))
0
0 / 0 / 0
Регистрация: 06.04.2018
Сообщений: 5
20.05.2018, 04:38  [ТС]
Не выходит посчитать амплитудные значения(((.

Добавлено через 45 секунд
А что за "дебагер"? я просто новичок. Не все знаю...
0
 Аватар для Aviz__
2755 / 2062 / 509
Регистрация: 17.02.2014
Сообщений: 9,491
20.05.2018, 08:10
Цитата Сообщение от butuy Посмотреть сообщение
А что за "дебагер"
в гугле набери "методы отладки программ". Как же ты вообще программируешь, если не можешь посмотреть, как работает программа по шагам?!
0
0 / 0 / 0
Регистрация: 06.04.2018
Сообщений: 5
20.05.2018, 14:10  [ТС]
В общем вместо частотных характеристик получается следующее. В ворде скрин.
Вложения
Тип файла: doc results.doc (56.0 Кб, 4 просмотров)
0
 Аватар для Aviz__
2755 / 2062 / 509
Регистрация: 17.02.2014
Сообщений: 9,491
20.05.2018, 14:46
Цитата Сообщение от butuy Посмотреть сообщение
В ворде
зачем, в ворде?!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.05.2018, 14:46
Помогаю со студенческими работами здесь

Линейный алгоритм, Алгоритм с ветвлениями, Циклический алгоритм Линейный алгоритм
Линейный алгоритм, Алгоритм с ветвлениями, Циклический алгоритм Линейный алгоритм 1. Объясни, что будет напечатано программой Program...

Разработать алгоритм методом пошаговой детализации и программу, реализующую этот алгоритм
Расставить строки данной матрицы в порядке возрастания наибольших элементов в строках.

Алгоритм устранения непродуктивных нетерминалов, алгоритм построения недостижимых символов
Задание: найдите лишние нетерминалы в следующей грамматике с начальным нетерминалом S и в соответствии с алгоритмом устранения лишних...

Построить алгоритм Маркова, который ищет НОД (Алгоритм Евклида)
Здравствуйте, ребята, выручайте. Весь инет перерыл, всю голову сломал, но не могу сделать. Суть в чем, надо построить алгорифм Маркова,...

Построить алгоритм ДО и алгоритм ПОКА для вычислений значения функции на отрезке [a,b] с шагом h.
Построить алгоритм ДО и алгоритм ПОКА для вычислений значения функции на отрезке с шагом h. Написать программу: F=3+tgx Мой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в конфигурации КА2. Данные берутся из регистра сведений, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru