Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
1 / 1 / 0
Регистрация: 30.03.2013
Сообщений: 28

Дельта модуляция

30.03.2013, 22:26. Показов 1838. Ответов 2
Метки нет (Все метки)

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

C++ (Qt)
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
#include <stdio.h>
#include <tchar.h>
#include <conio.h>
#include <math.h>
#include <stdint.h>
 
// Структура, описывающая заголовок WAV файла.
struct WAVHEADER
{
    // WAV-формат начинается с RIFF-заголовка:
 
    // Содержит символы "RIFF" в ASCII кодировке
    // (0x52494646 в big-endian представлении)
    char chunkId[4];
 
    // 36 + subchunk2Size, или более точно:
    // 4 + (8 + subchunk1Size) + (8 + subchunk2Size)
    // Это оставшийся размер цепочки, начиная с этой позиции.
    // Иначе говоря, это размер файла - 8, то есть,
    // исключены поля chunkId и chunkSize.
    unsigned long chunkSize;
 
    // Содержит символы "WAVE"
    // (0x57415645 в big-endian представлении)
    char format[4];
 
    // Формат "WAVE" состоит из двух подцепочек: "fmt " и "data":
    // Подцепочка "fmt " описывает формат звуковых данных:
    
    // Содержит символы "fmt "
    // (0x666d7420 в big-endian представлении)
    char subchunk1Id[4];
 
    // 16 для формата PCM.
    // Это оставшийся размер подцепочки, начиная с этой позиции.
    unsigned long subchunk1Size;
 
    // Аудио формат, полный список можно получить здесь [url]http://audiocoding.ru/wav_formats.txt[/url]
    // Для PCM = 1 (то есть, Линейное квантование).
    // Значения, отличающиеся от 1, обозначают некоторый формат сжатия.
    unsigned short audioFormat;
 
    // Количество каналов. Моно = 1, Стерео = 2 и т.д.
    unsigned short numChannels;
 
    // Частота дискретизации. 8000 Гц, 44100 Гц и т.д.
    unsigned long sampleRate;
 
    // sampleRate * numChannels * bitsPerSample/8
    unsigned long byteRate;
 
    // numChannels * bitsPerSample/8
    // Количество байт для одного сэмпла, включая все каналы.
    unsigned short blockAlign;
 
    // Так называемая "глубиная" или точность звучания. 8 бит, 16 бит и т.д.
    unsigned short bitsPerSample;
 
    // Подцепочка "data" содержит аудио-данные и их размер.
 
    // Содержит символы "data"
    // (0x64617461 в big-endian представлении)
    char subchunk2Id[4];
 
    // numSamples * numChannels * bitsPerSample/8
    // Количество байт в области данных.
    unsigned long subchunk2Size;
 
    // Далее следуют непосредственно Wav данные.
};
 
int main()
{
    FILE *file, *outfilehead, *outfiledata;
    errno_t err;
    err = fopen_s(&file, "proba.wav","rb");
    if(err)
    {
        printf_s("Fail, File not Found");
        return 0;
    }
 
    outfilehead = fopen("OutHead.txt", "wb");
    outfiledata = fopen("OutData.txt", "wb");
 
    WAVHEADER header;
 
    fread_s(&header, sizeof(WAVHEADER),sizeof(WAVHEADER),1,file);
 
    fwrite(&header, sizeof(WAVHEADER),1,outfilehead);
 
    uint16_t a, b = 0;
    while(!feof(file))
    {
        fscanf(file, "%c", &a);
        if(a >= b)
            fprintf(outfiledata,"%c", 1);
        else 
            fprintf(outfiledata,"%c", 0);
        b = a;
    }
 
    fclose(file);
    fclose(outfiledata);
    fclose(outfilehead);
 
}

и вот декодер....

C++ (Qt)
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
#include <stdio.h>
#include <tchar.h>
#include <conio.h>
#include <math.h>
#include <stdint.h>
 
struct WAVHEADER
{
 
    char chunkId[4];
 
