การสลายตัวของสัญญาณ 1D เบลอโดยเคอร์เนลเสียน


12

ฉันได้ทำการสุ่มสัญญาณด้วย aa Gaussian และเพิ่มสัญญาณรบกวน (เสียง Poisson ในกรณีนี้) เพื่อสร้างสัญญาณที่มีเสียงดัง ตอนนี้ฉันต้องการถอดรหัสสัญญาณที่มีเสียงดังนี้เพื่อแยกสัญญาณดั้งเดิมโดยใช้ Gaussian เดียวกัน

ปัญหาคือฉันต้องการรหัสที่ทำงานของ deconvolution ใน 1D (ฉันได้พบบางอย่างใน 2D แต่เป้าหมายหลักของฉันคือ 1D)

คุณช่วยแนะนำแพ็คเกจหรือโปรแกรมบางอย่างที่สามารถทำได้หรือไม่? (โดยเฉพาะอย่างยิ่งใน MATLAB)

ขอบคุณล่วงหน้าสำหรับความช่วยเหลือ


1
ใช้ฟังก์ชัน deconv ใน MATLAB
GOEKHAN GUEL

ไม่ทำงานกับเสียงรบกวนที่เพิ่มเข้ามา ...
user1724

คุณไม่สามารถถอดรหัสสัญญาณได้ คุณสามารถประมาณค่าความแปรปรวนแบบผกผันของสัญญาณสองสัญญาณ : การตอบสนองต่อแรงกระตุ้นของระบบและเอาต์พุตระบบ คุณกำลังพยายามทำสิ่งใด
Phonon

2
@Phonon: ค่อนข้างช้ากับความคิดเห็นนี้ แต่มีวิธีการแยกแยะ deconvolutionที่ไม่ต้องการความรู้เกี่ยวกับการตอบสนองของระบบ อย่างที่คุณอาจจินตนาการคุณสามารถทำได้ดีกว่าถ้าคุณรู้การตอบสนองต่อแรงกระตุ้น
Jason R

1
@JasonR จุดยุติธรรม
Phonon

คำตอบ:


14

ผมเคยอธิบายครั้งเดียวในStackOverflow


สัญญาณของคุณสามารถแสดงเป็นเวกเตอร์ได้และการบิดคือการคูณด้วยเมทริกซ์ N-diagonal (โดยที่ N คือความยาวของฟิลเตอร์) ฉันสมมติว่าเพื่อคำตอบว่าตัวกรองนั้นเล็กกว่าสัญญาณมาก

ตัวอย่างเช่น:

เวกเตอร์ / สัญญาณของคุณคือ:

V1
V2
...
Vn

ตัวกรองของคุณ (องค์ประกอบที่โน้มน้าว) คือ:

  [b1 b2 b3];

ดังนั้นเมทริกซ์จึง nxn: (ให้มันเรียกว่า A):

[b2 b3 0  0  0  0.... 0]
[b1 b2 b3 0  0  0.... 0]
[0  b1 b2 b3 0  0.... 0]
.....
[0  0  0  0  0  0...b2 b3]

การสนทนาคือ:

A*v;

และการยกเลิกการสนทนาคือ

A^(-1) * ( A) * v;

เห็นได้ชัดว่าในบางกรณีการยกเลิกข้อตกลงเป็นไปไม่ได้ เหล่านี้เป็นกรณีที่คุณมีเอกพจน์ A. แม้เมทริกซ์ที่ไม่เอกพจน์ แต่ใกล้เคียงกับเอกพจน์อาจเป็นปัญหาได้เนื่องจากพวกมันจะมีข้อผิดพลาดเป็นตัวเลขขนาดใหญ่ คุณสามารถประมาณค่าได้โดยคำนวณจำนวนเงื่อนไขของเมทริกซ์

หาก A มีเงื่อนไขต่ำคุณสามารถคำนวณค่าอินเวอร์สและนำไปใช้กับผลลัพธ์ได้


