ฉันจะพลอตความถี่เทียบกับขนาดของการแปลงเวฟเล็ตได้อย่างไร?


14

ฉันกำลังใช้การแปลงเวฟเล็ตอย่างต่อเนื่องของ Morlet ฉันมีwscalogramสัญญาณแล้วและตอนนี้ฉันต้องการพล็อตความอิสระเช่นภาพต่อไปนี้ แต่ฉันไม่รู้จะทำอย่างไร:

ป้อนคำอธิบายรูปภาพที่นี่

ฉันใช้scal2freqฟังก์ชั่น MATLAB เพื่อแปลงเครื่องชั่งเป็นความถี่หลอก นอกจากนี้ฉันยังมีความถี่ในสัญญาณของฉันที่มีอัตราส่วนลดลงมาก (4%) ดังนั้นพวกเขาจึงไม่สามารถมองเห็นได้อย่างชัดเจนในพล็อต ฉันจะพูดเกินจริงโหมดที่ได้รับการป้องกันอย่างสูงเหล่านี้ได้อย่างไร

ฉันใช้ MATLAB นี่คือรหัสของฉัน:

% Import the text4.txt to matlab workspace. and save it under name "data"
t=linspace(0,30,301);
Fs=ceil(inv(t(2)-t(1)));
x=data(:,4); % use x=data(:,3),x=data(:,5) too. first column is time,second is refrence
wname = 'morl';
scales = 1:1:256;
coefs = cwt(x,scales,wname,'lvlabs');
freq = scal2frq(scales,wname,1/Fs);
surf(t,freq,abs(coefs));shading('interp');
axis tight; xlabel('Seconds'); ylabel('Pseudo-Frequency (Hz)');
axis([0 30 0 1 0 60])
xlabel('Time'); ylabel('Frequency');
figure;
sc=wscalogram('image',coefs,'scales',freq,'ydata',x);
hold on 

เนื้อเรื่องปัจจุบันของฉันดูเหมือนว่า:

ป้อนคำอธิบายรูปภาพที่นี่


ข้อมูลการแปลงเวฟเล็ตของคุณใช้รูปแบบใด
Jim Clay

สวัสดี @JimClay! ฉันไม่แน่ใจว่าฉันเข้าใจคำถามของคุณหรือไม่ แต่ถ้าคุณหมายถึงว่ามันดูเหมือนอะไรมันก็เหมือนกับลิงค์ที่ 2 ที่ฉันเก็บไว้ในคำถาม และฉันต้องการพล็อตเช่นลิงค์ที่ 1 (2nd [myplot]) cubeupload.com/im/bSSlMI.jpg 1st [ต้องการ]) cubeupload.com/im/KbhGMI.jpg นี่คือสัญญาณของฉัน < fileswap.com/dl/Lwf7n96fAt/test4.txt.html > นี่คือ Mfile ของฉัน < fileswap.com/dl/gMrslBFAdb/mfile.txt.html > ขอแสดงความนับถือ
ช่างไฟฟ้า

ฉันไม่ได้จริงๆแน่ใจว่าคำถามของคุณคือ ...
ธารินทร์ Ziyaee

สวัสดี @ user4619; ดูพล็อตแรก คุณเห็นพล็อต [freq-magnitude] ทางด้านขวาของ scalogram เวฟ [ซึ่งได้จาก matlab] ภาพที่สองคือ scalogram เวฟของฉัน แต่ฉันไม่รู้วิธีพล็อต [freq-magnitude] เหมือนด้านขวาของพล็อตแรก ช่วยได้บ้าง?
ช่างไฟฟ้า

@Electricman spectrogram ไม่เหมือนกับ scalogram หากคุณกำลังจะไปสู่ ​​scalogram จะไม่มีเวลาเทียบกับความถี่ แล้วคุณกำลังทำอะไรอยู่
Tarin Ziyaee

คำตอบ:


4

การปรับเปลี่ยนรหัสของคุณเล็กน้อย แต่ไม่มีการเปลี่ยนแปลงที่สำคัญและฉันได้รับผลลัพธ์ที่ถูกต้องทั้งสองทาง ใช้รหัสแม่แบบนี้ที่นี่และคุณไม่ควรเห็นปัญหาใด ๆ ฉันได้รับผลลัพธ์ที่ถูกต้อง

clear all; 
t=linspace(0,30,301); 
Fs = (inv(t(2)-t(1))); 
x=randn(100,1);  
wname = 'morl'; 
scales = 1:1:256; 
chefs = cwt(x,scales,wname,'lvlabs');

freq = scal2frq(scales,wname,1/Fs);

figure; 
coefsSquared = abs(coefs).^2; 
imagesc(coefsSquared); 
grid off;

%Pick one of the columsn to plot: 
figure; 
plot(coefsSquared(:,47))

เพื่อให้ได้ตัวเลขทางด้านขวามือของภาพแรกที่คุณใส่นั่นเป็นเพียงช่วงเวลาแบ่ง กล่าวอีกนัยหนึ่งหนึ่งคอลัมน์ของเมทริกซ์ความถี่ของคุณ

ตัวอย่างเช่นเราอาจได้เมทริกซ์สัมประสิทธิ์ต่อไปนี้ในความถี่เทียบกับเวลา:

ป้อนคำอธิบายรูปภาพที่นี่

ให้เราสมมติว่าเราต้องการดูสเปกตรัมสำหรับการแบ่งเวลาที่คอลัมน์ 47 จากนั้นนี่คือสิ่งที่ได้รับ:

