ฉันกำลังพยายามปรับเทียบลำโพงล้ำเสียงด้วยจุดประสงค์ของการส่งสัญญาณที่คาดเดาได้ แต่อนิจจาฉันยังคงมีปัญหาอาจเกิดจากการขาด 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 ไบนารี
บางทีฉันแค่เหนื่อยและมีวิธีแก้ปัญหาง่าย ๆ ที่นี่ แต่ในขณะนี้ฉันไม่เห็น ความช่วยเหลือ / คำแนะนำใด ๆ ที่ชื่นชมมาก