ตอนนี้เรามาดูตัวอย่างใน Matlab:

ก่อนอื่นฉันได้สร้างฟังก์ชั่นที่คำนวณเมทริกซ์คอนโวลูชัน

function A = GetConvolutionMatrix(b,numA)
    A = zeros(numA,numA);
    vec = [b  zeros(1,numA-numel(b))];
    for i=1:size(A,1)
        A(i,:) = circshift(vec,[1 i]);
    end
end

ตอนนี้เราลองมาดูกันว่าเกิดอะไรขึ้นกับเมล็ดข้าวที่แตกต่างกัน:

    b = [1 1 1];
    A = GetConvolutionMatrix(b,10);
    disp(cond(A));

หมายเลขเงื่อนไขคือ:

 7.8541

อันนี้เป็นปัญหาตามที่คาดไว้ หลังจากหาค่าเฉลี่ยมันเป็นการยากที่จะได้รับสัญญาณดั้งเดิมกลับมา

ทีนี้ลองหาค่าเฉลี่ยที่น้อยกว่า:

b = [0.1 0.8 0.1];
A = GetConvolutionMatrix(b,10);
disp(cond(A));

ผลลัพธ์คือ:

1.6667

ซึ่งสอดคล้องกับสัญชาตญาณของเราการหาค่าเฉลี่ยของสัญญาณดั้งเดิมนั้นจะง่ายกว่ามากในการย้อนกลับ

เรายังสามารถดูว่าเมทริกซ์ผกผันมีลักษณะอย่างไร:

 figure;imagesc(inv(A));

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

นี่คือหนึ่งบรรทัดจากเมทริกซ์:

  0.0003   -0.0026    0.0208   -0.1640    1.2910   -0.1640    0.0208   -0.0026    0.0003   -0.0001

เราจะเห็นได้ว่าพลังงานส่วนใหญ่ในแต่ละบรรทัดนั้นมีความเข้มข้นในค่าสัมประสิทธิ์ประมาณ 3-5 รอบศูนย์ ดังนั้นเพื่อที่จะแยกแยะเราสามารถโน้มน้าวสัญญาณอีกครั้งด้วยการประมาณนี้:

   [0.0208   -0.1640    1.2910   -0.1640    0.0208]

เคอร์เนลนี้ดูน่าสนใจ! มันเป็นผู้ประกอบการเหลา สัญชาตญาณของเราถูกต้องการลับจะยกเลิกการเบลอ


3
คำตอบนี้สมควรได้รับการโหวตมากขึ้น
แบบไดนามิก

1
ทำไมคุณถึงคิดว่าเมทริกซ์นั้นมีสามส่วน? สำหรับ Circular Convolution จะเป็นการหมุนเวียน ในกรณีส่วนใหญ่มันจะ Toeplitz ลองดูวิธีการแก้ปัญหาของฉัน
Royi

อ่านคำตอบ - ฉันกำลังวิเคราะห์กรณีที่ตัวกรองมี 3 องค์ประกอบ ในกรณีส่วนใหญ่ในการประมวลผลภาพฟิลเตอร์นั้นเล็กกว่าสัญญาณมาก ใช่แล้วมันคือเมทริกซ์ Toepliz แต่ก็เป็น N-diagonal โดยที่ N คือความยาวของฟิลเตอร์ การหมุนวนยังไม่มีประโยชน์ในการประมวลผลภาพ
Andrey Rubshtein

ฉันได้อัปเดตคำตอบเพื่อหลีกเลี่ยงความสับสนเพิ่มเติมแล้ว
Andrey Rubshtein

คุณเคยเห็น Gaussian Kernel ซึ่งใช้งานใน 3 ตัวอย่างหรือไม่?
Royi

5

