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

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

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

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

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

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” Кафедра ЗІ Розрахункова робота на тему: «Розробка цифрового диктофону» з курсу «Системи запису і відтворення інформації» Варіант № 1 Львів – 2011 Мета роботи – отримати навики проектування та розрахунку основних вузлів цифрових пристроїв для запису і відтворення інформації з використанням сучасної елементної бази. Завдання: Розробити принципову електричну схему цифрового диктофону згідно завдання та навести усі необхідні розрахунки. Скласти специфікацію елементів схеми. Навести всі необхідні розрахунки. Навести АЧХ розрахованого мікрофонного підсилювача + фільтра. Написати на мові MatLab або C функції запису файлу у MMC/SD-карту, на якій встановлена файлова система FAT16. Написати на мові MatLab або C функцію запису файлу у wav-форматі. Написати на мові MatLab або C функцію стиснення аудіосигналу з потрібною степінню компресії. Завдання варіанту Варіант Тип джерела живлення Частота дискретизації, Гц Степінь стиску Час запису без стиску, годин Тип мікрофону Мікрофонний підсилювач + фільтр  1 1хАА 8000 4 150 Електрентний Варіант 1   Розроблення принципової схеми цифрового диктофону 1.1 Оцінка споживаної потужності компонентів цифрового диктофону Знаходимо необхідний об’єм NAND-Flash пам’яті: Об’єм (Гбайт)=80003600150/1073741824=4,1 Гбайт Отже, для побудови диктофону нам достатньо однієї мікросхеми NAND-Flash пам’яті, об’ємом 8 Гбайт. З таблиці 7.1 вибираємо мікросхему K9NCG0854M (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 В Вибираємо мікросхеми для формування напруг живлення елементів схеми Оскільки одна батарейка типорозміру АА забезпечує напругу в діапазоні 0,9-1,5 В, а робоча напруга схеми 3.3 В, то необхідно використати мікросхему Step-Up стабілізатора. Step-Up стабілізатор буде живити цифрові кола та кола управління. Для аналогових кіл будемо використовувати LDO-стабілізатор на вихідну напругу 3.0 В. В якості LDO-стабілізатора використаємо схему LP3985-3.0 з максимальним струмом навантаження 150 мА. При вхідній напрузі 3.3 вольта вихідна напруга такого LDO-стабілізатора рівна 3.0 В, тобто спад напруги на регулювальному транзисторі буде рівний 0.3 В. Для Step-Up стабілізатора вибираємо схему TPC61025DRC (Texas Instruments). По DataSheet (Рис. 1) перевіряємо чи зможе ця мікросхема віддавати струм ≥ 200 мА при вхідній напрузі 0,9 В (батарея повністю розряджена). Синтез принципової схеми кіл живлення та розрахунок її параметрів На підставі типових схем включення, наведених в DataSheet, синтезуємо принципову схему кіл живлення (Рис. 2).  Рис. 2. Схема принципова кіл живлення Вхідний конденсатор служить для придушення пульсації та електромагнітних завад. Згідно DataSheet конденсатор С1 повинен бути керамічний, з ємністю не менше 10 мкФ та діелектриком типуX7R або X5R. Вибираємо С1 = 10 мкФ (SDM-конденсатор, 0805, 10%, 16 В, X5R). Детектор розряду батарей сигналізує про те що напруга батареї стала менше певного порогу VTRN, який задається резисторами R1 і R2. Напруга на резисторі R2 рівна напрузі внутрішнього джерела сигналу VR2 = 0.5 В. Значення резистора R2 вибирається таким чином, щоб струм, який протікає через нього був у ≥ 100 разів більше вхідного струму виводу LBI (Low Battery Input). Типовий струм виводу LBI становить ІLBI = 0.01 мкА. ІR2 = 0.01 мкА * 100 = 1 мкА. Знаходимо опір резистора R2:  Вибираємо R2 = 510 кОм (SMD-резистор, 0805, 5%, 0.125 Вт). Задаємо поріг розряду батарей 2.1 В. Тоді  Вибираємо R1=1650 кОм (SMD-резистор, 0805, 5%, 0.125 Вт). Вивід LDO сигналізує про зниження напруги нижче порогу встановленням в 0. Цей вивід є з відкритим колектором, тому його потрібно підключити до напруги живлення через підтягуючий резистор R3. Приймемо R3=1 МОм (SMD-транзистор, 0805, 5%, 0,125 Вт). Струм IL через індуктивність L1 визначається за формулою: , де IOUT - вихідний струм; VOUT – вихідна напруга; VBAT – мінімальна вхідна напруга. Отже  А, Значення індуктивності L1 повинно знаходитися в межах 2.2-22 мкГн. Формула для оцінки номінального значення L1:  де  – пульсації струму, які не повинні перевищувати 20% від середнього значення струму через індуктивність; f – частота переключення (згідно DataSheet fMIN =480 кГц, fTYP = 600 кГц, fMAX = 720 кГц). Отримаємо  мГц Приймемо L1 = 6,8 мкГн. Вибираємо індуктивність B82462G4222M000. Вихідний конденсатор визначає максимальні пульсації вихідної напруги. Пульсації визначаються двома параметрами конденсатора: ємністю та еквівалентним послідовним опором (ESR). Мінімальне значення ємності за умови ESR=0 визначається виразом: , де f – частота переключення; -максимальні дозволені пульсації. Для пульсацій мВ, отримаємо  мкФ. Виберемо конденсатор С3=100 мкФ, з робочою напругою 10 В та ESR=18 мОм типу T520B336M010A(1)E018. Паралельно вмикаємо керамічний конденсатор С2=2.2 мкФ (SMD-конденсатор, 0805, 10%, 25 В, X7R). Додаткові пульсації за рахунок ESR конденсатора С3 будуть становити: мВ. Живлення аналогових кіл мікрофону та підсилювача здійснюється від напруги AVCC=3.0 B, яка формується LDO-стабілізатором DA2. Якщо запис не ведеться, то для зменшення енергоспоживання мікросхема DA2 відключається мікроконтролером, шляхом подачі сигналу логічного нуля на вивід MICEN. В якості вхідного конденсатора С4 рекомендований керамічний з ємністю 1 мкФ.приймаємо С4=1мФ. Згідно рекомендацій DataSheet вибираємо С5=10 мкФ (SMD - конденсатор, 0805, 10%, 10 В, X7R) та С6=1 мкФ (SMD - конденсатор, 0805, 10%, 10 В, X7R). Синтез схеми мікрофонного підсилювача та фільтра Приймемо, що максимальний рівень звукового тиску SPL = 100 дБ. Знаходимо абсолютне значення звукового тиску:  При типовій чутливості мікрофону S=-48 дБ, будемо мати напругу мВ. Оскільки вбудований АЦП мікроконтролера ATmega16 має діапазон перетворення від 0 до AVCC, а сигнал підсилюється відносно середнього рівня AVCC/2, то коефіцієнт підсилення   Згідно технічних даних мікрофона резистор R1 повинен бути 2.2 кОм. Вибираємо резистор R1=2.2 кОм (SMD-резистор, 0805, 5%, 0.125 Вт). Подільник напруги на резисторах R4 та R5 формує напругу зміщення рівну AVCC/2=1.5 В. Вибираємо R4=R5=100 кОм (SMD-резистори, 0805, 5%, 0.125 Вт). Значення ємності конденсатора С2 згідно даних становить 1 мкФ. Вибираємо конденсатор С2=1 мкФ (SMD-конденсатор, 0805, 10%, 16 В, Х7R). Коефіцієнт підсилення рівний:  Вибираємо R2=2,5кОм (SMD-резистор, 0805, 1%, 0.125 Вт). Тоді кОм Вибираємо R3=470kОм (SMD-резистор, 0805, 1%, 0.125 Вт). Визначимо частоту зрізу фільтру з теорема Котельникова:  Згідно завдання частота дискретизації становить 8000 Гц. Отже Гц Приймемо частоту зрізу дещо меншою, оскільки АЧХ фільтра повільно спадає. Отже Гц Частоту зрізу фільтра Fc приймемо дещо меншою Fmax, оскільки АЧХ фільтра Баттерворта досить повільно спадає. Приймемо, що Fc=3500 Гц. Вибираємо С1=0,1 мкФ (SMD-конденсатор, 0805, 10%, 16 В, X7R), С3=10 пФ (SMD-конденсатор, 0805, 10%, 25 В, X7R). Резистор R6 та конденсатор С3 утворюють додатковий RС-фільтр низьких частот, сигнал з виходу якого подається на вхід АЦП. Вибираємо С4=1 мкФ (SMD-конденсатор, 0805, 10%, 16 В, X7R), R6=5 kОм (SMD-резистор, 0805, 1%, 0.125 Вт) Резистор R7 – резистор навантаження, тому R7=1 МОм (SMD-резистор, 0805, 5%, 0.125 Вт) Синтез схеми підключення 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 Вт. Визначаємо час неперервної роботи диктофону від джерела живлення 1АА год. де С=2700 мА/год – ємність однієї батарейки типу АА Специфікації № К-ть Позначення Опис Маркування Виробник Корпус Номікал  Резисторн  1 1 R1 SMD-резистор, 0805, 5%, 0.125 Вт Any Any 0805 2.2 КОм  2 1 R2 SMD-резистор, 0805, 5%, 0.125 Вт Any Any 0805 35 Ом  3 2 RЗ, R4 SMD-резистор, 0805, 5%, 0.125 Вт Any Any 0805 100 KОм  4 2 R5,R6 SMD-резистор, 0805, 5%, 0.125 Вт Any Any 0805 6600 Ом  5 7 R13-R19, R22-R23 SMD-резистор, 0805,5%, 0.125 Вт Any Any 0805 51 КОм  6 2 R20, R21 SMD-резистор, 0805,5%, 0.125 Вт Any Any 0805 470 Ом  Конденсатори  7 8 Cl,С2,С5-С10 SMD-конденсатор, 0805, 10%, 16 В, X5R Any Any 0805 1 мкФ  8 2 C3,С4 SMD-конденсатор, 0805, 10%, 25 В, X7R Any Any 0805 5 нФ  Діоди  9 1 D1 Світлодіод, Red SML-311UT Rohm 0603   10 1 D2 Сбітлодіод, Blue SML-311BT Rohm 0603   Мікросхемн  11 1 DDI Мікроконтролер ATmegal6L-8AU Atmel 44-TQFP   12 1 DD2 NAND-Flash иам'ятъ 2Гх8 6ít K9LAG08U0M Samsung 4S-TSOP   13 1 DAI LDO –стабілізатор 3.0 B LP3985IBP5-3.0 National Semiconductor SOT-23-5   14 1 DA2 LDO –стабілізатор 2.7 B LP3985IBP5-2.7 National Semiconductor SOT-23-5   15 1 DA3 Операційний підсилювач TLV2252IDR Texas Instruments SOIC-S   Решта  16 1 ZQ SMD-кварцовий резонатор 8.0 МГц, 22 пФ Q-8.0-SMU3-22-30/50 Jauch SMU3 8.0 МГц  17 3 SW1-SWJ Вертикальні Slide-Switch 1Р1Т SS-11G05 Wealth Metal Factory Ltd SS-11G05   18 1 XI MMC/SD-слот ССМ05-5507 ITTIndustries MMC/SD   19 1 LI SMD-індуктивність, 20%, 1.65 А B82462G4682M000 Epcos 6.3x6.3x3.0 6.8 икГн   АЧХ розрахованого підсилювача + фільтра  Рис. 10. АЧХ мікрофонного підсилювача + фільтра  Лістинги програм Програма запису файлу у MMC/SD-карту, на як й встановлена файлова система FAT16: clear all; BytesPerSec = 512; Buffer = zeros(BytesPerSec, 1); s = MMC_SD_Init('D:\Розраха СЗВ \Fat\До_5_лаби \SD_512\SD_512.bin');   VBR_Addr = 0; LBA = 0;   [Buffer, cl] = MMC_SD_Read_Sector(s, LBA); if (Buffer(511)  </span>~= hex2dec('55')| Buffer(512)  </span>~= hex2dec('AA'))     disp ('VBR FAT Error1'); 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);   NumFATs = Buffer(hex2dec('10') + 1); z = sprintf ('Кількість таблиць FAT:   %d', NumFATs); disp (z);   RootEntCnt = Buffer(hex2dec('11') + 1) + 256 * Buffer(hex2dec('12') + 1); z = sprintf ('Кількість записів в кореневому каталозіRoot Directory: %d', RootEntCnt); disp(z); TotSec = Buffer(hex2dec('13') + 1) + 256 * Buffer(hex2dec('14') + 1); if TotSec ==0     </span>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);   SecPerFAT = Buffer(hex2dec('16') + 1) + 256 * Buffer(hex2dec('17') + 1); z = sprintf ('Розмір таблиціFAT y ceктоpax: %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('3A')+ 1)~='6')     disp('FAT16 Error'); end; temp = Buffer ((hex2dec('36') + 1):(hex2dec ('3A' + 1))); z = sprintf ('Тип файлової системи: %s', char(temp)); disp (z) ;   FAT_Sect1 = VBR_Addr + RsvdSecCnt; z = sprintf ('Перший сектор FAT1:  %d', FAT_Sect1); disp (z) ;   if   (NumFATs > 1)     </span>FAT_Sect2 = FAT_Sect1 + SecPerFAT;     </span>z = sprintf ('Перший сектор FAT2 :  %d', FAT_Sect2);     disp (z) ; end;   RootDir_Sect = VBR_Addr + RsvdSecCnt + SecPerFAT * NumFATs; z = sprintf ('Перший сектор Root Directory:  %d', RootDir_Sect); disp(z) ;   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   Byte_F = 1;            % початoк запису в байтах Flag = 0;          % прапорець знаходження вільного запису в RootDirectory   for jj = 1 : RootDir_SectCnt        %від 1-го до останнього сектору RootDirectory     [Buffer, cl] = MMC_SD_Read_Sector(s, RootDir_Sect + jj - 1);      %читає поточний сектор       for ii = 1 : BytesPerSec/32              % лічильник записів         </span>temp = Buffer(1);              % читає перший байт             if (temp == 0 | temp == hex2dec('E5'))              </span>z = sprintf('Вільний запис знайдено');             disp(z);                         </span>Free_Sect_RootDir = RootDir_Sect + jj - 1;             </span>z = sprintf('Сектор вільного запису в RootDirectory: %d', Free_Sect_RootDir);             disp(z);                         </span>Free_Num_RootDir = ii;             </span>z = sprintf('Номер вільного запису: %d', Free_Num_RootDir);             disp(z);                         </span>Flag = 1;             break;         end;                 </span>Byte_F = Byte_F + 32;       %наступний запис  (1 запис--32байти)         end;         if (Flag == 1)     %файл знайдено         break;     end;        </span>Byte_F = 1;   end;   if (Flag == 0)     </span>z = sprintf('Неможливо записати файл: нема вільної памят ');     disp(z);     return;     %вихід з програми end;   Our_File = zeros(512,1); %створю ємо файл File_Size = length(Our_File ); % довжина файлу   for i = 1 : ceil(File_Size / (SecPerClus * BytesPerSec))%від 1-го до останнього кластеру файлу         %шукаємо вільний кластер First = 1; Flag = 0; temp = FAT_Sect1; Free_Cluster = 0; for jj = 1 : SecPerFAT      [Buffer, cl] = MMC_SD_Read_Sector(s,  temp + jj - 1);            for ii = 1 : 2 : SecPerFAT * BytesPerSec          </span>free = Buffer (First);                   if (Buffer(ii) + 256 * Buffer(ii + 1) == 0)     %якщо кластер вільний                 </span>Flag = 1;                 break;          end;                  </span>Free_Cluster = Free_Cluster + 1;      end;           if (Flag ==1)          break;      end; end   z = sprintf('1-ий вільний кластер у таблиці FAT: %d', Free_Cluster); disp(z);       end;   % запис  в FAT  </span>Buffer(ii) = 255;        Buffer(ii + 1) = 255;  </span>wr = MMC_SD_Write_Sector(s,   FAT_Sect1 + jj - 1, Buffer);          % запис  в Rood Directory [Buffer, cl] = MMC_SD_Read_Sector(s, Free_Sect_RootDir); Our_File_1 = zeros (32,1); % ім'я файлу Our_File_1(1) = 'N'; Our_File_1(2) = 'A'; Our_File_1(3) = 'M'; Our_File_1(4) = 'E'; Our_File_1(5) = 32; Our_File_1(6) = 32; Our_File_1(7) = 32; Our_File_1(8) = 32; %розширення файлу Our_File_1(9) = 'W'; Our_File_1(10) = 'A'; Our_File_1(11) = 'V'; %номер першого кластеру Our_File_1(28) = fix(Free_Cluster/256); Our_File_1(27) = Free_Cluster - 256 * Our_File(28); % розмір файлу  </span>Our_File_1(29) = 512;  </span>Our_File_1(30) = 0;  </span>Our_File_1(31) = 0;  </span>Our_File_1(32) = 0;   Buffer(32*(Free_Num_RootDir-1) + 1 : 32*(Free_Num_RootDir-1) + 1 +31) =Our_File_1; wr = MMC_SD_Write_Sector(s, Free_Sect_RootDir, Buffer);     fclose(s);   Програма запису файлу у wav-формат : clear all; % відкрити файл для запису [y,Fs,bits]=wavread('D:\Розраха СЗВ \Wav\Lab_1_5.wav'); d=fopen('D:\Розраха СЗВ \Wav\My.wav','wb');   % заповнити поле RIFF_ID  52494646 fwrite(d, hex2dec('46464952'),'int 32');   % заповнити поле FILE_Length  ????? fwrite(d, 4000, 'int32');   % заповнити поле WAVE_ID   57415645 fwrite(d, hex2dec('45564157'), 'int32');   % заповнити поле FMT_ID   666d7420 fwrite(d, hex2dec('20746d66'), 'int32');   % заповнити поле FMT_Length fwrite(d, 16, 'int32');   % заповнити поле Type 0x0001 - простої вибірки fwrite(d, 1, 'int16');   % заповнити поле Channels >>> Mono = 1, Stereo = 2, fwrite(d, 1, 'int16');   % заповнити поле SamplesPerSec>>> частота дискретизації- Гц  лаб 1 fwrite(d, 4000 , 'int32');   % заповнити поле AvgBytesPerSec >>>   </span>== Channels * SamplesPerSec * BitsPerSample/8 fwrite(d, 4000, 'int32');   % заповнити поле Align  >>> вирівнювання (якщо кількість вибірок не кратна2, в кі нцевому файлу додається нульове значення). Переважно рівне 0х0001 fwrite(d, 1, 'int16');   % заповнити поле BitsPerSample  >>>    0х0008 - 8 біт на вибірку fwrite(d, 8, 'int16');   % заповнити поле DATA_ID  >>> Завжди рівний "data" =0x64617461 fwrite(d, hex2dec('61746164'), 'int32');   % заповнити поле DATA_Length >>> == NumSamples * Channels * BitsPerSample/8    к-сть вибірок fwrite(d, 4000, 'int32');   %вибірки сигналу for ii = 1 : 4000     fwrite(d,y(ii)*128+128,'uchar'); end;   fclose(d);   Програма стиснення аудіосигналу з потрібною степінню компресії: [y, Fs, bits]=wavread('D:\Розраха СЗВ \Wav\Lab_1_5.wav'); Fs bits   figure(1); hist(y*128, -128 : 127); n = hist(y*128, -128 : 127);   P = n /length(y);   Nopt = 0; for ii = 1 : 256     if (P(ii)>0)         </span>Nopt = Nopt - P(ii)*log2(P(ii));     end; end;   Nopt   CR1 = bits / Nopt;   Y = y*128; N = 128; L=7; nn = fix(length(Y)/N); mm = 1; kk = 1;   for ii=1 : nn - 1         </span>x = dct( Y(kk : kk + N - 1) );     y(mm : mm + L - 1) = x(1 : L);     </span>mm = mm + L;     </span>kk = kk + N;     end;   y = round(y);   figure(2); hist(Y, min(y) : max(y)); [A, X] = hist(y, min(y) : max(y));   NN = length(y); Ls=0;   for ii = 1 : length(A)         if (A(ii) > 0)         </span>Ls = Ls + (A(ii)/NN) * log2(A(ii)/NN);     end;     end;   disp('-LS = '); -Ls CR2 = (10 / -Ls) * (N / L) %return; YC = Y * 0;   dx = Y(1 : N) * 0; mm = 1; kk = 1;   for ii = 1 : nn - 1     </span>dx(1:L) = y(mm : mm + L - 1);     </span>x1 = idct( dx );     YC (kk : kk + N - 1) = x1;     </span>dx = dx * 0;     </span>mm = mm + L;     </span>kk = kk + N; end;   YC = YC / 128; YC = round(YC * 128) / 128; %wavplay(YC, Fs);     figure(3); strips(YC, 30000);
Антиботан аватар за замовчуванням

16.01.2013 12:01-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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