ป้อนคำอธิบายรูปภาพที่นี่

ที่นี่คุณจะเห็นพลังของสัมประสิทธิ์เทียบกับความถี่สำหรับการแบ่งเวลาตามคอลัมน์ 47


ขอบคุณสำหรับการแก้ไขรหัส แต่ฉันยังไม่ได้รับคำตอบสำหรับคำถามของฉันคำถามคือฉันจะเขียนพล็อตขนาดหรือสเกลขนาดได้อย่างไร ฉันต้องการพล็อตเหมือนทางด้านขวาของภาพแรก [เป็นคำถาม] ขอบคุณล่วงหน้า
ช่างไฟฟ้า

1
@Electricman พล็อตทางด้านขวามือเป็นเพียงหนึ่งคอลัมน์ของเมทริกซ์ความถี่ VS เวลาของคุณ
Tarin Ziyaee

- @ user4619 ไม่ใช่ Freq กับเวลาช่วงเวลาคือ 0-20 และช่วงความถี่เป็น 0-2.5 แต่พล็อตด้านขวามือคือ freq กับขนาด ฉันไม่แน่ใจว่ามันมีขนาดหรือความหนาเท่าไร แต่เห็นได้ชัดว่ามันมีสัดส่วนกับไม้กั้นหรือไม้เท้า ^ 2 tnx
ช่างไฟฟ้า

@Electricman โปรดดูการแก้ไข ตอนนี้ชัดเจนขึ้นหรือไม่
Tarin Ziyaee

- @ user4619 ใช้งานได้ ขอบคุณสำหรับคำตอบ. ฉันใส่รหัสเล็กน้อยที่ส่วนท้ายของ mfile และได้พล็อตเดียวกันทางด้านขวามือของพล็อตที่กล่าวถึง cof2 = เอบีเอส (coefs) ^ 2. cof2trans = cof2' ; maxmods = max (cof2trans); รูป; พล็อต (maxmods, ความถี่) แกน ([0 60 0 1]) ขอแสดงความนับถือ
ช่างไฟฟ้า

4

การแปลงเวฟเล็ตแบบต่อเนื่อง (CWT) เป็นวิธีการสำหรับการวิเคราะห์ระดับเวลา ใช่คุณอ่านถูกต้องปรับสเกลไม่ได้ความถี่ อย่างไรก็ตามมันเป็นไปได้ที่จะแมปเครื่องชั่งกับความถี่และแม้กระทั่งค่อนข้างง่าย เนื่องจากคุณเป็นผู้ใช้ MATLAB คุณอาจต้องการใช้ฟังก์ชันนี้ซึ่งทำสิ่งต่อไปนี้:

F = scal2frq (A, 'wname', DELTA) ส่งคืนความถี่หลอกที่สอดคล้องกับสเกลที่กำหนดโดย A ฟังก์ชัน wavelet 'wname' (ดู wavefun สำหรับข้อมูลเพิ่มเติม) และระยะเวลาการสุ่มตัวอย่าง DELTA

อย่างที่คุณสามารถอ่านได้ความถี่ไม่ใช่ความถี่จริงในสัญญาณ แต่เป็นการประมาณ หากคุณต้องการความถี่จริงคุณควรใช้การแปลงฟูริเยร์ระยะสั้น (STFT)

ดังนั้นเมื่อหนึ่งควรใช้ CWT ตามหลักการทั่วไปเวฟเล็ตจะทำงานได้ดีเมื่อสัญญาณมีการเปลี่ยนแปลงชั่วคราว (เช่นมีการเปลี่ยนแปลงอย่างรวดเร็ว)

แก้ไข: ฮ่าฮ่าฉันไม่รู้ว่าฉันทำอะไรที่นี่ ขอโทษ :-D พลาดจุดคำถามของคุณอย่างสมบูรณ์ แค่อ่านชื่อเรื่อง ....


@ ได้รับข้อมูลของคุณถูกต้อง แต่อะไรนะ ฉันแค่ต้องการพล็อตเหมือนภาพด้านขวาของภาพแรก ความถี่เทียบกับขนาด และมันก็โอเคถ้าฉันได้เครื่องชั่งเทียบกับขนาดตราบเท่าที่ฉันสามารถใช้ scal2freq
ช่างไฟฟ้า

"หากคุณต้องการความถี่จริงคุณควรใช้การแปลงฟูริเยร์ระยะสั้น (STFT)" เวฟเล็ต Morletมีความถี่ในลักษณะเดียวกับ STFT แบบหน้าต่างเกาส์เซียนมีความถี่ "อะตอม" ของการแปลงทั้งสองเหมือนกัน
endolith

0

ไม่แน่ใจว่าคุณยังต้องการความช่วยเหลือหรือไม่ ...

หากคุณต้องการความถี่เทียบกับขนาดใช้คำสั่ง "mesh / surf" เพื่อพล็อตค่าสัมประสิทธิ์

จากนั้นเปลี่ยนการวางแนวของพล็อตเพื่อให้คุณได้ผลลัพธ์ที่ต้องการ สำหรับสิ่งนี้ดูคำสั่ง "มุมมอง"


ขอบคุณฉันแก้ปัญหานั้นเมื่อหลายเดือนก่อนและเผยแพร่ผลลัพธ์ของฉัน แต่ฉันจะลองอีกทางเลือกของคุณในครั้งต่อไป แต่โปรดย้ายคำตอบของคุณเพื่อแสดงความคิดเห็น โชคดี. @ asilva732
ช่างไฟฟ้า
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.