หากคุณเพิ่มสัญญาณรบกวนแบบสุ่มคุณจะไม่สามารถรับสัญญาณดั้งเดิมได้ ... คุณสามารถลองแยกสัญญาณในโดเมนความถี่ได้ (หากเสียงและสัญญาณมีความถี่แตกต่างกัน) แต่ดูเหมือนว่าสิ่งที่คุณกำลังค้นหาคือตัวกรองWiener


5

ฉันคิดว่านี่ยังคงเป็นปัญหาเปิดอยู่

มีงานวิจัยมากมายที่พยายามกู้สัญญาณดั้งเดิมให้ได้มากที่สุด

วิธีการหนึ่งที่คลาสสิกจะผ่านวิธีเวฟตาม

นอกจากนี้ยังมีวิธีการพจนานุกรมเช่นนี้อย่างใดอย่างหนึ่ง

คุณสามารถรับมุมมองเชิงลึกของปัญหาได้มากขึ้นโดยทำตามการวิจัยของ David L. Donho, Michael Elad, Alfred M. Bruckstein เป็นต้น


1
กระดาษล่าสุดที่ใช้เวฟเล็ต Morlet ที่ซับซ้อนโดย Nguyen ดูเหมือนว่า Farge & Schneider จะให้ผลลัพธ์ที่ดี Google รหัสบรรณานุกรมนี้: 2012PhyD.41.186N เพื่อนของฉันใช้วิธีนี้กับเวฟ 2D บนสื่อระหว่างดวงดาวด้วยผลลัพธ์ที่ยอดเยี่ยม ฉันยังไม่ได้ดูในรายละเอียด
PhilMacKay

3

หากฉันเข้าใจปัญหาอย่างถูกต้องเราสามารถทำให้ปัญหาเป็นระเบียบดังนี้:

เรามีโมเดลสัญญาณ

y=Hx+η

ที่ไหน y คือการสังเกต H เป็นผู้ประกอบการสนทนาและ ηเป็นเสียงรบกวน เราต้องการประเมินx โดยใช้การสังเกตและความรู้เกี่ยวกับลักษณะของเสียง

ในกรณีนี้, ηถูกจำลองจากการแจกแจงแบบปัวซง อย่างไรก็ตามวิธีการในพจนานุกรมที่กล่าวถึงข้างต้นรองรับข้อเสียของเสียงเกาส์เซียน ในกรณีนี้เกาส์เซียนเป็นผู้ประกอบการสนทนาไม่ใช่เสียง

ฉันไม่ได้ทำงานกับการกู้คืนสัญญาณภายใต้เสียง Poisson แต่ฉัน googled และพบว่าเอกสารนี้อาจมีประโยชน์ แนวทางที่คล้ายกันในบริบทนั้นมีประโยชน์สำหรับปัญหานี้


3

การสลายตัวของข้อมูลที่มีเสียงดังเป็นที่ทราบกันว่าเป็นปัญหาที่ไม่ถูกต้องเนื่องจากเสียงรบกวนจะถูกขยายโดยพลการในสัญญาณที่สร้างขึ้นใหม่ ดังนั้นวิธีการทำให้เป็นมาตรฐานจะต้องมีเสถียรภาพโซลูชั่น ที่นี่คุณสามารถค้นหาแพ็คเกจ MATLAB ที่แก้ไขปัญหานี้โดยใช้อัลกอริทึมการทำให้เป็นมาตรฐานของ Tikhonov:

https://github.com/soheil-soltani/TranKin


3

ฉันจะไปที่จุดเริ่มต้นของคำถาม มีฟังก์ชั่น deconvolution ใน MATLAB ซึ่งใช้สำหรับการประมวลผลภาพ อย่างไรก็ตามคุณสามารถใช้ฟังก์ชั่นเหล่านี้สำหรับสัญญาณ 1D ตัวอย่างเช่น,

% a random signal
sig_clean = zeros(1,200); 
sig_clean(80:100)=100;

figure
subplot(1,3,1)
plot(sig_clean,'b-.','LineWidth',2)
legend('Clean Signal')

