Розробка цифрового диктофону

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
РТ
Кафедра:
ЗІ

Інформація про роботу

Рік:
2015
Тип роботи:
Розрахункова робота
Предмет:
Системи запису та відтворення інформації
Група:
ЗІ-32

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” Кафедра ЗІ Розрахункова робота на тему: «Розробка цифрового диктофону» з курсу «Системи запису і відтворення інформації» Варіант № 6 Львів – 2015 Мета роботи – отримати навики проектування та розрахунку основних вузлів цифрових пристроїв для запису і відтворення інформації з використанням сучасної елементної бази. Завдання: Розробити принципову електричну схему цифрового диктофону згідно завдання та навести усі необхідні розрахунки. Скласти специфікацію елементів схеми. Навести всі необхідні розрахунки. Навести АЧХ розрахованого мікрофонного підсилювача + фільтра. Написати на мові MatLab або C функції запису файлу у MMC/SD-карту, на якій встановлена файлова система FAT16. Написати на мові MatLab або C функцію запису файлу у wav-форматі. Написати на мові MatLab або C функцію стиснення аудіосигналу з потрібною степінню компресії. Завдання варіанту Варіант Тип джерела живлення Частота дискретизації, Гц Степінь стиску Час запису без стиску, годин Тип мікрофону Мікрофонний підсилювач + фільтр  6 LIR14500 11025 4 175 MEMS Варіант 2   Розроблення принципової схеми цифрового диктофону 1.1 Оцінка споживаної потужності компонентів цифрового диктофону Знаходимо необхідний об’єм NAND-Flash пам’яті: Об’єм (Гбайт)=110253600175/1073741824=6,5 Гбайт Отже, для побудови диктофону нам достатньо однієї мікросхеми NAND-Flash пам’яті, об’ємом 8 Гбайт. Вибираємо мікросхему K9HCG08U5M (Samsung) з організацією 8Gb x 8. Таблиця 1 Елементи схеми Споживаний струм, мА  Мікроконтролер ≤ 10  MMC/SD карта пам’яті ≤ 100  Мікросхема NAND-Flash пам’яті ≤ 30  Мікрофон ≤ 1  ОП та пасивні елементи ≤ 5  Світлодіоди та органи управління ≤ 10  Кола управління живленням ≤ 5  Всього ≤ 161 мА  Отже кола живлення будуть розраховані на струм навантаження не менше 200 мА. Вибираємо робочу напругу живлення елементів диктофону Таблиця 2 Елементи схеми Напруга живлення, В  Мікроконтролер 2.7-3.6  MMC/SD карта пам’яті 2.7-3.6  Мікросхема NAND-Flash пам’яті 2.7-3.6  Мікрофон 2.0-10.0  ОП 2.7-8.0  Світлодіоди 2.0  Приймаємо робочу напругу VCC = 3.3 В Вибираємо мікросхеми для формування напруг живлення елементів схеми Оскільки батарейка LIR забезпечує напругу в діапазоні 3,5-4,2 В, а робоча напруга схеми 3.3 В то необхідно використати мікросхему Step-Down стабілізатора. Step-Down стабілізатор буде живити цифрові кола та кола управління. Для аналогових кіл будемо використовувати LDO-стабілізатор на вихідну напругу 3.0 В. В якості LDO-стабілізатора використаємо схему LT1790-3.0 з максимальним струмом навантаження 200 мА. При вхідній напрузі 3.3 вольта вихідна напруга такого LDO-стабілізатора рівна 3.0 В.Для Step-Down стабілізатора вибираємо схему LTC3240 . Згідно DataSheet ця мікросхема може віддавати струм ≥ 200 мА при вхідній напрузі 3.5В. Синтез принципової схеми кіл живлення та розрахунок її параметрів На підставі типових схем включення, наведених в DataSheet, синтезуємо принципову схему кіл живлення (Рис. 2). / Рис. 2. Схема принципова кіл живлення Вхідний конденсатор служить для придушення пульсації та електромагнітних завад. Згідно DataSheet конденсатор C3 повинен бути керамічним , з ємністю не менше 1 мкФ та діелектриком типуX7R або X5R. Вибираємо C3= 1 мкФ (SMD-конденсатор, 0805, 10%, 16 В, X5R). Згідно DataSheet вихідний конденсатор Step-Up стабілізатора  повинен бути керамічним з ємністю від 2.2 мкФ до 10 мкФ та діелектриком типуX7R або X5R. Приймемо =4.7 мкФ (SMD-конденсатор, 0805, 10%, 25 В, X7R). Живлення аналогових кіл мікрофону та підсилювача здійснюється від напруги AVCC=3.0 B, яка формується LDO- стабілізатором DA2 . Якщо запис не ведеться, то для зменшення енергоспоживання мікросхема DA2 відключається мікроконтролером, шляхом подачі сигналу логічного нуля на вивід MICEN. В якості вхідного конденсатора  рекомендований керамічний з ємністю 1 мкФ. Приймаємо C4=1 мкФ (SMD- конденсатор , 0805, 10%, 10 В, X7R) . Та C5=1 мкФ (SMD- конденсатор , 0805, 10%, 10 В, X7R). Синтез схеми мікрофонного підсилювача та фільтра Визначаємо необхідний коефіцієнт підсилення схеми. Для цього приймемо, що максимальний рівень звукового тиску SPL (Sound Pressure Level) становить 100 дБ. Знаходимо абсолютне значення звукового тиску: Па При типовій чутливості мікрофону S=-42 дБ , будемо мати напругу  В якості ОП використаємо ОП, які працюють при одно полярній напрузі, мають малі шуми, високий коефіцієнт ослаблення нестабільності живлення та споживають малу потужність: наприклад TLV2252М (Texas Instruments). Оскільки вбудований АЦП мікроконтролера ATmega16 має діапазон перетворення від 0 до AVCC, а сигнал підсилюється відносно середнього рівня AVCC/2, то коефіцієнт підсилення: . Згідно технічних даних мікрофона резистор  повинен бути рівний 200 Ом. Вибираємо резистор = 200 Ом (SMD- резистор, 0805, 5%, 0.125 Вт). Подільник напруги на резисторах  та  формує напругу зміщення рівну AVCC/2=1.5 В.Вибираємо ==100 кОм (SMD-резистори, 0805, 5%, 0.125 Вт). Значення ємності конденсатора  згідно даних становить 100 нФ. Вибираємо конденсатор =100 нФ (SMD-конденсатор, 0805, 10%, 16 В, X7R). Приймемо , що коефіцієнт підсилення першого каскаду  рівний 47 , другого . Коефіцієнт підсилення першого каскаду  , нехай   Приймемо  , тоді  . Вибираємо =10 кОм (SMD- резистор, 0805, 5%, 0.125 Вт) ,  (SMD- резистор, 0805, 5%, 0.125 Вт). Конденсатор  - розв’язуючий , для ослаблення шумів по колам живлення. Вибираємо керамічний конденсатор =0.1 мкФ (SMD-конденсатор, 0805, 10%, 16 В, X7R). Визначимо частоту зрізу фільтра з теорема Котельникова:  Згідно завдання частота дискретизації становить 11025 Гц. Отже Гц Приймемо частоту зрізу дещо меншою, оскільки АЧХ фільтра повільно спадає. Отже Гц Для спрощення розрахунків , покладемо  . Тоді формула для розрахунку частоти зрізу запишеться : Гц Коефіцієнт підсилення другого каскаду становить 2 і визначається за формулою:  Тоді вибираємо = 100 кОм (SMD- резистор, 0805, 1%, 0.125 Вт). = 50 кОм (SMD- резистор, 0805, 1%, 0.125 Вт). Звідси  Вибираємо конденсатори  =330 пФ (SMD- конденсатор, 0805, 10%, 16 В, X7R). / Рис. 3. Схема електрична принципова мікрофонного підсилювача та фільтра Синтез схеми підключення MMC/SD-карти до МК Мікроконтролер ATmega16 містить вбудований SPI-інтерфейс, який можна використати для підключення до MMC/SD-карти пам’яті (Рис. 4). Призначення виводів МК: Вивід PB4 – #CS. Вивід PB5 – MOSI. Вивід PB6 – MISO. Вивід PB7 – CLK. Вибираємо R13-R17=51 кОм (SMD-резистор, 0805, 5%, 0.125 Вт). В якості SD-слоту X1 вибираємо MMC/SD-слот CCM05-5507 (Рис. 5). / Рис. 4. Схема електрична принципова інтерфейсу з MMC/SD-картою пам’яті / Рис. 5. MMC/SD-слот CCM05-5507 Синтез схеми підключення MMC/SD-карти до МК Схема підключення NAND-Flash пам’яті до МК наведена на Рис. 6. Для виводів даних І/О0-І/О7 використаємо порт С мікроконтролера, для підключення керуючих виводів – порт D. Вибираємо R18=R19=51 кОм (SMD-резистор, 0805, 5%, 0.125 Вт). 1.8 Синтез схеми органів управління та індикації та їх підключення до МК. Для індикації наявності живлення використовується світлодіод червоного кольору LED1 підключений до виводу РВ0 мікроконтролера (Рис. 7). У випадку розряду джерела живлення нижче встановленого порогу світлодіод починає блимати. Режим запису відображається світлодіодом зеленого кольору LED2, підключеним до виводу РВ1. Запис без компресії – неперервне світіння, з компресією – блимання з частотою 1 Гц. / Рис. 6. Схема підключення мікросхеми NAND-Flash пам’яті / Рис. 7. Кола індикації диктофону Використаємо світлодіоди з низьким споживанням струму: D1 – SML-311UT (SMD-світлодіод, 0603, IF<10 мА) та D2 – SML-311BT (SMD-світлодіод, 0603, IF<10 мА). Вибираємо R20-R21=470 Ом (SMD-резистор, 0805, 5%, 0.125 Вт). В якості перемикача подачі живлення, включення/виключення запису та вибору режиму запису SW1 візьмемо вертикальний Push Switch типу PB-11D03 (1 А, 30 В) компанії Wealth Metal Factory Ltd // Рис. 8. Зовнішній вигляд та електрична схема Push Switch типу PB-11D03 / Рис. 10.8. Схема органів управління Вибираємо R22 =51 кОм (SMD-резистор, 0805, 5%, 0.125 Вт). Орієнтовна споживна потужність диктофону та час неперервної роботи від заданого джерела живлення. Таблиця 3 Елементи схеми Споживана потужність, Вт  Мікроконтролер 0.036  MMC/SD карта пам’яті 0.36  Мікросхема NAND-Flash пам’яті 0.108  Мікрофон 0.01  ОП та пасивні елементи 0.04  Світлодіоди та органи управління 0.02  Кола управління живленням 0.165  Всього 0.739 Вт  Отже, орієнтовна споживна потужність диктофону буде рівна 0.739 Вт. Визначаємо час неперервної роботи диктофону від джерела живлення LIR14500 9год 12хв. де С=800 мА/год – ємність батарейки типу LIR14500 Специфікації К-ть Позначення Опис Маркування Виробник Корпус Номінал  Резистори   3  1  R3 SMD-резистор, 0805, 5 %, 0,125 Вт  Any  Any  0805  1МОм   4  2  R4, R5 SMD-резистор, 0805, 5 %, 0,125 Вт  Any  Any  0805  200 Ом   5  2  R6, R7 SMD-резистор, 0805, 5 %, 0,125 Вт  Any  Any  0805  100 кОм   6  1  R8 SMD-резистор, 0805, 5 %, 0,125 Вт  Any  Any  0805  230 кОм   7  1  R9 SMD-резистор, 0805, 5 %, 0,125 Вт  Any  Any  0805  50 кОм   8  1  R10, R11 SMD-резистор, 0805, 1 %, 0,125 Вт  Any  Any  0805  100 кОм   9  9 R12-R18, R19, R22 SMD-резистор, 0805, 5 %, 0,125 Вт  Any  Any  0805  51 кОм   10  2  R20, R21 SMD-резистор, 0805, 5 %, 0,125 Вт  Any  Any  0805  470 Ом  Конденсатори   11  2  С1,C3 SMD-конденсатор, 0805, 10%, 16B, X5R  Any  Any  0805  1 мкФ   12  1  С2 SMD-конденсатор, 0805, 10%, 25B, X7R  Any  Any  0805  4,7 мкФ   13  1  С4,C5 SMD-конденсатор, 0805, 10%, 10B, X7R  Any  Any  0805  1 мкФ   14  1  С6 SMD-конденсатор, 0805, 10%, 16B, X7R  Any  Any  0805  1 мкФ   16  2  С9,С14 SMD-конденсатор, 0805, 5%, 50B, NPO  Any  Any  0805  100 нФ   17  1  С10 SMD-конденсатор, 0805, 10%, 25B, X7R  Any  Any  0805  100 нФ   18  2  С12,С13 SMD-конденсатор, 0805, 5%, 25B, X7R  Any  Any  0805  22 пФ  Діоди  19 1 D1 Світлодіод, Red SML-311UT Rohm 0603   20 1 D2 Світлодіод, Blue SML-311BT Rohm 0603   Мікросхеми  21 1 DD1 Мікроконтролер ATmega16L – 8A U Atmel 44-TQFP   22 1 DD2 NAND-Flash пам’ять 8Г8біт K9HCG08 U5M Samsung 48-TSOP   23 1 DA1 Імпульсний стабілізатор Step-Up 3,3B LTC-3240 Linear Technology    24 1 DA2 LDO-стабілізатор 3,0 В LT1790-3.0 Linear Technology SOT-23-5   25 1 DA3 Операційний підсилювач TLV2252IDR Texas Instruments SOIC-8   Решта  26 1 ZQ SMD-кварцовий Резонатор 8,0 Мгц, 22 пФ  Q-8.0-SMU- 22-30/50  Jauch  SMU3  8.0 МГц  27 3 SWI-SW3 Вертикальні Slide-Switch 1P1T  SS-11G05 Wealth Metal Factory Ltd SS-11G05   28 1 X1 MMC/SD-слот CCM05-5507 ITT Industries MMC/SD   АЧХ розрахованого підсилювача + фільтра / Рис. 10. АЧХ мікрофонного підсилювача + фільтра / Лістинги програм Програма запису файлу у MMC/SD-карту, на як й встановлена файлова система FAT16: clear all; % Кількість байт в секторі BytesPerSec = 512; % Буфер для читання/запису даних Buffer = zeros(BytesPerSec, 1); % 1. Переводимо карту в активний режим s = MMC_SD_Init('F:\sd\SD_512.bin'); % 2. Прочитати 0 сектор - VBR % Номер сектора з якого починається VBR VBR_Addr = 0; LBA = 0; [Buffer, c1] = MMC_SD_Read_Sector(s, LBA); % Перевіряємо сигнатуру VBR if (Buffer(511) ~= hex2dec('55') | Buffer(512) ~= hex2dec('AA')) disp('VBR FAT Error'); return; end; % Визначаємо кількість байт в секторі BytesPerSec = Buffer(hex2dec('b') + 1) + 2^8 * Buffer(hex2dec('b') + 2); z = sprintf('Кількість байт в секторі: %d', BytesPerSec); disp(z); % Визначаємо кількість секторів в кластері SecPerClus = Buffer(hex2dec('d') + 1) ; z = sprintf('Кількість секторів в кластері: %d', SecPerClus); disp(z); % Кількість зарезервованих секторів від початку карти RsvdSecCnt = Buffer(hex2dec('e') + 1) + 256 * Buffer(hex2dec('f') + 1); z = sprintf('Кількість зарезервованих секторів від початку карти: %d', RsvdSecCnt); disp(z); % Кількість таблиць FAT NumFATs = Buffer(hex2dec('10') + 1); z = sprintf('Кількість таблиць FAT: %d' , NumFATs); disp(z); % Кількість записів в Root Directory RootEntCnt = Buffer(hex2dec('11') + 1) + 256 * Buffer(hex2dec('12') + 1); z = sprintf('Кількість записів в кореневому каталозі Root Directory: %d', RootEntCnt); disp(z); % Кількість секторів MMC/SD-карти (до 32 MB) TotSec = Buffer(hex2dec('13') + 1) + 256 * Buffer(hex2dec('14') + 1); if TotSec == 0 % MMC/SD-карта > 32 MB TotSec = Buffer(hex2dec('20') + 1) + 256 * Buffer(hex2dec('21') + 1) + 2^16 * Buffer(hex2dec('22') + 1) + 2^24 * Buffer(hex2dec('23') + 1); end; z = sprintf('Загальна кількість секторів MMC/SD-карти: %d', TotSec); disp(z); % Розмір таблиці FAT у секторах SecPerFAT = Buffer(hex2dec('16') + 1) + 256 * Buffer(hex2dec('17') + 1) ; z = sprintf('Розмір таблиці FAT у секторах: %d', SecPerFAT); disp(z); if (Buffer(hex2dec('36') + 1) ~= 'F' & Buffer(hex2dec('37') + 1) ~= 'A' & Buffer(hex2dec('38') + 1) ~= 'T' & Buffer(hex2dec('39') + 1) ~= '1' & Buffer(hex2dec('ЗА') + 1) ~= '6') disp('FAT16 Error'); end; temp = Buffer((hex2dec('36') + 1):(hex2dec('3A') + 1)); z = sprintf('Тип файлової системи: %s', char(temp)); disp(z); % Обчислюємо номер сектору з якого починається таблиця FAT1 та FAT2 FAT_Sect1 = VBR_Addr + RsvdSecCnt; z = sprintf('Перший сектор FAT1: %d', FAT_Sect1); disp(z); if (NumFATs > 1) FAT_Sect2 = FAT_Sect1 + SecPerFAT; z = sprintf('Перший сектор FAT2: %d', FAT_Sect2); disp(z) ; end; % Обчислюємо номер сектору з якого починається кореневий каталог Root Directory RootDir_Sect = VBR_Addr + RsvdSecCnt + SecPerFAT * NumFATs; z = sprintf('Перший сектор Root Directory: %d', RootDir_Sect); disp(z); % Обчислюємо кількість секторів в Root Directory RootDir_SectCnt = RootEntCnt * 32 / BytesPerSec; z = sprintf('Кількість секторів в Root Directory: %d', RootDir_SectCnt); disp(z) ; % Обчислюємо номер сектора початку області даних Data_Sect = VBR_Addr + RsvdSecCnt + SecPerFAT * NumFATs + RootDir_SectCnt; z = sprintf('Номер сектора початку області даних: %d', Data_Sect); disp(z); %//////////////// Шукаємо 1-ий вільний запис в RootDirectory ///////////// ByteCnt = 1; % початк запису в байтах Flag_Free = 0; % прапорець знаходження вільного запису в RootDirectory for jj = 1 : RootDir_SectCnt %від 1-го до останнього сектору RootDirectory Buffer = MMC_SD_Read_Sector(s, RootDir_Sect + jj - 1); %читає поточний сектор for ii = 1 : BytesPerSec/32 % лічильник записів temp = Buffer(ByteCnt); % читає перший байт if (temp == 0 | temp == hex2dec('E5')) z = sprintf('Вільний запис знайдено'); disp(z); Free_Sect_RootDir = RootDir_Sect + jj - 1; z = sprintf('Сектор вільного запису в RootDirectory: %d', Free_Sect_RootDir); disp(z); Free_Num_RootDir = ii; z = sprintf('Номер вільного запису: %d', Free_Num_RootDir); disp(z); Flag_Free = 1; break; end; ByteCnt = ByteCnt + 32; %наступний запис (1 запис--32байти) end; if (Flag_Free == 1) %файл знайдено break; end; ByteCnt = 1; end; if (Flag_Free == 0) z = sprintf('Неможливо записати файл: немає вільної памяті'); disp(z); return; %вихід з програми end; %//////////////// Запишемо ім'я файлу ////////////////////// Entry = Buffer(32*(ii-1) + 1 : 32*(ii-1) + 1 +31); %вільний запис в Root Directory Entry(1) = 'M'; Entry(2) = 'Y'; Entry(3) = 'F'; Entry(4) = 'I'; Entry(5) = 'L'; Entry(6) = 'E'; Entry(7) = '2'; Entry(8) = 32; Entry(9) = 'T'; Entry(10) = 'X'; Entry(11) = 'T'; Entry(12) = 32; Entry(13) = 0; Entry(14) = 150; Entry(15) = 313; Entry(16) = 178; Entry(17) = 84; Entry(18) = 80; Entry(19) = 84; Entry(20) = 80; Entry(21) = 313; Entry(22) = 178; Entry(23) = 10; Entry(24) = 10; Entry(25) = 84; Entry(26) = 80; File_DATA = [65 66 67 68 69 70 71 72 73]; Entry(29) = 9; Entry(30) = 0; Entry(31) = 0; Entry(32) = 0; File_Size = length(File_DATA); Entry_Flag = 1; % показує чи ми вже записали номер першого кластеру for i = 1 : ceil(File_Size / (SecPerClus * BytesPerSec)) %від 1-го до останнього кластеру файлу %/////////////// Шукаємо вільний кластер в таблиці FAT //////////////////// Free_ClusNum = 0; %№ вільного кластеру Flag_Clus = 0; for ii = 1 : SecPerFAT %всі сектори FAT Buffer = MMC_SD_Read_Sector(s, FAT_Sect1 + ii - 1); for jj = 1 : 2 : SecPerFAT * BytesPerSec %всі вказівники в FAT if (Buffer(jj) + 256 * Buffer(jj + 1) == 0) %якщо кластер вільний Flag_Clus = 1; break; end; Free_ClusNum = Free_ClusNum + 1; end; if (Flag_Clus == 1) break; end; end; z = sprintf('1-ий вільний кластер: %d', Free_ClusNum); disp(z); %Записуємо значення вказівника в таблицю FAT Buffer(jj) = 255; %останній кластер файлу Buffer(jj + 1) = 255; wr = MMC_SD_Write_Sector(s, FAT_Sect1 + ii - 1, Buffer); %!!!!!!!!!!!!!!!!!!!!!!!!! if (i > 1) %якщо були попередні кластери з даними файлу Buffer = MMC_SD_Read_Sector(s, FAT_Sect1 + Prev_Sect_FAT - 1); Buffer(Prev_Index_FAT + 1) = fix(Free_ClusNum/256); %Free_ClusNum той, який зараз Buffer(Prev_Index_FAT) = Free_ClusNum - 256 * Buffer(Prev_Index_FAT + 1); wr = MMC_SD_Write_Sector(s, Buffer, FAT_Sect1 + Prev_Sect_FAT - 1); %!!!!!!!!!!!!!!!!!!!!!!!!! end; Prev_Sect_FAT = ii; %попередній сектор з номером вільного кластеру в FAT Prev_Index_FAT = jj; %вказівник на попередній кластер %///////////////////////// Записуємо файл в область даних ///////////////////// File_Sect = Data_Sect + (Free_ClusNum - 2) * SecPerClus; %сектор початку файлу в DATA Region Buffer = zeros(BytesPerSec, 1); if (File_Size <= BytesPerSec) Buffer(1 : File_Size) = File_DATA; %wr = MMC_SD_Write_Sector(s, Buffer, File_Sect - 1); %!!!!!!!!!!!!!!!!!!!!!!!!! wr = MMC_SD_Write_Sector(s, File_Sect, Buffer); %!!!!!!!!!!!!!!!!!!!!!!!!! else iii = 1; for ii = 1 : SecPerClus %ceil(File_Size / BytesPerSec) Buffer = File_DATA(iii : ii * BytesPerSec); wr = MMC_SD_Write_Sector(s, File_Sect, Buffer); %!!!!!!!!!!!!!!!!!!!!!!!!! File_Sect = File_Sect + 1; %наступний сектор iii = iii + ii * BytesPerSec; %початок наступного сектору (в File_DATA) end; end; if (Entry_Flag == 1) %Entry( hex2dec('1A') + 1 ) = Free_ClusNum; %записуємо № першого кластеру файлу в запис RootDirectory ??????? Entry(28) = fix(Free_ClusNum/256); Entry(27) = Free_ClusNum - 256 * Entry(28); %записуємо створений запис в RootDirectory Buffer = MMC_SD_Read_Sector(s, Free_Sect_RootDir); Buffer(32*(Free_Num_RootDir-1) + 1 : 32*(Free_Num_RootDir-1) + 1 +31) = Entry; wr = MMC_SD_Write_Sector(s, Free_Sect_RootDir, Buffer); %!!!!!!!!!!!!!!!!!!!!!!!!! end; Entry_Flag = Entry_Flag + 1; end; fclose(s); РЕЗУЛЬТАТ MMC/SD-card Init Кількість байт в секторі: 512 Кількість секторів в кластері: 16 Кількість зарезервованих секторів від початку карти: 4 Кількість таблиць FAT: 2 Кількість записів в кореневому каталозі Root Directory: 512 Загальна кількість секторів MMC/SD-карти: 1006359 Розмір таблиці FAT у секторах: 246 Тип файлової системи: FAT16 Перший сектор FAT1 4 Перший сектор FAT2: 250 Перший сектор Root Directory: 496 Кількість секторів в Root Directory: 32 Номер сектора початку області даних: 528 Вільний запис знайдено Сектор вільного запису в RootDirectory: 497 Номер вільного запису: 15 1-ий вільний кластер: 61 Write Sector Number 4 Write Sector Number 1472 Write Sector Number 497   Програма запису файлу у wav-формат : clear all; fp=fopen('MYFILE2.txt','r'); [y,count]=fread(fp); %потрібно задати y – масив даних, які записуємо %відкрити файл для запису d = fopen('F:\sd\myRecord1.wav','wb'); %заповнити поле RIFF_ID (Заголовок RIFF файлу) !!!!!!!!! fwrite(d,hex2dec('46464952'),'int32'); %заповнити поле FILE_Length (довжина файлу без полів RIFF_ID та FILE_Length) fwrite(d,110457,'int32'); %заповнити поле WAVE_ID (заголовок блоку інформації) !!!!!!!!! fwrite(d,hex2dec('45564157'),'int32'); %заповнити поле FMT_ID (ідентифікатор формату) !!!!!!!!! fwrite(d,hex2dec('20746D66'),'int32'); %заповнити поле FMT_Length (сумарний розмір в байтах полів Type, Channels, SamplesPerSec, AvgBytesPerSec, Align та BitsPerSample) fwrite(d,16,'int32'); %заповнити поле Type (тип звукових даних (тип кодеку), 0x0001 — просто вибірки) fwrite(d,1,'int16'); %заповнити поле Channels (число каналів) fwrite(d,1,'int16'); %заповнити поле SamplesPerSec (частота дискретизації в герцах 11025) fwrite(d,11025,'int32'); %заповнити поле AvgBytesPerSec (розмір буферу, обчислюється за формулою (Channels * SamplesPerSec * BitsPerSample) / 8) fwrite(d,11025,'int32'); %заповнити поле Align (вирівнювання (якщо кількість вибірок не кратна 2, в кінці файлу додається нульове значення). Переважно рівне 0x0001) fwrite(d,1,'int16'); %заповнити поле BitsPerSample (кількість біт на вибірку) fwrite(d,8,'int16'); %заповнити поле DATA_ID (заголовок даних) !!!!!!!!! fwrite(d,hex2dec('61746164'),'int32'); %заповнити поле DATA_Length (кількість вибірок) fwrite(d,length(y),'int32'); %вибірки сигналу for ii = 1 : length(y); fwrite(d,y(ii)*128 + 128,'uchar'); end; fclose(d);   Програма стиснення аудіосигналу з потрібною степінню компресї: [Y, F, B]=wavread('F:\sd\myRecord1.wav'); %Y – нестиснений аудіосигнал F B %wavplay(Y,F,'sync'); Y = Y * 128; % Y -- дробове; треба, щоб було ціле (Y*128) N = 160; % розмір блоку L = 50; % к-сть збережених коефіцієнтів ДКП на блок %***вибираємо так, щоб забезпечити необхідний степінь стиснення*** nn = fix(length(Y)/N); % к-сть блоків mm = 1; kk = 1; % Компресія for ii = 1 : nn-1 x = dct( Y(kk : kk + N-1) ); y(mm : mm + L-1) = x(1 : L); % В y записуємо лише "великі" відліки mm = mm + L; kk = kk + N; end; % Квантування y = round(y); % До цілого [A, X] = hist(y, min(y) : max(y)); NN = length(y); Ls = 0; for ii = 1 : length(A) if(A(ii) > 0) Ls = Ls + (A(ii)/NN) * log2(A(ii)/NN); end; end; disp('-Ls = '); -Ls Hf=(10/-Ls) CR2 = (10 / -Ls) * (N / L) % CR2 -- cтепінь стиснення % 10, бо 9 біт на число (тут 3хх), і один на знак (-) Висновок: В системах захисту широко використовуються прилади призначені для запису та відтворення інформації. Важливою складовою є акустична інформація як така і технічні пристрої призначені для її збору, зберігання та відтворення. На прикладі цифрового диктофону, я отримав основні навички розробки пристроїв що можуть
Антиботан аватар за замовчуванням

29.03.2016 08:03-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!