2010-10-06 4 views
0

У меня есть два закодированных файла G729, я взял их версию pcm. Я хочу измерить сходство между этими двумя файлами. эти файлы являются двоичными файлами, поэтому, как можно измерить сходство между двоичными файлами, я написал код на C, который берет шаблоны из первого и ищет похожие во втором, но я хочу иметь меру подобия ... Я много искал в литературе, я нашел jaccard и других, но все еще не могу отбросить, кто из них имеет право на мое дело. Заранее благодарим за помощь.Измерение сходства между двумя двоичными файлами?

+0

http://en.wikipedia.org/wiki/Acoustic_fingerprint –

+0

Как именно вы хотите количественно «аналогично»? Вы хотите абсолютную разницу для каждого образца? Значение R^2 для регрессии наименьших квадратов? Какие два файла? – JoshD

+0

Я хочу найти соотношение, которое определяет, насколько эти два файла похожи друг на друга ... два файла - это выход из кодека G729 ... мы можем принимать кадры из 20 байтов из каждого файла и измерять сходство между этими двумя струны и взять среднее в конце ... достаточно? – Dobs

ответ

2

Поскольку вы упоминаете, что файлы являются аудиофайлами, было бы лучше определить меру подобия, основанную на характеристиках звука, а не просто выполнять двоичное сравнение. Быстрый поиск привел к исследовательскому проекту под названием MusicMiner, который может потребоваться для изучения дальнейших идей.

+0

Прежде всего, спасибо за ваше обращение ... Я пытаюсь сделать creptanalysis на уровне открытого текста ... я имею в виду на двоичном уровне..и хочу сравнить выход кодера ... спасибо – Dobs

0

Я была такая же потребность, и я пришел к решению, что в моем случае работа, но я не могу гарантировать работу она универсальна:

я взял библиотеку, который создает файлы различий. С учетом fileA и fileB в этой библиотеке создается третий файл fileDiff, в котором рассказывается, как передать файл fileA в файл B, какие байты копировать и что добавить. (Для получения дополнительной информации о формате: http://www.w3.org/TR/NOTE-gdiff-19970901.html)

с функцией Я получаю процент. Я знаю, что это не 100% реальный, например, если у есть файлB, равный половине файлаA, то подобие функции составляет 100%.

Это реализация DiffWriter:

public class Distance implements DiffWriter { 

    private long newData = 0; 
    private long copiedData = 0; 

    @Override 
    public void flush() throws IOException {} 

    @Override 
    public void close() throws IOException {} 

    @Override 
    public void addData(byte arg0) throws IOException { 
     newData++; 
    } 

    @Override 
    public void addCopy(long arg0, int arg1) throws IOException { 
     copiedData += arg1; 
    } 

    public double getSimilarity() { 

     double a = (double) newData; 
     double c = (double) copiedData; 

     return ((c/(c + a)) * 100.0); 

    } 

} 

Вот как я это называю:

import com.nothome.delta.Delta; 

    File f1 = new File(...); 
    File f2 = new File(...); 

      Distance dw = new Distance(); 

    try { 
     new Delta().compute(f1, f2, dw); 

     dw.getSimilarity(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
Смежные вопросы