% convolve it with a gaussian
x=1:30;
h = exp(-(x-15).^2/20); h=h/sum(h);
sig_noisy = conv(sig_clean,h,'same');

% and add noise
sig_noisy = awgn(sig_noisy,0,'measured');

subplot(1,3,2)
plot(sig_noisy,'r')
hold on, plot(sig_clean,'b-.','LineWidth',3)
legend('Blurred and noise added signal','Clean Signal')

( sig_noisy = sig_clean * h + noise) จากนั้นทำไมไม่แยกสัญญาณออกด้วยhฟังก์ชั่นและรับสัญญาณ (เกือบ) ฉันใช้ Wion deconvolution ที่นี่

sig_deconvolved=deconvwnr(sig_noisy,h,1);

subplot(1,3,3)
plot(sig_noisy,'r')
hold on, plot(sig_clean,'b-.','LineWidth',2)
hold on, plot(sig_deconvolved,'k--','LineWidth',2)
legend('Blurred and noise added signal','Clean Signal','Deconvolved Signal')

ป้อนคำอธิบายรูปภาพที่นี่ อีกทางเลือกหนึ่งถ้าคุณไม่ทราบhฟังก์ชัน แต่รู้ว่าอินพุตและเอาต์พุตเวลานี้ทำไมไม่แยกสัญญาณอินพุตด้วยเอาต์พุตซึ่งจะให้h^-1ฟังก์ชัน จากนั้นคุณสามารถใช้มันเป็นตัวกรองเพื่อกรองสัญญาณรบกวน ( sig_clean = sig_noisy * h^-1)

h_inv=deconvwnr(sig_clean,sig_noisy,1);

figure;
subplot(1,2,1)
plot(h_inv)
legend('h^-^1')


sig_filtered=conv(sig_noisy,h_inv,'same');
subplot(1,2,2)
plot(sig_noisy,'r')
hold on, plot(sig_clean,'b-.','LineWidth',2)
hold on, plot(sig_filtered,'k--','LineWidth',2)
legend('Blurred and noise added signal','Clean Signal','Filtered Signal')

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

ฉันหวังว่ามันจะช่วย


2

การบิดคือการคูณและการรวมกันของสัญญาณสองสัญญาณหนึ่งต่อกัน ฉันกำลังพูดถึงสัญญาณกำหนดสอง หากคุณต้องการที่จะแยกแยะความแตกต่างจากที่อื่นแล้วสิ่งนี้สอดคล้องกับการแก้ปัญหาของระบบสมการ ดังที่คุณอาจทราบว่าระบบสมการไม่สามารถแก้ไขได้เสมอไป ระบบสมการสามารถ overdetermined, underdetermined หรือแก้ไขได้อย่างแน่นอน

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

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


2

นี่คงเป็นเรื่องยากที่จะทำ Convolution ด้วย Gaussian เทียบเท่ากับการคูณด้วยการแปลงฟูริเยร์ของ Gaussian ในโดเมนความถี่ สิ่งนี้เกิดขึ้นได้กับเกาส์ของแก่นแท้นี่คือตัวกรองความถี่ต่ำและตัวกรองที่มีประสิทธิภาพจริงๆ เมื่อคุณเพิ่มเสียงรบกวนข้อมูลทั้งหมดที่อยู่ใน "วงหยุด" ของ Gaussian จะถูกทำลาย ไม่มีวิธีการกู้คืนที่

De-convolution นั้นมีการคูณกับการผกผันของการตอบสนองความถี่ นี่คือปัญหา: การผกผันของการตอบสนองความถี่เพิ่มขึ้นจริงๆใหญ่จริง ๆ ที่เกาส์ดั้งเดิมมีขนาดเล็กมาก ที่ความถี่เหล่านี้คุณจะต้องขยายเสียงโดยทั่วไปเป็นจำนวนมาก แม้ว่าทุกอย่างจะปราศจากเสียงรบกวนอย่างสมบูรณ์ แต่คุณก็อาจประสบกับปัญหาทางตัวเลข


