ຂ້ອຍຈະຄິດໄລ່ຄວາມແຕກຕ່າງຂອງໄລຍະລະຫວ່າງສອງສັນຍານໃນ MATLAB ໄດ້ແນວໃດ?


ຕອບ 1:

ມີສັນຍານຫຍັງແດ່ທີ່ຄວາມແຕກຕ່າງຂອງໄລຍະແມ່ນພາລາມິເຕີທີ່ເປັນປະໂຫຍດຕໍ່ການສືບສວນ? ຂ້ອຍສົມມຸດວ່າພວກເຮົາພິຈາລະນາໂປຣໄຟລ໌ໄລຍະເປັນ ໜ້າ ທີ່ຂອງຄວາມຖີ່. ຕົວຢ່າງແມ່ນການປຽບທຽບໄລຍະຂອງລະດັບຂອງການກັ່ນຕອງຕອບສະ ໜອງ ຕໍ່ສາມມາດຖານການອອກແບບທີ່ແຕກຕ່າງກັນ. ເວົ້າວ່າໄລຍະຂັ້ນຕ່ ຳ, ໄລຍະເສັ້ນແລະໄລຍະສູງສຸດ. ພວກເຮົາສາມາດອອກແບບຕົວກອງ FIR ທີ່ມີການຕອບສະ ໜອງ ຂະ ໜາດ ດຽວກັນ, ແຕ່ວ່າມີການຕອບສະ ໜອງ ສາມໄລຍະທີ່ແຕກຕ່າງກັນ. ຂ້ອຍເຮັດສິ່ງນີ້ເມື່ອຂ້ອຍສອນການອອກແບບການກັ່ນຕອງແລະໃຫ້ນັກຮຽນຮູ້ວ່າໄລຍະຂັ້ນຕ່ ຳ ແມ່ນກົງກັນຂ້າມກັບໄລຍະເສັ້ນ. ໄລຍະສູງສຸດແມ່ນ ສຳ ລັບຄວາມສົມບູນ. ຂ້ອຍອອກແບບຕົວກອງຜ່ານທີ່ຕ່ ຳ ໂດຍໃຊ້ Parks McLellan (Remez) algorithm ແລະຫຼັງຈາກນັ້ນພັບຕົວເລກສູນທີ່ບໍ່ແມ່ນຫົວ ໜ່ວຍ ກັບຄືນໄປບ່ອນສູນພາຍໃນເພື່ອສ້າງເປັນຕົວກອງໄລຍະຂັ້ນຕ່ ຳ, ແລະໃນຂະນະທີ່ເຮັດກົງກັນຂ້າມ, ຂ້ອຍກໍ່ພັບສູນສູນກາງກັບຄືນໄປບ່ອນສ່ວນນອກ ສູນເພື່ອປະກອບຕົວກອງໄລຍະສູງສຸດ. ຂ້າພະເຈົ້າຫຼັງຈາກນັ້ນສະແດງໃຫ້ເຫັນການຕອບສະ ໜອງ ທີ່ກະຕຸ້ນຂອງທັງສາມຕົວກອງ, ລະດັບຄວາມງົດງາມຂອງແຕ່ລະອັນແລະການຕອບສະ ໜອງ ຂອງໄລຍະທີ່ບໍ່ໄດ້ວາງອອກ (ສອດຄ່ອງກັບ DC). ມັນສະແດງໃຫ້ເຫັນຢ່າງຈະແຈ້ງວ່າເປັນຫຍັງພວກເຂົາມີຊື່ຂອງພວກເຂົາ. ຂ້ອຍສາມາດສົ່ງຕົວຢ່າງໄປຍັງທຸກຄົນທີ່ຕ້ອງການລະຫັດ Matlab.

Fred Harris


ຕອບ 2:

ໃຊ້ [corr.lags] = xcorr; ເພື່ອເຮັດການພົວພັນກັນຂ້າມ; ຊອກຫາດັດສະນີສູງສຸດ, [~, ix] = ສູງສຸດ (corr); ການຊັກຊ້າ = ຄວາມລ່າຊ້າ (ix); ນັ້ນເຮັດໃຫ້ຄວາມແຕກຕ່າງລະຫວ່າງເຄື່ອງ ໝາຍ ສັນຍານໃນຕົວຢ່າງ. ປ່ຽນເປັນລັງສີ (ຫຼືສິ່ງໃດກໍ່ຕາມ) ໂດຍອີງໃສ່ໄລຍະເວລາຂອງສັນຍານຂອງທ່ານ: IF N_sig ແມ່ນ ຈຳ ນວນຕົວຢ່າງໃນແຕ່ລະໄລຍະ:

phase_deg = 2 * pi * ຄວາມຊັກຊ້າ / N_sig; ຫຼື 360 * ຊັກຊ້າ / N_sig ຖ້າເປັນອົງສາ.