PDA

View Full Version : Signal processing



goodarzi121
پنج شنبه 22 اردیبهشت 1390, 16:31 عصر
با سلام خدمت همه ی دوستان عزیز.
پروژه ای دارم که باید داده های ورودی از یک سخت افزار را تحلیل کنم. داده ها به صورت سیگنال هستند. مثلا متن زیر 256 داده ی خواند ه شده ست:
"FB,FF,4,8,B,E,10,11,12,10,E,C,8,4,0,FB,F7,F4,F1,EE ,ED,ED,EE,F0,F2,F6,F9,FD,2,6,A,D,F,11,11,11,F,D,A, 6,1,FD,F9,F5,F2,EF,EE,ED,ED,EF,F1,F4,F8,FC,0,5,9,C ,F,11,11,11,F,E,"
همۀ داد های 8 بیتی و علامت دارند یعنی باید به sByte تبدیل بشن که این کار رو هم کردم.

حالا مجموعه ای از داده های مثبت و منفی دارم. با اتصال اونها به هم دیاگرامش رو هم رسم کردم (مثل Task Manager).

این داده ها باید به سگنال تبدیل بشه. یعنی باید بفمم که چه مقدار هرتزی رو نشون می دن. اما نمی تونم این کار رو کنم. خیلی هم در اینترنت سرچ زدم. اما نشد. کسی هست که با سخت افزار کار کرده باشه و بتونه کمکم کنه؟

goodarzi121
شنبه 24 اردیبهشت 1390, 08:11 صبح
کسی اینجا پردازش سیگمال بلد نیست!
کمک! کمک!

mc_avr
شنبه 24 اردیبهشت 1390, 08:35 صبح
سلام
سوالتون در مورد سخت افزار چیه؟
میشه بیشتر و دقیق تر در مورد سخت افزار توضیح بدید؟

goodarzi121
شنبه 24 اردیبهشت 1390, 08:41 صبح
ببینید:
من یک سخت افزار کالر آی (Caller ID) دارم . وقتی سخت افزار رو به خط تلفن وصل می کنم داده ها به صورت سیگنال وارد کامپیوتر می شن. این داده ها sbyte و 8 بیتی هستند.
این سیگنال ها از نوع DTMF هستند. من باید این داده ها رو تحلیل کنم. مثلا بتونم شماره تماس، تاریخ و زمان تماس رو پیدا کنم.
چطوری باید داده های زیر رو تحلیل کنم؟
"FB,FF,4,8,B,E,10,11,12,10,E,C,8,4,0,FB,F7,F4,F1,E E,ED,ED,EE,F0,F2,F6,F9,FD,2,6,A,D,F,11,11,11,F,D,A ,6,1,FD,F9,F5,F2,EF,EE,ED,ED,EF,F1,F4,F8,FC,0,5,9, C,F,11,11,11,F,E,"

mc_avr
شنبه 24 اردیبهشت 1390, 08:48 صبح
برای این که بتونید اینارو تحلیل کنید نیاز به این هست که بدونید اون caller ID این دیتا رو بر چه اساسی میفرسته
وگر نه به این راحتیا نمیشه تحلیلش کرد
این سخت افزار رو خودتون ساختید یا آماده خریدید؟؟

goodarzi121
شنبه 24 اردیبهشت 1390, 08:54 صبح
این دستگاه ساخته ی یکی از دوستانه.
اینکه " این دیتا رو بر چه اساسی میفرسته" منظورتون چیه؟ داده ها به صورت Hex می یاد. از جنس سیگنالهای DTMF هم هستند.

mc_avr
شنبه 24 اردیبهشت 1390, 09:02 صبح
من در مورد سیگنال DTMF اطلاعات زیادی ندارم
اگه مطلبی در موردش داری واسم بزار اینجا مطالعه کنم بعد اگه کمکی از دستم بر بیاد در خدمتم