2

แนวทาง

มีวิธีการมากมายสำหรับ Deconvolution (คือตัวดำเนินการสลายตัวเป็นแบบเส้นตรงและ Time / Space Invariant)
พวกเขาทั้งหมดพยายามที่จะจัดการกับความจริงที่ว่าปัญหานั้นไม่ดีในหลาย ๆ กรณี

วิธีที่ดีกว่าคือวิธีการที่เพิ่มการทำให้เป็นปกติในรูปแบบของข้อมูลที่จะกู้คืน
มันอาจเป็นแบบจำลองทางสถิติ (นักบวช) หรือความรู้ใด ๆ
สำหรับรูปภาพแบบจำลองที่ดีคือชิ้นส่วนที่ราบเรียบอย่างชาญฉลาดหรือเป็นระยะของการไล่ระดับสี

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

แบบ

แบบจำลองกำลังสองน้อยที่สุดนั้นง่าย
ฟังก์ชั่นวัตถุประสงค์เป็นฟังก์ชั่นของข้อมูลที่ได้รับจาก:

(x)=12ชั่วโมง* * * *x-Y22

ปัญหาการปรับให้เหมาะสมจะได้รับจาก:

argminxf(x)=หาเรื่องนาทีx12ชั่วโมง* * * *x-Y22

ที่ไหน x เป็นข้อมูลที่จะกู้คืน ชั่วโมง คือเคอร์เนลเบลอ (Gaussian ในกรณีนี้) และ Yเป็นชุดของการวัดที่กำหนด
ตัวแบบจะทำการวัดค่าที่ได้รับเฉพาะส่วนที่ถูกต้องของการชักชวน คือถ้าxRn และ ชั่วโมงRk แล้วก็ YRม. ที่ไหน ม.=n-k+1.

นี่คือการดำเนินการเชิงเส้นในพื้นที่ จำกัด จึงสามารถเขียนได้โดยใช้แบบฟอร์มเมทริกซ์:

หาเรื่องนาทีx(x)=หาเรื่องนาทีx12Hx-Y22

ที่ไหน HRม.×n เป็นเมทริกซ์การโน้มน้าว

สารละลาย

โซลูชัน Least Squares นั้นมอบให้โดย:

x^=(HTH)-1HTY

ที่สามารถเห็นได้มันต้องเมทริกซ์ผกผัน
ความสามารถในการแก้ปัญหานี้ขึ้นอยู่กับจำนวนเงื่อนไขของผู้ปฏิบัติงานHTH ซึ่งเชื่อฟัง cond(H)=cond(HTH).

การวิเคราะห์จำนวนเงื่อนไข

หมายเลขอะไรที่อยู่เบื้องหลังเงื่อนไขนี้
สามารถตอบได้โดยใช้พีชคณิตเชิงเส้น
แต่ในความคิดของฉันที่ใช้งานง่ายกว่านั้นฉันจะคิดวิธีนี้ในโดเมนความถี่

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

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

ด้านบนจะเห็นหมายเลขเงื่อนไข (ใช้ [dB] หน่วย) เป็นฟังก์ชันของพารามิเตอร์ Gaussian Filter STD
ตามที่คาดไว้ยิ่งสูงกว่า STD ยิ่งเลวร้ายยิ่งหมายเลขเงื่อนไขเป็นสูงกว่าหมายถึง LPF ที่แข็งแกร่ง (ค่าลงไปที่ท้ายเป็นปัญหาเชิงตัวเลข)

โซลูชันเชิงตัวเลข

สร้างเคอร์เนล Gaussian Blur ทั้งหมด

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

พารามิเตอร์คือ n=300, k=วันที่ 31 และ ม.=270.
ข้อมูลเป็นแบบสุ่มและไม่มีเสียงรบกวนเพิ่ม

