طلب شرح الهدف من كود واليه عمله


(system) #1

السلام عليكم …

[CENTER]حبيت أسأل عن أمر قراءة ملف نصي وأمر إظهار هذا النص …

اذا ممكن تساعدوني بفهم هذا الكود …[/center]

[LEFT]


[FONT=Verdana][COLOR=#444444][COLOR=#444444][FONT=Verdana]code 1[/font][/color][/color][/font][FONT=Verdana][COLOR=#444444]

[COLOR=#444444][FONT=Verdana]% [/font][/color][COLOR=#444444][FONT=Courier New]Converting Sound to Binary[/font][/color]
[COLOR=#444444][FONT=Courier New][COLOR=#444444][FONT=Verdana][[/font][/color][COLOR=#444444][FONT=Courier New]Sound,Fs,N]=wavread('aa.wav[/font][/color][COLOR=#444444][FONT=Verdana]');         [/font][/color][/font][/color]
[COLOR=#444444][FONT=Courier New][COLOR=#444444][FONT=Courier New]SoundOneCol=fix([Sound(:,1);Sound(:,2)]*1e9[/font][/color][COLOR=#444444][FONT=Verdana]);  [/font][/color][/font][/color]
[COLOR=#444444][FONT=Courier New][COLOR=#444444][FONT=Courier New]R=find(SoundOneCol<=0[/font][/color][COLOR=#444444][FONT=Verdana]);[/font][/color][/font][/color]
[COLOR=#444444][FONT=Courier New][COLOR=#444444][FONT=Courier New]SoundOneCol(R)=-SoundOneCol(R[/font][/color][COLOR=#444444][FONT=Verdana]);[/font][/color][/font][/color]
[COLOR=#444444][FONT=Courier New][COLOR=#444444][FONT=Verdana][COLOR=#444444][FONT=Courier New]SoundBin=de2bi(SoundOneCol,30,'left-msb[/font][/color][COLOR=#444444][FONT=Verdana]')[/font][/color][/font][/color][/font][/color][COLOR=#444444][FONT=Courier New][COLOR=#444444][FONT=Verdana][COLOR=#444444][FONT=Verdana]; [/font][/color][/font][/color][/font][/color]
[COLOR=#444444][FONT=Courier New][COLOR=#444444][FONT=Verdana][COLOR=#444444][FONT=Verdana][COLOR=#444444][FONT=Courier New]SoundStream=reshape(SoundBin',1[/font][/color][COLOR=#444444][FONT=Verdana],[]);[/font][/color]   [/font][/color][/font][/color][/font][/color]

[COLOR=#444444][FONT=Courier New][COLOR=#444444][FONT=Verdana][COLOR=#444444][FONT=Verdana]code 2[/font][/color][/font][/color][/font][/color]

[COLOR=#444444][FONT=Courier New][COLOR=#444444][FONT=Verdana][COLOR=#444444][FONT=Verdana]% [/font][/color][COLOR=#444444][FONT=Courier New]Converting Binary to Sound Again   [/font][/color] [/font][/color][/font][/color]

[COLOR=#444444][FONT=Verdana]       [COLOR=#444444][FONT=Courier New]SoundBinRec=reshape(SoundStream,30[/font][/color][COLOR=#444444][FONT=Verdana],[]);     [/font][/color][/font][/color]
[COLOR=#444444][FONT=Verdana][COLOR=#444444][FONT=Courier New]SoundOneColRec=bi2de(SoundBinRec','left-msb')*1e-9[/font][/color][COLOR=#444444][FONT=Verdana]; [/font][/color][/font][/color]
[COLOR=#444444][FONT=Verdana][COLOR=#444444][FONT=Verdana][COLOR=#444444][FONT=Courier New]SoundOneColRec(R)=-SoundOneColRec(R[/font][/color][COLOR=#444444][FONT=Verdana]); [/font][/color][/font][/color][/font][/color]
[COLOR=#444444][FONT=Verdana][COLOR=#444444][FONT=Verdana][COLOR=#444444][FONT=Verdana][COLOR=#444444][FONT=Courier New]SoundRec(:,1)=SoundOneColRec(1:length(SoundOneColRec)/2,1[/font][/color][COLOR=#444444][FONT=Verdana]);    [/font][/color][/font][/color][/font][/color][/font][/color]
[COLOR=#444444][FONT=Verdana][COLOR=#444444][FONT=Verdana][COLOR=#444444][FONT=Verdana][COLOR=#444444][FONT=Courier New]SoundRec(:,2)=SoundOneColRec((length(SoundOneColRec)/2)+1:end,1[/font][/color][COLOR=#444444][FONT=Verdana]); [/font][/color][COLOR=#444444][FONT=Courier New]wavwrite(SoundRec,Fs,N,'Output.wav[/font][/color][COLOR=#444444][FONT=Verdana]'); [/font][/color] [/font][/color][/font][/color][/font][/color]


[/color][/font]

[FONT=Verdana][COLOR=#444444][/left]

جزيتم خيرا[/color][/font]


#2

اولا بالنسبة للجزء الاول من الكود فهو لقراءة ملف صوتى بصيغة ويف وتحوله الى ثنائى binary
ولفهم الكود بطريقة صحيحة يجب تنفيذ الكود مع زيادة امر فى كل مرة ومشاهدة النتائج
والامر الاول

[Sound,Fs,N]=wavread('aa.wav');

خاص لقراءة ملف الويف وستم حفظ قيمته فى متغير اسمه sound و fs تدل على التردد وال N تدل على number of sample او بمعنى اخر ال Bit rate ويمكن تنفيذ الامر بدونها وسيعتبرها البرنامج تعادل 8 بت

SoundOneCol=fix([Sound(:,1);Sound(:,2)]*1e9);

هذا الامر يقوم بضرب العمود الاول والثانى لمتغير sound فى هذا الرقم 1e9 لتكبيره وتقريب النتائج الى اكبر رقم صحيح اى جعله يحتوى على اعداد صحيحة فقط .
واذا كان المتغير sound به عمود واحد نفذى الامر كالاتى

SoundOneCol=fix([Sound*1e9);

والامر الاتى

R=find(SoundOneCol<=0);

يقوم بايجاد العناصر التى قيمتها اقل من الصفر ووضعها فى مصفوفة R لتحويلها الى قيمة موجبة من خلال الامر الاتى

SoundOneCol(R)=-SoundOneCol(R);

اما الامر الاتى

SoundBin=de2bi(SoundOneCol,30,'left-msb');

فيقوم يتحويل الملف الصوتى الذى اSoundOneCol الى الصيغة Binary
وتعبر القيمة 30 عن الاساس ان اى الارقام كلها تكون مكونه من 2 اس 30 خانه
و left-mst تعبر عن ان most significant bit اى البت ذات القيمه العليا تقع على اليسار
والامر الاتى

SoundStream=reshape(SoundBin',1,[]); 

يستخدم لتحويل ال array التى تحتوى على صفوف واعمده معينة الى صفوف واعمدة يتم تحديدها
وهنا يتم تحويلها الى صف واحد اى جعل الملف بدلا من عمود واحد الى صف واحد ويسمى Vector
ويمكنا هنا الاستغناء عن هذا الامر وعمل transpose للمصفوفة لجعلها Vector

اما الجزء الثانى فهو عملية عكسية ونلاحظ استخدامه للامر

wavwrite

لكتابة او لعمل ملف الويف


#3

وبالنسبة للملفات النصية text
استخدمى الاوامر الاتية

[A,B,C,...] = textread('filename','format')

و

textwrite(S,filename)

(system) #4

سؤال اخر…

مالفائده من getbit … هل فقط ترجع لي .bit واحد فقط…
و setbit … هل اخزن في bit واحد فقط …

وهل أقدر أستخدمها مع جميع انواع الملفات سواء ملف صوتي او صوره اونص… أو فقط مع الصوره…

جزيتم خير الجزاء…


#5

ايوة فعلا setbit وال getbit يستخدمان للتعامل مع ال Bit level
ويمكن استعمالها فى اى ملف ولكن يشرط ان يكون Bit stream
اى لازم يكون Binary لان البت قيمتها بصفر او واحد فقط
ولاى ملف عندك قومى بتحويله الى Binary ثم استخدمى get و set bit


(system) #6

لو سمحت لدي أستفسار …

وفي حاله بقارن بين حجم دالتين بإستخدام if مع الحاله 2 من size كيف اعملها وفي حاله طلع الحجم اكبر انهي البرنامج …
مالفرق بين 3 الدوال ؟؟!!

d = size(X)
[m,n] = size(X)
m = size(X,dim)

مصفوفه الصوت decimal حتى اقدر استعمل getbit لازم احولها لباينري ؟؟؟


#7

يعنى ايه بقارن بين حجم دالتين ؟؟
استعامل الدالة size بيكون مع ال Matrix او Array

الحالة الاولى بتكون فى حالة ال array وبتستخدم لمعرفة حجم كل بعد من ابعاد ال array

اما الحالة الثانية فهى للمصفوفة وبتكون ابعادها m و n فقط

والحالة الثالثة بتستخدم مع ال Array اذا كنتى تريدى معرفة حجم بعد معين من ابعاد ال array


(system) #8

أبغى أعرف حجم ملف صوتي وأي ملف اخر مثلا صوره …

وبقارن بينهم اذا حجم الصورة أقل راح اكمل خطوات البرنامج اذا أكبر راح اطبع له مسج بانه لازم يكون حجم الصوت اكبر ثم انهي البرنامج …

فأي حالة من الحاله اقدر استخدمها لحساب حجم كل ملف واقارن بينهم باستخدام ifelse ???


#9

يعنى ايه حجم الملف الصوتى ؟؟
الملف الصوتى بيكون عبارة عن Array و Fs , N
اما الصورة فشكلها مختلف بتكون عبارة عن مصفوفة M,n فى حالة الصورة ال Binary

ايه اللى تقصديه بالظبط والمقارنة بين Array و Matrix m,n هتكون على اساس ايه ؟


#10

انا شايف انك تحطى حدود احسن يعنى مثلا لو كان حجم ال Array يساوى رقم معين ينهى البرنامج لكن حجم الملف الصوتى وايضا الصورة من خلال ابعادها


(system) #11

انا أريد أن اخفي صورة داخل صوت فلابد ان حجم صوره اصغر عشان اقدر اخفيها داخل الصوت … فماهي الطريقه المناسبه للتاكد من ان حجم الصوت اكبر؟؟؟!!!


#12

لا مش شرط ان يكون حجم الصورة اصغر
لان ملف الصوت الناتج هيكون مختلف عن ملف الصوت الاصلى اى هيكون مشفر