Parsi Coders
ضبط صوت دیجیتال - نسخه قابل چاپ

+- Parsi Coders (http://parsicoders.com)
+-- انجمن: Electronics and Robotics (http://parsicoders.com/forumdisplay.php?fid=149)
+--- انجمن: micro (http://parsicoders.com/forumdisplay.php?fid=154)
+---- انجمن: AVR (http://parsicoders.com/forumdisplay.php?fid=155)
+---- موضوع: ضبط صوت دیجیتال (/showthread.php?tid=3619)



ضبط صوت دیجیتال - a.mehran - 08-29-2014

منبع :
http://amoozeshrooz.blogfa.com
[عکس: 86131667819052571745.jpg]
من در برنامه خودم اطلاعات صدای شروع ویندوز XP را که به اسم Windows XP Startup.wav در سیستم قرار دارد را توسط برنامه WinHex در فلاش رام میکرو قرار دادم. تا میکرو بدون نیاز به هیچگونه حافظه جانبی بتواند صدای فوق را پخش کند. البته طبق محاسبات من برای پخش هر یک ثانیه صدای مونو شما نیاز به حدود 7 کیلو بایت حافظه دارید که با توجه به اینکه من از میکرو ATmega32 با 32 کیلوبایت حافظه فلاش استفاده کردم میتوانستم تا 4 ثانیه صدا در آن ذخیره کنم. توجه داشته باشید که در اغلب برنامه ها ما درصد کمی از این حافظه را مورد استفاده قرار میدهیم پس در پروژه های خود میتوانید برای کاربر پسندتر شدن از این قابلیت بهره ببرید. مثلا میتوانید با استفاده از میکرو ATmega128 تا حدود 18 ثانیه صدا ذخیره کنید و بعنوان مثال تک تک اعداد 0 تا 9 و برخی ارقام و حروف را در آن قرار دهید و تا پس از آن هر شماره ای را که میخواهید برایتان بخواند!
خوب حال برای تبدیل فایل صوتی به فرمتی که بتوان در سورس برنامه از آن استفاده کرد به برنامه های زیر نیاز داریم :

ImTOO Video Converter Ultimate برای تبدیل فرمت های مختلف صدا و تصویر به هم.
WinHex برای ویرایش و مشاهده فایلها بصورت Hex.
Sound Recorder ویندوز که بهمراه ویندوز بر روی کامپیوتر نصب میشود.

حالا کمی درباره برنامه های بالا توضیح میدهم. برنامه را من برای تبدیل فیلمهایی که از اینترنت با فرمت mkv دانلود میکردم گرفتم.
[عکس: 62539849783301148728.jpeg]
فوق العاده برنامه سبک ولی کارآمدی هست که تا با اون کار نکنید متوجه منظور من نخواهید شد. از اون دسته برنامه هایی هست که واقعا من خوشم میاد ساده و کاربردی و سبک. هیچ فرمتی را نمیتونید پید ا کنید که ساپورت نکنه. شما هم اگه فایل صوتی با فرمتی غیر از wav دارید برای تبدیل و یا برش قسمتی از آن میتونید از این برنامه استفاده کنید. برای دانلود فایل با حجم 42.45 مگابایت از آدرس زیر استفاده کنید:
http://www.brothersoft.com/imtoo-video-c...50449.html
حالا که فایل wav شما آماده شد باید توسط برنامه Sound Recorder ویندوز فایل را باز کنید. باز کردن این برنامه بر روی Start کلیک کنید.بر رروی All Programs رفته ، بر روی Accessories بروید ، بر روی Entertainment رفته و Sound Recorder را اجرا کنید.
[عکس: 00240001120076033412.png]
فایل مورد نظرتان را در باین برنامه باز کنید. و منوی File گزینه Save As را انتخاب کنید در پنجره باز شده بر روی دکمه Change کلیک کنید و در پنجره جدید از منوی کشویی Attributes گزینه اول (8.000kHz;8Bit;Mono) را انتخاب کنید و Ok کنید و فایلتان را ذخیره کنید.
حالا نوبت به تبدیل فایل به اطلاعات قابل استفاده در برنامه است. با توجه به اینکه من برنامه را به زبان سی نوشتم (البته توضیحات فوق را با کمی تغییر میتواند در مورد سایر زبانها همچون بیسیک و یا اسمبلی هم استفاده کرد) باید مراحل زیر را دنبال کنید.
برای این منظور برنامه WinHex را دانلود کنید:
http://winhex.software.informer.com/download
سپس بعد از اجرای برنامه فایل مورد نظر را در آن باز کنید.
[عکس: 45938838077532649029.png]
سپس بر روی کدهای نشان داده شده کلیک کنید و دکمه های Ctrl+A را بزنید تا تماما انتخاب شوند.
حال از منوی Edit گزینه Copy Block و از منوی باز شده گزینه C Source را انتخاب کنید.
در این مرحله در برنامه خود Paste کنید. خواهید دید کدی مشابه زیر تولید شده:
nsigned char data[104]={
0x3E,0x3E,0x3E,0x27,0x44,0x75,0x70,0x6C,0x69,0x63,0x61,0x74,
0x72,0x65,0x63,0x74,0x6F,0x72,0x79,0x20,0x27,0x25,0x73,0x27,
0x6F,0x72,0x65,0x64,0x2E,0x27,0x29,0x3B,0x0D,0x0A,0x44,0x75,
0x61,0x74,0x65,0x20,0x64,0x69,0x72,0x65,0x63,0x74,0x6F,0x72,
0x3A,0x5C,0x50,0x72,0x6F,0x67,0x72,0x61,0x6D,0x20,0x46,0x69,
0x44,0x65,0x73,0x69,0x67,0x6E,0x20,0x45,0x78,0x70,0x6C,0x6F,
0x39,0x39,0x20,0x53,0x45,0x5C,0x53,0x79,0x73,0x74,0x65,0x6D,
0x67,0x6E,0x6F,0x72,0x65,0x64,0x2E,0x0D,0x0A,0x3E,0x3E,0x3E,
0x6C,0x69,0x63,0x61,0x74,0x65,0x20,0x64,0x69,0x72,0x65,0x63
};
این کدها بصورت آرایه میباشند که شامل اطلاعات صدا هستند. برای اینکه این کدها در بخش حافظه flash ذخیره شوند باید ابتدای تعریف آرایه کلمه const را اضافه کنید.

این کدها بصورت آرایه میباشند که شامل اطلاعات صدا هستند. برای اینکه این کدها در بخش حافظه flash ذخیره شوند باید ابتدای تعریف آرایه کلمه const را اضافه کنید.

در این بخش جرئیات استفاده از مبدل آنالوگ به دیجیتال جهت ضبط صدا ، استفاده از باس SPI جهت ارتباط با حافظه MMC و مدالسیون پهنای باند PWM برای پخش آشنا میگردید. نمونه کاربردهای که نیاز یک یا تعدادی از این بلوک ها دارند عبارتند از لاگرهای دما ، دستگاه های پاسخگویی تلفن ، یا ضبط کنندهای دیجیتالی صدا.
حافظه MMC مورد استفاده میتواند از هر رنجی انتخاب شود. این حافظه ها با ولتاژ 3.3 ولت و با واسط SPI کار میکنند که برای دسترسی سریع به حافظه بهتر است که بصورت سکتورهای 512 بایتی به آن دسترسی داشته باشیم برای این منظور یک ارایه بعنوان بافر در برنامه جهت دسترسی به حافظه تعریف شده است.
همانطور که عنوان شد حافظه MMC جهت ارتباط از رابط سریال SPI برای دسترسی به اطلاعات استفاده میکند این واسط سخت افزار ساده تری نیاز دارد و باعث کاهش نویز و کاهش ابعاد و تعداد پین های فعال میگردد. نمونه کاربردهای این حافظه ذخیره سازی تصویر، اطلاعات و یا صوت است.
برای تامین ولتاژ 3.3 ولت مورد نیاز حافظه از یک رگولاتور خطی بنام LF33 استفاده شده است. حافظه در فرکانس 2MHz کار میکند و در مد صفر ارتباط بین میکروکنترولر و حافظه برقرار شده است.
در این مدار میکرو ATmega32 برای گرفتن نمونه های آنالوگ از میکروفن ، از مبدل آنالوگ به دیجیتال داخلی استفاده کرده و انتقال اطلاعات بین میکرو حافظه نیز با استفاده از رابط SPI میکرو انجام میشود. از PWM میکرو نیز برا ی پخش صدا استفاده شده است. کدهای اصلی برنامه خیلی کم هستند و براحتی میتوان در میکروهای کوچکتر نیز قرار داد.
قبل ار اینکه صدا را بتوان در حافظه ذخیره نمود باید آنرا به سیگنالهای دیجیتال تبدیل کرد. اینکار در طی چندین مرحله انجام میشود.

تصویر 1، نمونه سیگنال آنالوگ.
ت، سیگنال آنالوگ(تصویر1) به نمونه های زمانی (تصویر 2) تبدیل میشود. زمان بین دو نمونه "پریود نمونه برداری" نامیده میشود. و متقابلا آن به "فرکانس نمونه برداری" وابسته است.مطابق با قضیه نمونه برداری ، فرکانس نمونه برداری باید دو برابر فرکانس سیگنال باشد.

یک سیگنال صدا شامل اطلاعات ماکزیمم زیر 3000Hz است. بنابراین یک فیلتر پایین گذر را میتوان بعنوان محدود کننده باند سیگنال استفاده نمود.

برای یک فیلتر پایین گذر ایده ال با فرکانس قطع 3000Hz فرکانس نمونه برداری باید 6000Hz باشد. عمل برداشتن مقادیر دیجیتال از روی نمونه های آنالوگ کوانتیزیشن نامیده میشود.سیگنال آنالوگ کوانتیزه شده بسیار نزدیک به سیگنال اصلی است.(تصویر 3). تعداد مقادیر دیجیتال را رزولوشن مینامند که مقادیر محدودی هستند. برای نمونه تا 256 مقدار برای یک سیگنال دیجیتال 8 بیتی یا 10 مقدار در این مثال. بنابراین در کوانتیزه کردن سیگنالهای آنالوگ همیشه بخشی از اطلاعات از بین میروند. این خطای کوانتیزه کردن رابطه عکس با رزولوشن سیگنال دیجیتال ،محدوده حداکثر و حداقل مقادیر ( 3 تا 8 در این مثال) دارد.مبدل آنالوگ به دیجیتال میکرو میتواند برای رنج دینامیک سیگنال توسط AGND و AREF برروی مینیمم و ماکزیمم مقادیر سیگنال تنظیم شود.

از سوی دیگر آمپلیفایر میکروفن را میتوان برروی حد دینامیک ADC تنظیم نمود.

هر دوی این روشها مقادر خطای کوانتیزه کردن را کاهش میدهد تصویر 4 مقادیر دیجیتال بدست آمده از سیگنال آنالوگ را نشان میدهد. اینها مقادیر خوانده شده از نتایج تبدیلات ADC هستند.

در این مدار مقادیر ماکزیمم و مینیمم با ارزش نیستند. و بخش بالای ماکزیمم و زیر مینیمم حاوی اطلاعاتی نمیباشند. و میتوان آنها را برای صرفه جویی در حافظه حذف نمود.

اینکار را میتوان با شیفت به پایین دادن تمام سیگنال و برش بالای max انجام داد.(تصویر 5).

تصویر 2، سیگنال زمان گسسته.
http://upload7.ir/images/26579994934450742906.gif
تصویر 3، سیگنال کوانتیزه.
[عکس: 87628630656238987841.gif]
تصویر 4، سیگنال دیجیتال.
[عکس: 04554360041260771994.gif]
تصویر 5، سیگنال دیجیتال با کاهش بیت.
[عکس: 04554360041260771994.gif]
در این مدار نتیجه سیگنالها 8 بیتی است. این سیگنال اکنون میتواند در حافظه ذخیره شود.

برای پخش اطلاعات ابتدا انها از حافظه خوانده میشود و سپس با توجه به مقدار خوانده شده پالسی با عرض متناسب تولید میگردد. هرچه مقدار خوانده شده بزرگتر باشد عرض پالس تولیدی نیز بزرگتر خواهد بود و بالعکس.(تصویر 6)

تصویر 6، دو از مثال از سیگنال pwm

در تصویر 6 دو نمونه از سیگنال نشان داده شده است. مبدل PWM دوشیبه است در شیب اول تا زمانیکه مقدار شمارنده به عدد مورد نظر نرسیده خروجی صفر است پس از رسیدن شمارنده خروجی یک میشود. سپس در شیب نزولی تا زمانیکه مقدار شمارنده از عدد مورئ نظر کمتر نشده مقدار خروجی یک باقی می ماند. به این ترتیب پالسی با عرض متناسب با عدد مورد نظر تولید میشود در تصویر 7 خروجی PWM برای سیگنال مثال نشان داده شده است.

فرکانس سیگنال PWM باید دو برابر فرکانس سیگنال باشد. اما مقدار 4 برابر بزرگتر از سیگنال اصلی معمولا توصیه میشود. بسته به فیلتر خروجی میتوان بهترین گزینه را با افزایش کلاک یا کاهش رزولوشن سیگنال انتخاب نمود.

تصویر 7، سیگنال خروجی PWM فیلتر شده.
[عکس: 94188343112997275863.gif]
در این مدار فرکانس قطع فیلتر خروجی بر روی 4000Hz تنظیم شده است، که یک چهارم فرکانس PWM (15,686Hz) است.

سرعت کلاک سیستم و رزولوشن PWM مقدار فرکانس PWM را تعیین میکنند. با کلاک سیستم 8MHz برای رزولوشن 10 بیت 3922Hz است(8MHz/2x2^10=3922Hz) 7843Hz برای رزولوشن 9 بیت و 15,686Hz برای رزولوشن 8 بیت.

فقط آخرین مقدار به اندازه کافی بزرگ است تابعنوان سیگنال کریر برای سیگنال 4000Hz استفاده شود.

فیلتر خروجی فرکانس های بالای سیگنال حامل PWM را حذف میکند. نتیجه خروجی سیگنال برای سیگنال نمونه نشان داده شده ، شبیه تصویر 8 است.

تصویر 8، سیگنال خروجی PWM.
[عکس: 41926941517481001336.gif]
مدار میکروفن و اسپیکر

آمپلی فایر میکروفن یک آمپلی فایر معکوس ساده است. گین مدار توسط مقاومت R1 و R9 تنظیم میشود.(گین = R1 / R9). R4 برای تامین تغذیه میکروفن و C1 برای مسدود کردن ورود مقادیر DC به آمپلی فایر استفاده شده. R2 ,R3 مقدار افست را تنظیم میکنند.R5 و C8 یک فیلتر پایین گذر ساده را تشکیل میدهند. بعلاوه R5 محافظت میکند آمپلی فایر را از هرگونه خطر در صورتیکه خروجی اتصال کوتاه شده باشد. مدار اسپیکر شامل 5 طبقه فیلتر پایین گذر چبیچو است و یک طبقه تقویت کننده.
فیلتر ها از دو طبقه دوتایی فیلتر اکتیو(R6 , R7 , R8 , C2 , C7 و R7 , R10 , R11 , R9 , C9 , C5) و یک طبقه فیلتر پسیو(R11 , C4) است.
[عکس: 06228558940160685385.jpg]
برنامه:کد:


کد:
/*****************************************************
This program was produced by the
CodeWizardAVR V1.25.9 Professional
Automatic Program Generator
© Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project :
Version :
Date    : 2010/05/21
Author  : Hossein Lachini                
Company : HLachini                        
Comments:


Chip type           : ATmega32