ใน MATLAB ระบบเชิงเส้นได้รับการแก้ไขโดยpinv()ใช้ SVD Pseudo Inverse และ\ผู้ปฏิบัติงาน

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

อย่างที่เห็นได้ว่าการใช้ SVD นั้นมีความไวน้อยกว่าที่คาดไว้มาก

ทำไมถึงมีข้อผิดพลาด?
ดูวิธีแก้ปัญหา (สำหรับ STD สูงสุด):

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

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

สัญญาณรบกวน

ถ้าเราเพิ่มเสียงรบกวนสิ่งต่าง ๆ จะดูแตกต่าง!
เหตุผลที่ได้ผลดีมาก่อนเนื่องจาก MATLAB สามารถจัดการ DR ของข้อมูลและแก้สมการได้แม้ว่าพวกเขาจะมีจำนวนเงื่อนไขมาก

แต่หมายเลขเงื่อนไขที่มีขนาดใหญ่หมายถึงตัวกรองผกผันขยายอย่างมาก (ในการย้อนกลับการลดทอนแรง) ความถี่บางอย่าง
เมื่อเสียงเหล่านั้นมีเสียงหมายความว่าเสียงจะถูกขยายและการฟื้นฟูจะไม่ดี

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

ดังที่เห็นด้านบนตอนนี้การสร้างใหม่จะไม่ทำงาน

สรุป

ถ้าใครรู้ผู้ดำเนินการย่อยสลายอย่างแน่นอนและ SNR นั้นดีมากวิธีการแยกส่วนอย่างง่ายจะทำงานได้
ปัญหาหลักของ deconvolution คือความยากของตัวดำเนินการลดทอนความถี่
ยิ่งจำเป็นต้องใช้ SNR มากเพียงใดในการกู้คืน (โดยพื้นฐานแล้วนี่คือแนวคิดเบื้องหลังตัวกรอง Wiener )
ความถี่ที่ถูกตั้งค่าเป็นศูนย์ไม่สามารถกู้คืนได้!

ในทางปฏิบัติเพื่อให้ได้ผลลัพธ์ที่มั่นคงควรเพิ่มนักบวชบางคน

รหัสที่มีอยู่ในของฉันStackExchange การประมวลผลสัญญาณ Q2969 GitHub Repository


2

โดยทั่วไปวิธีการหนึ่งในการจัดการปัญหาที่ทำให้เกิดปัญหาการแยกส่วนประกอบอย่างน้อยสององค์ประกอบคือการใช้สเปคตรัมG¹, G²⋯, Gⁿของสัญญาณ # 1, # 2, ... , #n, จัดระเบียบผลรวม สี่เหลี่ยมΓ (ν) = | G¹ (ν) | ² + | G² (ν) | ² + ⋯ + | Gⁿ (ν) | ²ในแต่ละความถี่νและทำให้มาตรฐานG₁ (ν) ≡G¹ (ν) * / Γ (ν), G₂ (ν) ≡G² (ν) * / Γ (ν), ... , G_n (ν) ≡Gⁿ (ν) * / Γ (ν) ปัญหาเกี่ยวกับความไม่ชัดเจนและเสียงรบกวนนั้นสอดคล้องกับข้อเท็จจริงที่ว่าΓ (ν) ~ 0 เป็นไปได้สำหรับบางความถี่ν หากต้องการจัดการสิ่งนี้ให้เพิ่ม "สัญญาณ" อีกอันเพื่อแยกG⁰ (ν) = ค่าคงที่ - สัญญาณ "สัญญาณรบกวน" ตอนนี้Γ (ν) จะถูก จำกัด ที่ด้านล่างอย่างเคร่งครัด นี่เกือบจะเชื่อมโยงกับการทำให้เป็นมาตรฐาน Tikhonov แต่ฉันไม่เคยพบหรือสร้างผลลัพธ์เทียบเท่าหรือการติดต่ออื่น ๆ มันง่ายขึ้นและตรงขึ้นและใช้งานง่ายขึ้น