    unsigned long chunkSize;
 
    char format[4];
 
    char subchunk1Id[4];
 
    unsigned long subchunk1Size;
 
    unsigned short audioFormat;
 
    unsigned short numChannels;
 
    unsigned long sampleRate;
 
    unsigned long byteRate;
 
    unsigned short blockAlign;
 
    unsigned short bitsPerSample;
 
    char subchunk2Id[4];
 
    unsigned long subchunk2Size;
 
};
 
int main()
{
    FILE *outdata, *outhead, *out;
    
    errno_t errd, errh;
 
    errd = fopen_s(&outdata, "OutData.txt", "rb");
    errh = fopen_s(&outhead, "OutHead.txt", "rb");
 
    out = fopen("Out.wav", "wb");
 
    if(errd || errh)
    {
        printf("File not found");
        return 0;
    }
 
    WAVHEADER header;
 
    fread_s(&header, sizeof(WAVHEADER),sizeof(WAVHEADER),1,outhead);
    fwrite(&header, sizeof(WAVHEADER),1,out);
 
 
    uint16_t c, d = 0;
    while(!feof(outdata))
    {
        fscanf(outdata,"%c", &c);
        if(c == 1)
            fprintf(out,"%c", d+1);
        else 
            fprintf(out,"%c", d-1);
        d = c;
    }
 
    fclose(out);
    fclose(outdata);
    fclose(outhead);
}
Прошу помочь решить проблему... заранее спасибо
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.03.2013, 22:26
Ответы с готовыми решениями:

В таблице требуется записать дельта от x1 и дельта от x2
Делаю лабу по физике, пошел в лабораторную, сделал измерения , записал в таблицу x1,x2 (повторил 3 раза ) Мне в таблице требуется записать...

Импульсная кодовая модуляция и дифференциальная импульсная кодовая модуляция сигнала
Добрый день, дали задание, создать программу, реализующую преобразование из ИКМ в ДИКМ. С алгоритмом и порядком действий проблем не...

ЧМ-модуляция
Доброго времени суток. Помогите в таком вопросе: нужны всякие книжки и статьи, желательно со схемкаи на тему ЧМ-модуляции/демодуляции. А то...

2
1 / 1 / 0
Регистрация: 30.03.2013
Сообщений: 28
01.04.2013, 22:03  [ТС]
Что ни кто не слышал про дельта модуляцию и ДИКМ?
0
2014 / 1286 / 61
Регистрация: 05.06.2010
Сообщений: 2,213
02.04.2013, 13:42
Цитата Сообщение от monstro Посмотреть сообщение
когда я получаю закодированный файл он по размерам не отличается от исходного, хотя по идее он должен быть меньше так как закодирован
это далеко не всегда так. Есть например огромный раздел в теории кодирования - коды исправляющие ошибки. Так вот там закодированное слово всегда длинее. В Вашем же случае, вы сохраняете в файл разности между сэмплами в байтах. Точнее не сами разницы, а единицы или нули при изменении знака производной. Но ведь вы их записываете байтами а не битами. Поэтому разницы в размере нет. Сами байтовые отсчеты или байты 1 или 0 весят одинаково))
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.04.2013, 13:42
Помогаю со студенческими работами здесь

Модуляция
Надо сделать модуляцию/демодуляцию. ASK-2 или PSK-2. Скиньте пожалуйста хоть какие-то самые простые модели, что-то у меня совсем не...

Модуляция сигнала
Доброго всем времени. Помогите или направте по правильному направлению. Хочу сделать амплитудный модулятор. Есть несущая частотой от...

Квадратурная модуляция
Доброго времени суток. Вот такая задача: нам приходят два отцифрованных сигнала. Для них делается взаимный фазовый спектр, в каждый момент...

АМ или FM модуляция
Всем доброго вечера! Столкнулся с проблемой передачи команд на небольшое расстояние в помещении. Закупил АМ радиомодулей, и...

частотная модуляция
методы получения сигналов частотной модуляции?


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru