ฉันกำลังพยายามปรับเทียบลำโพงล้ำเสียงด้วยจุดประสงค์ของการส่งสัญญาณที่คาดเดาได้ แต่อนิจจาฉันยังคงมีปัญหาอาจเกิดจากการขาด DSP-fu ของฉัน
พื้นหลังเล็กน้อย
ฉันต้องการให้สามารถเล่นเสียงที่ใกล้เคียงที่สุดกับการบันทึกที่ปรับเทียบที่ฉันมี เท่าที่ฉันเข้าใจทฤษฎีฉันต้องค้นหาฟังก์ชั่นการถ่ายโอนลำโพงและถอดรหัสสัญญาณที่ฉันต้องการปล่อยออกมา บางสิ่งเช่นนี้ (ในโดเมนความถี่):
X -> H -> XH
ในกรณีที่Xมีการส่งสัญญาณปล่อยออกมาHเป็นฟังก์ชั่นการถ่ายโอนลำโพงและXHเป็นครั้งX Hส่วน ( ./) Hในขณะนี้ควรให้ฉัน
ตอนนี้เพื่อที่จะปล่อยสัญญาณที่สอบเทียบแล้วมันควรจะถูกหารด้วยH:
X/H -> H -> X
เกิดอะไรขึ้น
- วางลำโพงและไมโครโฟนที่ปรับเทียบห่างกัน 1 เมตรบนขาตั้งกล้อง
 - บันทึกการกวาดแบบเส้นตรงกว่า 30+ 150KHz-20KHz, ยาว 20ms และบันทึกที่ 500 KS / s
 - สัญญาณที่มีการจัดตำแหน่งและเฉลี่ยโดยใช้สคริปต์ Matlab / Octave ด้านล่างภายใต้สคริปต์จะเห็นสัญญาณที่ได้
 
files = dir('Mandag*');
rng = [1.5e6, 1.52e6];
[X, fs] = wavread(files(1).name, rng);
X = X(:,1);
for i=2:length(files)
    [Y, fs] = wavread(files(i).name, rng);
    sig = Y(:,1);
    [x, off] = max(xcorr(X', sig'));
    off = length(X) - off;
    if(off < 0)
        sig = [zeros(1, -off), sig(1:end+off)'];
    elseif (off > 0)
        sig = [sig(off:end)', zeros(1, off-1)];
    end
    X = X + sig';
end
X = X/length(files);

ฟูริเยร์เปลี่ยนรูป
XและXHทำการคำนวณตามที่ได้กล่าวไว้ข้างต้นผลลัพธ์ดูน่าเชื่อถือ ด้านล่างเป็นเนื้อเรื่องปกติของH(สีม่วง) และX/H(สีเขียว)
พล็อตได้ถูกตัดทอนเป็นความถี่ที่เกี่ยวข้อง
โปรดแจ้งให้เราทราบหากฉันทำผิดไป
คำถามของฉัน
หลังจากคำนวณX/Hแล้วฉันต้องแปลงกลับเป็นโดเมนเวลาฉันคิดว่านี่จะเป็นวิธีที่ง่ายifft(X./H)และwavwriteแต่ความพยายามทั้งหมดของฉันยังไม่ได้รับคำตอบที่น่าเชื่อถือ เวกเตอร์ความถี่Hf, HและXสามารถพบได้ที่นี่ในรูปแบบ mat7 ไบนารี
บางทีฉันแค่เหนื่อยและมีวิธีแก้ปัญหาง่าย ๆ ที่นี่ แต่ในขณะนี้ฉันไม่เห็น ความช่วยเหลือ / คำแนะนำใด ๆ ที่ชื่นชมมาก
  

 