หรือคุณอาจปฏิบัติต่อ G's ในฐานะเวกเตอร์ที่มีผลิตภัณฑ์ภายในที่เหมาะสมเช่น« G, G '»≡∫ G (ν) * G' (ν) dνและใช้ (G₀, G₁, ⋯, G_n) เป็นคู่ (เช่นการผกผันทั่วไป) ของ (G⁰, G¹, ⁿ, Gⁿ) - สมมติว่าเวกเตอร์ขององค์ประกอบนั้นเป็นอิสระเชิงเส้น

สำหรับการสลายตัวแบบเกาส์เซียนใครจะตั้งค่า n = 1, G⁰ = สัญญาณ "เสียงรบกวน" และG¹ = สัญญาณ "เสียน"


1

คำตอบที่ได้รับจาก Andrey Rubshtein จะล้มเหลวอย่างน่าสังเวชเมื่อมีเสียงดังเนื่องจากปัญหาที่อธิบายไว้นั้นมีความอ่อนไหวต่อข้อผิดพลาดด้านเสียงและการสร้างแบบจำลอง มันเป็นความคิดที่ดีที่จะสร้างเมทริกซ์คอนโวลูชัน แต่การใช้การทำให้เป็นมาตรฐานในการผกผันเป็นสิ่งที่จำเป็นอย่างยิ่งในปัญหาเช่นนี้ วิธีการทำให้เป็นมาตรฐานที่ง่ายและตรงไปตรงมา (แม้ว่าจะมีราคาแพงในการคำนวณ) คือการสลายตัวของค่าเอกพจน์ที่ถูกตัดทอน (TSVD) วิธีการเช่นการทำให้เป็นมาตรฐานTikhonovและการแปรปรวนรวมการเปลี่ยนแปลงมีมูลค่าการตรวจสอบจาก การทำให้เป็นมาตรฐาน Tikhonov (และรูปแบบทั่วไป) มีรูปแบบสแต็กที่สง่างามมากที่ใช้งานง่ายใน Matlab ตรวจสอบหนังสือ: ปัญหาเชิงเส้นและไม่เชิงเส้นผกผันกับการใช้งานจริงโดย Samuli Siltanen และ Jennifer Mueller


1

จริงๆแล้วคำถามยังไม่ชัดเจน แต่คำตอบนั้นเป็นสิ่งที่คุณต้องการ คุณสามารถสร้างระบบสมการพีชคณิตเชิงเส้นตามที่บางคนแนะนำว่าถูกต้อง แต่เมทริกซ์ที่สร้างขึ้นจากสัญญาณที่รู้จักนั้นเรียกว่า ซึ่งหมายความว่าเมื่อคุณพยายามที่จะกลับด้านข้อผิดพลาดการตัดทอนฆ่าโซลูชันและคุณได้รับตัวเลขสุ่มในผลลัพธ์ วิธีการทั่วไปคือข้อ จำกัด คุณลดบรรทัดฐานของการแก้ปัญหา || x || ด้วยข้อ จำกัด || ขวาน - y || <เดลต้า ดังนั้นคุณกำลังมองหา x ที่มีบรรทัดฐานที่เล็กที่สุดซึ่งไม่อนุญาตให้มีความแตกต่างระหว่าง Axe และ y เป็นใหญ่ มันง่ายมากที่คุณจะต้องเพิ่มพารามิเตอร์ที่เรียกว่าการทำให้เป็นมาตรฐานบนเส้นทแยงมุมหลักของเมทริกซ์ที่ได้จากการใช้กำลังสองน้อยที่สุด มันถูกเรียกว่าการทำให้เป็นมาตรฐาน Tikhonov ฉันมีตัวอย่างโค้ดที่ทำเช่นนั้น

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