تبلیغات
" /> باران الکترونیک - مطالب برنامه نوسی C
یکشنبه 18 بهمن 1394  12:03 ق.ظ
نوع مطلب: (DSP ،برنامه نوسی C ،) توسط: امیرحسین رستمی

هدف از این مقاله تبدیل یک کد ‏floating-poing‏ به ‏fixed-point‏ و مقایسه این دو کد از نظر زمان اجرا ‏می باشد. برای این منظور از کد تولید صدای ناقوس در ‏MATLAB‏ استفاده شد و آن را در پردازنده ‏DSP‏ به ‏شماره قطعه ‏TMS320C5509A‏ پیاده سازی کردیم.‏
می توانید صدای نهایی را از لینک زیر دریافت کنید:
پیاده سازی پروژه نهایی روی پردازنده  DSP در ویدیوی زیر نشان داده شده است:
 
[http://www.aparat.com/v/dsigR]

صوت دیجیتال
 
از کاربردهای صوت دیجیتال می توان به تولید صدا و افکت گذاری روی صدا اشاره کرد. برای تولید صدا به صورت دیجیتال ‏روش های زیادی وجود دارد که عبارتند از:‏
  • مدولاسیون فرکانسی (‏Frequency Modulation‏)‏
                     در این روش از یک موج فرکانسی پیچیده برای تولید صدا به کار می رود‎.‎‏ فرمول کلی به صورت زیر می باشد:‏
    sound = A sin(αt+Isin(βt))‎
 
  • جدول موج ‏Wavetable synthesis
             در این روش صدا از نمونه برداری صدای دستگاه های موسیقی ساخته می شود.‏
 
  • افزایشی ‏Additive synthesis
            در این روش صدا نهایی از ترکیب صداهای ساده تر و کوتاه تر ساخته می¬شود.‏
 
  • کاهشی ‏Subtractive synthesis
              در این روش از یک شکل موج پیچیده (مانند دندان اره ای) به عنوان ورودی استفاده می شود سپس با فیلتر کردن سعی در ‏تولید صدای نهایی می شود.‏
 
  • دانه ای ‏Granular Synthesis
             در این روش از قطعات کوتاه برای ساخت صدای جدید استفاده می شود.‏
 
  • مدل فیزیکی ‏Physical Modelling
             در این روش صدای تولید شده از دستگاه با مدل کردن شکل دستگاه و پیدا کردن معادله موج (ریاضیات مهندسی) ساخته ‏می شود.‏
 
  • مبتنی بر نمونه ‏Sample-based synthesis
             در این روش از ذخیره و بازپخش صدای ضبط شده استفاده می شود. معمولا صدای ضبط شده کوتاه است و همراه با پردازش ‏صوت می باشد.‏

تولید صدا زنگ ناقوس با استفاده از روش ‏FM
 
کد متلب
 
کد ‏MATLAB‏ برای تولید صدای زنگ به صورت زیر می باشد:‏

% bell.m

%

% A Matlab script to compute a bell-like sound using frequency modulation.

%

% by Gary Scavone, McGill University, 2004.

  

% Signal parameters

fs = 22050;

T = 1/fs;

dur = 4.0;

t = 0:T:dur;

T60 = 1.0;

env = 0.95*exp(-t/T60);

  

% FM parameters

fc = 200;

fm = 280;

Imax = 10;

I = Imax.*env;

  

y = env.*sin(2*pi*fc*t + I.*sin(2*pi*fm*t));

plot(t, y);

 

sound(y, fs);


wavwrite(y,fs,16,'sound_bell_float')

% dospectrum = input('\nPlot spectrum? Y/[N]:\n\n', 's');

 

% if dospectrum == 'y',

  specgram(y, 512, fs, [], 256)

% end


با اجرای این کد صدای زیبای زنگ ناقوس از کامپیوتر پخش می شود. نکته باحالی که در این جا وجود ‏دارد این است که با استفاده از دو تابع دبیرستانی سینوس و نمایی این صدای پیچیده تولید می شود. نمودار ‏صدا در حوزه زمان در شکل زیر نشان داده شده است.‏

صدای ناقوس در حوزه زمان


پنجشنبه 5 آذر 1394  11:25 ب.ظ
نوع مطلب: (DSP ،برنامه نوسی C ،) توسط: امیرحسین رستمی

نوآوری با پردازش سیگنال شروع می شود ...‏

در این مقاله ابتدا به بررسی تفاوت های پردازنده های ممیز ثابت و شناور می پردازیم، سپس با انجام ‏محاسبات ریاضی در پردازنده ممیز ثابت توضیح می دهیم.‏

Fixed-point‏ در مقابل ‏Floating-point

در پردازنده ‏DSP‏ ‏Floating-point‏ ضرب و جمع اعشاری در یک کلاک انجام می پذیرد ولی در ‏پردازنده ‏Fixed-point‏ برای ضرب یا جمع اعشاری تعداد زیادی کلاک لازم است.‏
پردازنده های ممیز شناور 32 بیتی و پردازنده های‎‏ ممیز ثابت‎ ‎‏16 بیتی می باشند.‏
در پردازنده های ممیز شناور زمان نوشتن برنامه سریع تر می باشد زیرا برنامه نویس نگران سرریز و ‏خطای گردن کردن نیست. در مقابل نوشتن برنامه برای پردازنده ممیز ثابت سخت تر است و برنامه ‏نویس باید برنامه بیش تری بنویسد تا از سریز جلوگیری کند.‏
پردازنده های ممیز شناور گران تر هستند و توان بیش تری مصرف می کنند اما پردازنده های ممیز ‏ثابت ارزان قیمت می باشند، توان مصرفی کمتری دارند و برای کارهای قابل حمل مناسب ترند.‏
مزیت اصلی که پردازنده ممیز شناور نسبت به ممیز ثابت دارد این است که نرخ سیگنال به نویز ‏‏(گرد کردن اعداد) در پردازنده ممیز شناور ‏ بسیار بالاتر از ممیز ثابت ‏است.‏

پردازنده ممیز ثابت
برای این که محاسبات اعشاری در ‏DSP‏ ممیز ثابت با سرعت بالا انجام شود، ابتدا اعداد اعشاری را بین 1- و ‏‏1+ نرمالیزه می کنند. سپس این اعداد را در ‏‎215 = 32768‎‏ ضرب می کنند. در انتها اعداد را گرد می کنند تا ‏بخش اعشاری حذف شود. به این فرمت نمایش ‏Q0.15‎‏ و یا به طور خلاصه ‏Q15‎‏ می گویند. یک بیت برای ‏علامت و 15 بیت برای قسمت صحیح می باشد که در مجموع 16 بیت می شود.‏
فرمت ‏Q3.12‎
در فرمت ‏Q15‎، 15 بیت اعشاری و صفر بیت صحیح می باشد. می توان ترکیبی از بیت های اعشاری و صحیح نیز داشت. برای ‏مثال 3 بیت صحیح و 12 بیت اعشاری برای نمایش اعداد بین ‏‎(-‎32768‎)   ⁄  2^12 ‎‏ تا ‏‎(+32768‎)   ⁄  2^12 ‎‏ یا 8- تا 9997/7 ‏داشت.‏
به عنوان یک مثال کاربردی بست تیلور سینوس را در نظر بگیرید:‏
sin(x) = c1*x + c2*x^2 + c3*x^3 + c4*x^4 + c5*x^5‎
c1 = 3.140625x
c2 = 0.02026367‎
c3 = − 5.3251‎
c4 = 0.5446778‎
c5 = 1.800293‎
همان که مشاهده می کنید ضرایب بین 5- تا 3 می باشند. به جای نرمالیزه کردن و نمایش اعداد به فرمت ‏Q15‎‏ می توان از فرمت ‏Q3.12‎‏ برای دقت به تر استفاده کرد. کافی است تا ضرایب را در 212‏‎ ‎‏ ضرب کنیم و نتیجه نهایی را گرد کنیم تا اعداد به فرمت ‏Q3.12‎‏ ‏نشان داده شوند.‏
(برای ادامه مطلب به ادامه مطلب بروید)


نظرات()       
یکشنبه 20 بهمن 1392  11:23 ق.ظ
نوع مطلب: (برنامه نوسی C ،) توسط: الهام بنیانی

C > Tetris Ghraphic Example


قوانین بازی Tetris:
  • ورود بلوکها به صورت تصادفی انجام میگیرد ودر هر لحظه تنها یک بلوک در صفحه بازی وجود دارد.
  • درهرلحظه بلوک بعدی باید به کاربر نشان داده شود.
  • درشکل زیر انواع بلوکهای ممکن وتغییر شکل هر بلوک نشان داده ام .تغییر شکل بلوکها از چپ به راست بوده و این تغییرات به صورت چرخشی انجام می گیرد؛ یعنی پس از تبدیل شدن به اخرین شکل هرسطر  در تغییر بعدی به اولین شکل همان سطر تبدیل میشود.


پیاده سازی بازی Tetris :
 
این بازی با گرافیکهای مختلفی پیاده سازی شده است.هدف از انجام این پروژه پیاده سازی این بازی با استفاده از زبان c است.در اینجا میخواهیم یک پیاده سازی بسیار ساده در محیط کنسول را برای این بازی انجام دهیم.در پیاده سازی این بازی ملاحظات زیر باید لحاظ شود:
  • شکل کلی پیاده سازی شده در این پروژه باید قالبی شبیه شکل زیر داشته باشد:
  • اندازه صفحه بازی دلخواه
  • از کلیدها جهتی راست وچپ برای هدایت بلوک در حال سقوط  استفاده میشود. 
  • ازکلیدجهتی بالا به منظور تغییر شکل بلوک استفاده میشود.
  • ازکلیدجهتی پایین به منظور سقوط سریعتر بلوک استفاده میشود.
  • به ازای هرسطر حذف شده 100 امتیاز به کاربر داده میشود.در صورتی که با یک حرکت بیش از یک سطر حذف شود امتیاز هر سطر در تعداد سطرهای حذف شده ضرب میشود. به طور مثال اگه با یک حرکت 3 سطر حذف شود به ازای هر سطر 300 امتیاز و در مجموع 900 امتیاز به کاربر داده میشود.
ملاحظات پیاده سازی :
  • به ازای هر بلوک باید از ساختار struct  استفاده شود.
  • اعمال مورد استفاده در این بازی باید به صورت توابع نوشته شودو در برنامه اصلی مورد استفاده قرارگیردتوابع نوشته شده باید در کتابخانه های مجزا یی نوشته شودو در فایل برنامه اصلی مورد استفاده قرارگیرندبه طور مثال اعمال مربوط به امتیازدهی درکتابخانه ای به نامscore ,اعمال مربوط به کارهای گرافیکی در کتابخانه ای به نام ghraphic و اعمال مربوط به بلوکها در کتابخانه ای به نام block قرار داده شود.
  • از مولد عدد تصادفی rand()  به منظور ایجاد تصادفی بلوکها استفاده شود.
  • هربلوک یک رنگ مجزا داشته باشد.
  • به بازی ,مرحله(Level) اضافه شود.به این معنی که با رسیدن امتیاز کاربر به مقدار مشخصی وارد مرحله جدیدی شود.که در هر مرحله نسبت به مرحله قبل سرعت بازی بیشتر شده وبازی مشکلتر میشود.

Downloade source ghraphic tetris game :  http://uplod.ir/jeaz74qhua4w/include.htm.htm

Downloade source  tetris game  : http://uplod.ir/7j1musorv03n/main.c.htm



  


 
 




نظرات()   
   
آخرین پست ها