Saeed.Masoumi
شنبه 24 اردیبهشت 1390, 15:22 عصر
سلام ببین این دیاگرام رو رسم کنم یعنی چی؟شما یک سری داده Hex دریافتی دارین خوب می خواین این داده ها را رسم کنید رو نمودار؟توی کالر آی دی چی رو می خواین رسم کنید؟؟اون دوستمون هم منورش این بود که داده های دریافتی بر چه اساسی مرتب است مثلا 4 بایت اول شماره ی کسی که زنگ زده 4 بایت دوم ساعت 4 بایت سوم تاریخ و.... حالا اگه اینجوریه بگو چی رو می خوای رسم کنی؟
چون سوالتون مربوط به مخابرات باید صبر کنی اقای mehdi.mousavi (http://barnamenevis.org/member.php?41233-mehdi.mousavi) از این ورا گذر کنند مشکلتون حل میشه.موفق باشید
می خواین چیزی شبیه این (http://en.wikipedia.org/wiki/Dual-tone_multi-frequency_signaling#Keypad)بسازین؟

goodarzi121
شنبه 24 اردیبهشت 1390, 15:29 عصر
متشکرم دوست گرامی.
واقعیت اینه که داده های Hex هستند. همگی از نوع سیگنال، با واحد Hertz. لذا اول باید اونها رو به hertz تبدیل کنم. از اینجا به بعدش رو می دونم که چه باید کنم. مثلا عدد 1209hz و 697hz بدست می یاد و در کالر آی یعنی عدد 1!
پس تا اون رو به hertz تبدیل نکنم، کاری از ذستم برنمی یاد.
این (http://en.wikipedia.org/wiki/Dual-tone_multi-frequency_signaling#Keypad) رو هم خوندم، و خیلی موارد کاملتر. اما همه اونها، دقیقا از بعد از بوجود اومدن hertz تحلیل کردند، نه روش بدست اوردنش!

mc_avr
شنبه 24 اردیبهشت 1390, 17:21 عصر
متشکرم دوست گرامی.
واقعیت اینه که داده های Hex هستند. همگی از نوع سیگنال، با واحد Hertz. لذا اول باید اونها رو به hertz تبدیل کنم. از اینجا به بعدش رو می دونم که چه باید کنم. مثلا عدد 1209hz و 697hz بدست می یاد و در کالر آی یعنی عدد 1!
پس تا اون رو به hertz تبدیل نکنم، کاری از ذستم برنمی یاد.
این (http://en.wikipedia.org/wiki/Dual-tone_multi-frequency_signaling#Keypad) رو هم خوندم، و خیلی موارد کاملتر. اما همه اونها، دقیقا از بعد از بوجود اومدن hertz تحلیل کردند، نه روش بدست اوردنش!
دوست خوبم شما در اصل اومدین فرکانس رو که روی خط تلفن بوجود میاد تبدیل به کد hex کردین و حالا میخواین کد hex رو به فرکانس تبدیل کنید.
خب با چه فرمتی این فرکانسها رو به کد تبدیل کردین؟
از عکس اون فرمت باید واسه تبدیل کد به فرکانس استفاده کنید.
کار تبدیل فرکانس به کد رو با میکرو انجام میدید؟

ژوپیتر
شنبه 24 اردیبهشت 1390, 17:42 عصر
ابتدا تعداد کل سمپلها( به قول شما عدد هگز 8 بیتی با علامت) رو در ثانیه به دست بیارید، سپس در حافظه یک FIFO بسازید که سایز بافرش به اندازه تعداد سمپلهای یک ثانیه باشه.
حالا باید Interpolation یا همون میان یابی رو روش اعمال کنید، مثلا اگر تعداد سپملها در ثانیه 100 تاست برای میانیابی 400 سمپل بین هر دو سمپل اصلی 3 تا مجازی دارین که دقت کارتون رو افزایش میده تا بتونین با استفاده از FFT فرکانسهای موجود رو در هر ثانیه تشخیص بدید، هر دفعه که یک سمپل وارد FIFO میشه آخری از FIFO خارج شده و باید دوباره Interpolation و سپس FFT رو حساب کنید.
توی FFT هم براساس فرکانسهای مورد نظرتون نسبت به Amplitude دامنه میتونید با تعریف یک Threshold مشخص کنید آیا اون فرکانس مورد نظر مثلا برای عدد 2 هست یا نه و همینطور الی آخر.

موفق باشید.

goodarzi121
یک شنبه 25 اردیبهشت 1390, 10:56 صبح
با تشکر از پاسختون. باید بررسی کنم.


ابتدا تعداد کل سمپلها( به قول شما عدد هگز 8 بیتی با علامت) رو در ثانیه به دست بیارید، سپس در حافظه یک FIFO بسازید که سایز بافرش به اندازه تعداد سمپلهای یک ثانیه باشه.
حالا باید Interpolation یا همون میان یابی رو روش اعمال کنید، مثلا اگر تعداد سپملها در ثانیه 100 تاست برای میانیابی 400 سمپل بین هر دو سمپل اصلی 3 تا مجازی دارین که دقت کارتون رو افزایش میده تا بتونین با استفاده از FFT فرکانسهای موجود رو در هر ثانیه تشخیص بدید، هر دفعه که یک سمپل وارد FIFO میشه آخری از FIFO خارج شده و باید دوباره Interpolation و سپس FFT رو حساب کنید.
توی FFT هم براساس فرکانسهای مورد نظرتون نسبت به Amplitude دامنه میتونید با تعریف یک Threshold مشخص کنید آیا اون فرکانس مورد نظر مثلا برای عدد 2 هست یا نه و همینطور الی آخر.

موفق باشید.

goodarzi121
سه شنبه 27 اردیبهشت 1390, 08:55 صبح
سلام
خیلی روی پاسخ شما فکر کردم. به این نتایج رسیدم:
الگوریتم کار من باید اینطور باشه:
1. خواندن سمپلها در یک ثانیه (منظورتون از سمپل، داده هاست؟ SampleRate در سخت افزار من 11025. )
2. در ج در یک FIFO
3. میان یابی (روش توضیح داده شده توسط شما رو نفهمیدم. لطفا بیشتر اوضیح بدین. تشکر)
4. محاسسبه FFT . (منظورتون رو از FFT نفهمیدم. همین طور Amplitude و Threshold رو که چی هستند و چه کمکی میتونن واسه من بکنند.)

منتظر پاسختون هستم.
با تشکر



ابتدا تعداد کل سمپلها( به قول شما عدد هگز 8 بیتی با علامت) رو در ثانیه به دست بیارید، سپس در حافظه یک FIFO بسازید که سایز بافرش به اندازه تعداد سمپلهای یک ثانیه باشه.
حالا باید Interpolation یا همون میان یابی رو روش اعمال کنید، مثلا اگر تعداد سپملها در ثانیه 100 تاست برای میانیابی 400 سمپل بین هر دو سمپل اصلی 3 تا مجازی دارین که دقت کارتون رو افزایش میده تا بتونین با استفاده از FFT فرکانسهای موجود رو در هر ثانیه تشخیص بدید، هر دفعه که یک سمپل وارد FIFO میشه آخری از FIFO خارج شده و باید دوباره Interpolation و سپس FFT رو حساب کنید.
توی FFT هم براساس فرکانسهای مورد نظرتون نسبت به Amplitude دامنه میتونید با تعریف یک Threshold مشخص کنید آیا اون فرکانس مورد نظر مثلا برای عدد 2 هست یا نه و همینطور الی آخر.

موفق باشید.

ژوپیتر
سه شنبه 27 اردیبهشت 1390, 12:31 عصر
سلام
خیلی روی پاسخ شما فکر کردم. به این نتایج رسیدم:
الگوریتم کار من باید اینطور باشه:
1. خواندن سمپلها در یک ثانیه (منظورتون از سمپل، داده هاست؟ SampleRate در سخت افزار من 11025. )
2. در ج در یک FIFO
3. میان یابی (روش توضیح داده شده توسط شما رو نفهمیدم. لطفا بیشتر اوضیح بدین. تشکر)
4. محاسسبه FFT . (منظورتون رو از FFT نفهمیدم. همین طور Amplitude و Threshold رو که چی هستند و چه کمکی میتونن واسه من بکنند.)

منتظر پاسختون هستم.
با تشکر


علیک سلام،

1- درسته، اما اگه میخواین تو گوگل به نتیجه برسین همون Sample رو سرچ کنین بهتره. همونطور که قبلا هم خودتون گفتین باید سیگنال DTMF رو پردازش کنین که براتون توضیح میدم.
2- درسته، FIFO باعث میشه که به صورت پیوسته کارتون انجام بشه.
3- محاسبه Interpolation یا همون میان یابی زمانی به کار میره که پای دقت میاد وسط، در هر نمونه برداری دیجیتالی یک ضعف بزرگ هست، اون اینه که برای تشخیص فرکانسهای بالاتر دقت میاد پایین و برای تشخیص فرکانسهای پایین تر دقت میره بالا، مثلا در سمپل ریت 11025 دقت در تشخیص فرکانسهای بالاتر از 3000 بسیار کمتر از پایین تر از 3000 میشه، مثلا استپ بین دو فرکانس 3000 و 3010 برابر 10 استپه و فرکانس بعدی 3020، اما مثلا در 4000 استپ ها بزرگتر میشه و دقت بین فرکانسها پایین تر میاد مثلا 4000 بعد 4025 بعد 4055 تا آخر و این به این علته که هرچی فرکانس بالا تر میره تعداد سمپلها برای اون کمتر میشه، پس برای تشخیص فرکانسی که 3000 هست یا 3010 از این روش استفاده میشه که با زیاد کردن سمپلها دقت رو بالا میبرن و تشخیص میدن در آپ سمپل شده 11025 به 44100 که دقت 4 برابر بیشتر میشه آیا فرکانس 3008 بوده که در سمپل 11025 اون رو 3010 در نظر بگیرن یا 3004 بوده که اون رو در سمپل 11025 به مقدار 3000 در نظر بگیرن. این جاست که هر نویزی به راحتی قابل تشخیصه و به اشتباه تشخیص داده نمیشه.
4- چون سیگنال از نوع DTMF هست، هر کلیدی که فشرده بشه دو فرکانس تولید میکنه که به راحتی قابل تشخیصا. نمیدونم آیا تا بحال Visualizer نرم افزار Winamp رو دیدید یا نه، اونهم با استفاده از FFT
Fast Fourier Transform اون بارهای گرافیکی رو بالا و پایین میبره، مثلا اگه اون بارها 16 تا باشن کل رنج 0 تا 16000 رو به 16 باند تقسیم کرده که هر بار یک رنجی از فرکانسها رو نشون میده که ارتفاع بار همون دامنه یا Amplitude اون فرکانسهاست، با این روش میشه با تعیین مقدار دامنه فرکانس مورد نظر در اون رنج متوجه حضور یا عدم حضور اون فرکانس شد حتی اگه همراه با چندین فرکانس دیگه باشه که حتی افراد در حال صحبت هم باشن و کلید رو فشار بدن بازم قابل تشخیصه. اگه DTMF رو در CoolEdit pro بسازی و با Winamp پلی کنه میبینی که به ازای هر کلید دو بار به ارتفاع دامنه فرکانس میرسن و بقیه بارها پایین هستن. حالا اگه یک Threshold یا بازه تعریف کنی که فرکانسهای کلیدها حداقل با چه دامنه ای و حداکثر با چه دامنه ای باشن، اون وقت هم بیشتر جلوی نویز و خطا گرفته میشه و هم اینکه حاصلش رو به راحتی میشه به باینری صفر ویک تبدیل کرد و کد هر کلید رو با فاصله همینگ سریع تشخیص داد (با یه XOR ). اگر هم که با If then راحت تری که با شرط دامنه ها و فرکانسهای حاصل FFT همون نتیجه رو میگیری.

http://en.wikipedia.org/wiki/Interpolation
http://en.wikipedia.org/wiki/Fast_Fourier_transform

موفق باشید.