رفتن به مطلب

چگونه قسمتی از یک سیگنال را جدا کنم


ارسال های توصیه شده

سلام من یه سری سیگنال از سایت physionet.org برای یه سری بیمار گرفتم که به مدت یک ساعت سه تا موج ECG و دو تا موج دیگه را ثبت کرده.

به طور مثال اگه بخوام از این 5 تا سیگنالی که در فایل پیوست اومده فقط سه تای MCL1 ، II و V را آن هم فقط 5 دقیقه اول از این یک ساعت را داشته باشم و دو تا موج دیگه هم حذف بشه باید چکار کنم؟:5c6ipag2mnshmsf5ju3

---

داخل صفحه command متلب بنویسید

plotATM('219m')

تا سیگنال ها نمایش داده بشه.

 

با تشکر:icon_gol:

فایل پیوست:

http://uplod.ir/idqz3y4od4eu/219.zip.htm

لینک به دیدگاه

اگه فرکانس سیگنال ها را داشته باشی با یک فیلتر بالا گذر یا میان گذر میتونی تفکیک سیگنال کنی .

به کمک تابع fft هم میشه. یعنی اول فرکانس ها را مشخص میکنی بعد با همون فیلتر میان گذر شکل موج هر سیگنال را جدا جدا بدست میاری .

لینک به دیدگاه
سلام من یه سری سیگنال از سایت physionet.org برای یه سری بیمار گرفتم که به مدت یک ساعت سه تا موج ECG و دو تا موج دیگه را ثبت کرده.

به طور مثال اگه بخوام از این 5 تا سیگنالی که در فایل پیوست اومده فقط سه تای MCL1 ، II و V را آن هم فقط 5 دقیقه اول از این یک ساعت را داشته باشم و دو تا موج دیگه هم حذف بشه باید چکار کنم؟:5c6ipag2mnshmsf5ju3

---

داخل صفحه command متلب بنویسید

plotATM('219m')

تا سیگنال ها نمایش داده بشه.

 

با تشکر:icon_gol:

فایل پیوست:

http://uplod.ir/idqz3y4od4eu/219.zip.htm

 

سلام دوست عزیز

 

اول فانکشنت رو به صورت mfile بنویس، که متغیر ها رو داخل workspace داشته باشی، موج هایی که میگی همه فکر کنم داخل همون متغیر val باشه.

اگه درست متوجه شده باشم، یه همین چیزی باید بشه:

 

متغیر Mytime رو من اضافه کردم، برای اینکه تعداد سمپل های مثلا 5 دقیق رو بدست بیارم، ولی هر زمانی رو میشه بهش داد، اینجا 5 دقیقه رو 5 در 60 نوشتم:

 

clearName = '219m';
infoName = strcat(Name, '.info');
matName = strcat(Name, '.mat');
Octave = exist('OCTAVE_VERSION');
load(matName);
fid = fopen(infoName, 'rt');
fgetl(fid);
fgetl(fid);
fgetl(fid);
[freqint] = sscanf(fgetl(fid), 'Sampling frequency: %f Hz  Sampling interval: %f sec');
interval = freqint(2);
fgetl(fid);


if(Octave)
   for i = 1:size(val, 1)
      R = strsplit(fgetl(fid), char(9));
      signal{i} = R{2};
      gain(i) = str2num(R{3});
      base(i) = str2num(R{4});
      units{i} = R{5};
   end
else
   for i = 1:size(val, 1)
     [row(i), signal(i), gain(i), base(i), units(i)]=strread(fgetl(fid),'%d%s%f%f%s','delimiter','\t');
   end
end


fclose(fid);
val(val==-32768) = NaN;


for i = 1:size(val, 1)
   val(i, :) = (val(i, :) - base(i)) / gain(i);
end


%*********************************
Mytime = size(val, 2) / 3600 * (5 * 60);
%*********************************


x = (1:Mytime) * interval;
plot(x', val(1:3,1:Mytime)');


for i = 1:length(signal)
   labels{i} = strcat(signal{i}, ' (', units{i}, ')'); 
end


legend(labels(1:3));
xlabel('Time (sec)');
% grid on

لینک به دیدگاه

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

بنابر این مسئله تفکیک سیگنال خیلی مهم هست. خب برای این کا چه باید کرد.

من قبلا به کمک برنامه گرافیکی labview تا حدودی این کار رو انجام دادم. به این ترتیب که اول یک سیگنال را دریافت میکنیم مثلا سیگنال صوتی مجیط، خب مسلما این سیگنال صوتی از چندین سیگنال صوتی دیگه تشکیل شده. و ما قصد داریم سیگنال صوتی کولر اتاق را تشخیص بیدم و در یک گراف رسم کنیم. همانطور که قبلا گفتم به کمک اصل "تبدیل سریع فوریه" این سیگنال را از حوزه زمان به حوزیه فرکانس منتقل می کنیم. در نتیجه این کار ما شاهد فرکانس های مختلفی با دامنه های متفاوت خواهیم بود. چون این کار به طور real taim البته تقریبا می باشد ما می تونم با خاموش کردن کولر شاهد ناپدید شدن یک فرکانس خاص در گراف باشیم. خب به این شکل فرکانش موجود را شناسایی میکنیم. در نتیجه با داشتین ان فرکانس و با کمک عکس تبدیل فوریه یا به کمک یک فیلتر میان گذر سیگنال مدکور را رسم کنیم. مصلا فرض کنیم فرکانس 300 هست اگر بازه کار فیلتر را 299 تا 301 تعریف کنیم شاهد سیگنالی با فرکانس سیصد هستیم.

اگر فراموشم نشد فردا شب فایل exe یا setup همین نر افزار را اینجا میزارم

یه قسمت برای لود سیگنال های که به صوزت فایل های با پسوند غیر صوتی هم هستند بهش اضافه میکنم.

لینک به دیدگاه

برنامه ای که نوشتم با run time بیش از 200 میگ شد برای اپلود اینجا یکم حجمش زیاده :w000:

 

ولی یه عکس از نمای گرافیکش گرفتم که چیزای که تو پست قبل گفتم را بهتر نشون میده . حالا تا بعد ببینم راهی هست حجمش را کم کنم..البته یه راهی هست اونم اینه که run time نرم افزار labview روی pc تون نصب باشه فایل exe , و setup ش حجمی نداره شاید در حد دو میگ

 

 

l550ssyota48t4f6pr3a.png

لینک به دیدگاه

لینک run time 32- bit 2013 جهت دانلود

http://ni-labview-run-time-engine.software.informer.com/download/

 

بعد از دانلود ونصب اون

فایل 1.5 مگابایتی زیر را نصب کنید و سیگنال های صوتی یا فایل هایی که در قسمت comboo box اجازه میده را از fail path لود کنید و تجذیه کنید.

http://uplod.ir/cn38nkfcysvc/dsp.rar.htm

لینک به دیدگاه

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...