Trăn chuyển pha sóng hình sin

Tôi đang cố tạo âm thanh hai kênh bao gồm hai sóng hình sin rời rạc trong MATLAB. Các sóng hình sin sẽ giống hệt nhau, ngoại trừ việc tôi muốn người dùng có thể thay đổi pha của một trong các sóng hình sin. Tôi đã đăng một mô tả đầy đủ trên Stack Overflow

ngăn xếp chồng lên nhau. com

Làm cách nào để thay đổi pha của sóng hình sin [có phản hồi trực quan] khi đang phát?

matlab âm thanh xử lý tín hiệu pha

được hỏi bởi m-ga vào ngày 09. 32PM - 11 tháng 10, 21 UTC

Tôi nhận ra rằng đó là hình thức kém để đăng trên hai diễn đàn. Tuy nhiên, tôi ngày càng lo ngại rằng MATLAB sẽ không thể làm những gì tôi muốn. Ví dụ: ngay cả với các tiện ích bổ sung như Hộp công cụ xử lý kỹ thuật số và Hộp công cụ âm thanh, tôi vẫn lo lắng về khả năng xử lý âm thanh của MATLAB và khả năng xảy ra hành vi không mong muốn. Tôi nghĩ PsychPortAudio có thể đưa ra một giải pháp tốt hơn. Nếu vậy, tôi sẽ cập nhật chủ đề Stack Overflow

Đối với các thay đổi pha do người dùng kiểm soát thành một sóng hình sin, tôi nghĩ những điều sau đây có thể hoạt động trong PsychPortAudio

  1. Tạo một chu kỳ đơn của sóng hình sin bằng các thủ tục MATLAB [e. g. dựa trên hàm sin]
  2. Truyền dữ liệu sóng hình sin chu kỳ đơn tới PsychPortAudio ở định dạng mà PsychPortAudio có thể xuất dữ liệu đó
  3. Yêu cầu PsychPortAudio phát lại sóng hình sin một chu kỳ vô hạn để sóng này lặp lại thành một âm liên tục
  4. Bật độ trễ do người dùng kiểm soát trong đầu ra PsychPortAudio. Độ trễ phải là các phân số của một chu kỳ sóng hình sin. Ví dụ: với sóng hình sin 500 Hz, một chu kỳ là 2 mili giây. Vì vậy, độ trễ do người dùng kiểm soát sẽ nằm trong khoảng từ 0 đến 2 mili giây. Người dùng sẽ không nhận thấy những độ trễ này, nhưng sẽ có tác dụng thay đổi pha của sóng hình sin như mong muốn

Điều này sẽ làm việc? . Đối với [2], tôi tự hỏi liệu giải pháp đơn giản nhất là ghi dữ liệu sóng hình sin vào đĩa [e. g. dưới dạng tệp FLAC] và yêu cầu PsychPortAudio đọc lại tệp đó? . Tuy nhiên, chúng thường được mô tả với ứng dụng để vẽ màn hình. Tôi không chắc chúng sẽ áp dụng như thế nào để đệm một vòng lặp âm thanh

Đúng, đó là khá nhiều

Tôi đấu thầu thành công tài trợ của chính phủ cho nghiên cứu của tôi. Điều này là cạnh tranh và khó đạt được. Nó trả cho tôi một khoản trợ cấp [tương đương với mức lương tối thiểu cao hơn một chút] và học phí trực tiếp đến trường đại học. Chương trình được giảng dạy bao gồm một bài giảng duy nhất về MATLAB [thực sự là giới thiệu - chỉ cách sử dụng giao diện] và có giấy phép trang web bao gồm khoảng 200 cài đặt trên toàn trường đại học. Chúng sử dụng khóa mạng. Vì vậy, nếu tất cả 200 cài đặt đang được sử dụng khi bạn cố mở MATLAB, bạn sẽ không thể và phải đợi cho đến khi ai đó đóng MATLAB, giải phóng giấy phép. Không có giấy phép cho bất kỳ hộp công cụ nào, chỉ có gói MATLAB cơ bản

Không ai trong số những người giám sát của tôi làm lập trình. Một số ít người trong bộ phận có thể lập trình luôn siêu bận rộn. Trường đại học thỉnh thoảng sẽ tổ chức các khóa học giới thiệu [e. g. cho Python, v.v.] nhưng những thứ này đắt tiền và không chuyên dụng. Đây là một trong những trường đại học lớn hơn, danh tiếng hơn ở đất nước tôi. Bạn còn khá nhiều thiết bị của riêng mình và phải tự mình giải quyết các vấn đề nghiên cứu. Nhân viên học tập không hài lòng về tình huống này, nhưng họ không thể làm gì nhiều. Tài trợ cho nghiên cứu được kiểm soát bởi các giảng viên cao cấp, những người tập trung vào việc tuyển dụng sinh viên nước ngoài. Tôi cảm thấy tệ cho các du học sinh hơn là cho tôi, vì ít nhất tôi hiểu hệ thống và tôi không có kỳ vọng cao về nó

Tôi đã mua giấy phép MATLAB dành cho sinh viên vào năm 2018 [khoảng $50, với một vài hộp công cụ] nhưng sự hỗ trợ từ Mathworks chỉ kéo dài một năm. Nó ít nhất là xung quanh việc hạn chế giấy phép mạng. Tôi đã cân nhắc việc cập nhật lên phiên bản mới nhất và sử dụng gói hỗ trợ Mathworks. Tuy nhiên, tôi lo ngại rằng việc xử lý âm thanh của MATLAB có thể khó thiết lập [và/hoặc không đáng tin cậy] cho những gì tôi muốn

Những gì tôi có thể sẽ làm là tự thanh toán cho PsychPaidSupport và cố gắng thu hồi chi phí thông qua nhà tài trợ của tôi sau này. Có cơ hội họ sẽ trả lại. Tuy nhiên, trường đại học sẽ không cho sinh viên biết họ có bao nhiêu tiền [Tôi không bịa chuyện này. ]. Vì vậy, mỗi khi bạn yêu cầu điều gì đó, bạn lại lo lắng rằng những yêu cầu tiếp theo sẽ bị từ chối. Tôi nên nói thêm, đây không phải là một thủ tục được khuyến nghị bởi chính phủ. Đó là cách trường đại học chọn để quản lý các quỹ của chính phủ

Tôi vừa mua tư cách thành viên cộng đồng với sự hỗ trợ ưu tiên. Cảm ơn bạn đã xem xét yêu cầu này trước khi nhận thanh toán. Tôi nhận thấy rằng yêu cầu làm cạn kiệt hỗ trợ trả phí trong một giờ

Tôi có thể gửi yêu cầu chính thức sau khi khóa kích hoạt hoàn tất [5-10 ngày]. Tuy nhiên, tôi nghĩ tôi nên cập nhật yêu cầu tại đây. Sẽ thật tuyệt nếu câu trả lời có thể được công bố rộng rãi để các nhà nghiên cứu khác có quyền truy cập vào giải pháp. Không cần vội vàng để phản hồi – bất cứ điều gì trong một hoặc hai tuần tới sẽ ổn thôi

Yêu cầu cơ bản dành cho các pha dịch chuyển như đã được mô tả. Tôi nên nhấn mạnh rằng độ trễ tương đối được quan tâm ở đây – nghĩa là độ trễ giữa các pha của hai sóng hình sin được phát ra trên các kênh âm thanh riêng biệt [e. g. các kênh L/R của card âm thanh tiêu chuẩn]. Độ trễ tuyệt đối [e. g. thời gian giữa lệnh bàn phím và thay đổi đầu ra âm thanh trên một trong hai kênh] tất nhiên sẽ lớn hơn 0. Tuy nhiên, thiết kế thử nghiệm sao cho độ trễ tuyệt đối không phải là yếu tố quan trọng. Đó là phép đo chính xác độ lệch pha chính xác giữa các sóng hình sin, điều cực kỳ quan trọng. Rất tiếc phải tiếp tục về vấn đề này, nhưng tôi sẽ thu thập nhiều dữ liệu dựa trên các cài đặt này và muốn chắc chắn nhất có thể rằng âm thanh phát ra từ máy tính đúng như mong đợi

[Tất nhiên, tôi sẽ tiến hành kiểm tra. Những kiểm tra này sẽ so sánh đầu ra từ đầu dò được ghi lại bằng micrô giống hệt nhau và được xem trên máy hiện sóng. Do đó, quá trình kiểm tra sẽ hoàn toàn tương tự và sẽ xác minh rằng hệ thống kỹ thuật số [MATLAB và PsychPortAudio, cùng với phần cứng] đang hoạt động như mong đợi. ]

Tôi đã xem qua mã BasicAMAndMixScheduleDemo.m. Tôi thấy điều này đơn giản và dễ đọc một cách đáng ngạc nhiên so với mã MATLAB và tôi rất lạc quan về khả năng điều chỉnh nó

  • Có lẽ tôi nên bắt đầu bằng cách thay thế MakeBeep [sử dụng lệnh Snd không dùng nữa] bằng thứ gì đó dựa trên mã demo mà bạn sẽ cung cấp cho sự thay đổi pha trên sóng hình sin?

  • Tôi băn khoăn về việc sử dụng WaitSecs[‘YieldSecs’, 0.1] [ở dòng 289 và 346]. Theo tôi hiểu, mã này làm gián đoạn vòng lặp sao cho trạng thái được truy vấn cứ sau 0. 1 giây [100 mili giây]. Điều này hoàn toàn không có vấn đề gì nếu mã chỉ được sử dụng để xác định cái nào trong số 2. Âm thời lượng 0 giây đang phát. Tuy nhiên, sẽ có một vấn đề nghiêm trọng nếu thay vào đó mã được sử dụng cho độ chính xác về thời gian, tôi. e. nếu thời gian chỉ chính xác đến 100 mili giây. Tôi muốn xác minh rằng độ chính xác cao hơn 100 mili giây

Tôi sẽ chạy mã trên BSD/Linux. Tôi chưa cài đặt cái này [máy mục tiêu là Lenovo Thinkpad X1 Carbon thế hệ thứ 4 năm 2016] vì vậy hãy kiểm soát việc phân phối. Tôi có thể thấy rằng Ubuntu chỉ nhận được hỗ trợ chính thức của Lenovo từ Thinkpad X1 Carbon thế hệ thứ 5 trở đi [một năm sau máy của tôi]. Tuy nhiên, có những báo cáo không chính thức về việc Ubuntu hoạt động trên thế hệ thứ 4. Cũng có vẻ như thành công với ArchLinux. Có khả năng tạo ra sự khác biệt mà tôi cài đặt Ubuntu hoặc ArchLinux không?

m-ga

Yêu cầu cơ bản dành cho các pha dịch chuyển như đã được mô tả. Tôi nên nhấn mạnh rằng độ trễ tương đối được quan tâm ở đây – nghĩa là độ trễ giữa các pha của hai sóng hình sin được phát ra trên các kênh âm thanh riêng biệt [e. g. các kênh L/R của card âm thanh tiêu chuẩn]. Độ trễ tuyệt đối [e. g. thời gian giữa lệnh bàn phím và thay đổi đầu ra âm thanh trên một trong hai kênh] tất nhiên sẽ lớn hơn 0. Tuy nhiên, thiết kế thử nghiệm sao cho độ trễ tuyệt đối không phải là yếu tố quan trọng. Đó là phép đo chính xác độ lệch pha chính xác giữa các sóng hình sin, điều cực kỳ quan trọng. Rất tiếc phải tiếp tục về vấn đề này, nhưng tôi sẽ thu thập nhiều dữ liệu dựa trên các cài đặt này và muốn chắc chắn nhất có thể rằng âm thanh phát ra từ máy tính đúng như mong đợi

[Tất nhiên, tôi sẽ tiến hành kiểm tra. Những kiểm tra này sẽ so sánh đầu ra từ đầu dò được ghi lại bằng micrô giống hệt nhau và được xem trên máy hiện sóng. Do đó, quá trình kiểm tra sẽ hoàn toàn tương tự và sẽ xác minh rằng hệ thống kỹ thuật số [MATLAB và PsychPortAudio, cùng với phần cứng] đang hoạt động như mong đợi. ]

Vì vậy, bản demo để xem là bản demo mới này theo liên kết sau, đây sẽ là một phần của bản phát hành PTB tiếp theo

https. // thô. githubusercontent. com/kleinerm/Psychtoolbox-3/master/Psychtoolbox/PsychDemos/BasicSoundPhaseShiftDemo. m

Nó sẽ làm những gì bạn muốn, đồng thời thể hiện một số hình ảnh trực quan của dạng sóng, khi chúng được gửi đến hai kênh đầu ra của card âm thanh, âm hình sin riêng biệt và sau đó là âm chuyển pha hoặc cho mục đích gỡ lỗi/thử nghiệm cũng chỉ là kết hợp . Đây là tín hiệu được gửi đến hệ điều hành và trước khi chính hệ thống hoặc phần cứng âm thanh có khả năng gây rối với nó, e. g. , chuyển pha, v.v. do bộ lọc thông dải điện tử và bộ khuếch đại trong mạch tương tự của card âm thanh. Như bạn đã nói, rõ ràng bạn sẽ phải kiểm tra điều này bằng micrô đã hiệu chỉnh và máy hiện sóng độc lập với máy tính, nhưng tôi nghĩ rằng thật tuyệt khi xác minh trước khi gửi tín hiệu đến đầu ra và hiển thị chức năng chụp/lặp lại đầu ra này của

Như bạn có thể thấy, những thay đổi trực tiếp về âm lượng kênh trên các thiết bị phụ đầu ra âm thanh cho phép thay đổi biên độ tương đối của hỗn hợp âm thanh để tạo ra tín hiệu cosin lệch pha một cách nhanh chóng

Nếu bạn so sánh điều này với BasicAMAndMixScheduleDemo, bạn có thể thấy cách gắn các thiết bị “phụ của bộ điều chế” vào các thiết bị phụ của đầu ra âm thanh và sau đó xác định các đường bao biến điệu AM để áp dụng một số đường bao cổng, để tạo ra các âm bùng nổ hoặc tương tự với thời gian được kiểm soát chính xác

Bạn cũng có thể dừng và bắt đầu phát lại âm thanh của các thiết bị phụ một cách độc lập, mặc dù điều đó có thể không có nhiều ý nghĩa - nó sẽ tự chuyển pha

Tôi đã xem qua mã BasicAMAndMixScheduleDemo.m. Tôi thấy điều này đơn giản và dễ đọc một cách đáng ngạc nhiên so với mã MATLAB và tôi rất lạc quan về khả năng điều chỉnh nó

  • Có lẽ tôi nên bắt đầu bằng cách thay thế MakeBeep [sử dụng lệnh Snd không dùng nữa] bằng thứ gì đó dựa trên mã demo mà bạn sẽ cung cấp cho sự thay đổi pha trên sóng hình sin?

  • Tôi băn khoăn về việc sử dụng WaitSecs[‘YieldSecs’, 0.1] [ở dòng 289 và 346]. Theo tôi hiểu, mã này làm gián đoạn vòng lặp sao cho trạng thái được truy vấn cứ sau 0. 1 giây [100 mili giây]. Điều này hoàn toàn không có vấn đề gì nếu mã chỉ được sử dụng để xác định cái nào trong số 2. Âm thời lượng 0 giây đang phát. Tuy nhiên, sẽ có một vấn đề nghiêm trọng nếu thay vào đó mã được sử dụng cho độ chính xác về thời gian, tôi. e. nếu thời gian chỉ chính xác đến 100 mili giây. Tôi muốn xác minh rằng độ chính xác cao hơn 100 mili giây

Tôi sẽ chạy mã trên BSD/Linux. Tôi chưa cài đặt cái này [máy mục tiêu là Lenovo Thinkpad X1 Carbon thế hệ thứ 4 năm 2016] vì vậy hãy kiểm soát việc phân phối. Tôi có thể thấy rằng Ubuntu chỉ nhận được hỗ trợ chính thức của Lenovo từ Thinkpad X1 Carbon thế hệ thứ 5 trở đi [một năm sau máy của tôi]. Tuy nhiên, có những báo cáo không chính thức về việc Ubuntu hoạt động trên thế hệ thứ 4. Cũng có vẻ như thành công với ArchLinux. Có khả năng tạo ra sự khác biệt mà tôi cài đặt Ubuntu hoặc ArchLinux không?

Sự lựa chọn hệ điều hành tuyệt vời và vâng, tôi cho rằng Thinkpad sẽ hoạt động tốt. Arch Wiki và các nguồn khác gợi ý như vậy và Lenovo nói chung có tiếng tốt. hỗ trợ Linux. Tôi đã tự kiểm tra mã demo này trong Linux, đây sẽ là một lựa chọn tốt để tối đa hóa khả năng những gì được chỉ định trong tập lệnh của bạn thực sự là những gì được xuất ra qua loa

Một số phiên bản macOS trên một số phần cứng đôi khi làm những việc ngu ngốc như thêm độ suy giảm hoặc kiểm soát khuếch đại/khuếch đại của riêng chúng vào tín hiệu đầu ra âm thanh, bởi vì Apple. Vì vậy, đó là một ví dụ về sự lựa chọn rủi ro của hệ điều hành để phát lại âm thanh có thể tái tạo

Tôi muốn giới thiệu Ubuntu 20. 04. 3-LTS cho mục đích của bạn, đơn giản vì đó là bản phân phối Linux thường được khuyên dùng - bản mà tôi chủ yếu thử nghiệm. ArchLinux cũng có thể hoạt động tốt, nhưng PTB không được kiểm tra chính thức về tính tương thích hoặc được hỗ trợ trong trường hợp có sự cố - chỉ Ubuntu gần đây mới được

btw. chữ viết. Matlab, bạn hoàn toàn có thể chạy thử nghiệm của mình một cách đơn giản với GNU/Octave miễn phí, một phần của Ubuntu, trừ khi bạn cần một số hộp công cụ Matlab đặc biệt mà Octave không có theo kiểu tương thích. Tập lệnh demo ở đây được phát triển và thử nghiệm hoàn toàn trên Octave mà không có bất kỳ hộp công cụ đặc biệt nào

Tốt nhất,
-mario

Đã tìm thấy một lỗi nhỏ trong tính toán kích thước bộ đệm âm thanh của tôi, lỗi này kích hoạt ở tốc độ mẫu 48kHz, trái ngược với 44 đã thử nghiệm trước đó. 1kHz. Nhìn thấy

github. com/kleinerm/Psychtoolbox-3

BasicSoundPhaseShiftDemo. m. Sửa mã tính toán lặp lại, bình luận thêm

đã cam kết 05. 38PM - 05/11/21 UTC

kleinem

+20 -1

Hóa ra việc chạy ở tốc độ lấy mẫu 48000 Hz kết thúc không tốt, bởi vì khi đó nsamples wo rõ ràng đã là một số nguyên mẫu, . Chúng ta cần đặc biệt trường hợp này, đối với trường hợp chỉ cần lặp lại 1 tiết. Đồng thời mô tả mục đích của những dòng mã đó và các lựa chọn thay thế tốt hơn.

Hiện đã được thử nghiệm để hoạt động trên Linux/Windows/macOS ở 44100 và 48000 Hz, hai mức phổ biến nhất. Nhận một bản sao mới của tệp hoặc sao chép và dán 3 dòng đã sửa đổi theo cách thủ công

-mario

Cảm ơn vì điều này, Mario. mã đẹp quá. Nó tốt hơn rất nhiều so với bất cứ điều gì tôi có thể đã viết

Có một số điều tôi không hiểu và tôi cũng đã có một số góp ý. Tôi thắc mắc nếu bạn có thể giải thích, vì vậy tôi không phạm sai lầm khi sửa đổi

Line 141: support = 2 * pi * freq * [0:round[wavedur * samplingRate-1]] / samplingRate;

Tôi nghĩ mục đích của việc này là tạo ra một vectơ chứa đúng số lượng mẫu?

Tôi tự hỏi, tại sao không sử dụng MakeBeep0, thay vì MakeBeep1? . e. nó gần giống với MakeBeep4. Tôi có thể thấy rằng việc trừ đi sự thống nhất khỏi tốc độ lấy mẫu sẽ buộc phải làm tròn số và làm như vậy có thể tăng độ chính xác với một số tốc độ lấy mẫu hoặc thời lượng sóng. Tuy nhiên, tôi cũng đang xem xét các trường hợp điều chế biên độ. Trong những trường hợp đó, thời lượng sóng có thể khá dài [bao gồm thời gian yên tĩnh có thể là 0. 25 giây giữa các tiếng bíp] và có khả năng xảy ra lỗi trong quá trình làm tròn số. Phạm vi cho một lỗi như vậy dường như có thể tránh được bằng cách sử dụng ____10. Có nhược điểm nào không?

Tôi cũng thắc mắc tại sao vectơ hỗ trợ được chia tỷ lệ thành MakeBeep6? . Sau đó, vectơ hỗ trợ dường như được thu nhỏ lại, bằng 0. 5

MakeBeep7

Và sau đó là tỷ lệ âm lượng đầu ra, bằng 0. 5

MakeBeep8

Tôi đang cố hiểu cách đặt các mức đầu ra này vì tôi muốn có thể thay đổi mức đầu ra tương đối của hai kênh [i. e. kênh trái và phải]. Tôi cần làm được điều này để cho phép người dùng tinh chỉnh các đầu ra tương đối từ hai loại đầu dò khác nhau [tai nghe dẫn khí và máy rung dẫn truyền xương] sẽ được sử dụng. Có lẽ tôi có thể làm như vậy bằng cách thay đổi âm lượng tương đối của các kênh pafixedsine và pashiftsine? . Vì vậy, tôi có thể đặt nó sao cho trái/phải thay đổi pha [như hiện tại] và lên/xuống thay đổi âm lượng tương đối

Tôi nghĩ rằng một cảnh báo trước khi thay đổi âm lượng tương đối là các mức âm thanh có thể bị cắt. Đây là lý do tại sao tôi muốn chắc chắn rằng tôi hiểu những gì tôi đang thay đổi. Những gì tôi đã lên kế hoạch là thiết lập thay đổi âm lượng tăng/giảm để tăng đầu ra của một kênh và giảm đầu ra của kênh kia. Với các cài đặt phù hợp [tôi. e cả hai kênh trong -1. 0 đến +1. 0 của PsychPortAudio], tôi nghĩ có thể thay đổi các mức tương đối sao cho một kênh đầu ra im lặng và kênh kia ở [hoặc gần] mức đầu ra tối đa mà nó có thể có mà không bị cắt?

Ngoài ra còn có một vấn đề về những gì hệ điều hành có thể làm, theo cảnh báo này trên hướng dẫn PsychPortAudio-Volume

thận trọng. Cài đặt âm lượng chỉ ảnh hưởng đến những gì được gửi đến hệ thống âm thanh máy tính của bạn. Bản thân hệ điều hành hoặc phần cứng âm thanh có thể áp dụng các cài đặt âm lượng, mức tăng, bộ lọc bổ sung, v.v. , tùy thuộc vào thiết lập cụ thể của bạn. Chúng chỉ có thể kiểm soát được thông qua các công cụ dành riêng cho hệ thống bên ngoài, PsychPortAudio không biết về các cài đặt bổ sung đó và không thể kiểm soát chúng theo bất kỳ cách nào

Ý định của tôi trước tiên là chuyển sang Linux, sau đó đặt âm lượng đầu ra ở mức tối đa bằng cách sử dụng cài đặt hệ điều hành. Điều này không lý tưởng [tôi muốn để lại một chút khoảng trống với bộ tiền khuếch đại soundcard] nhưng đó là cách duy nhất tôi có thể nghĩ để đảm bảo các cài đặt không thay đổi khi tôi khởi động lại máy tính

Sự dịch pha của một hàm sin là gì?

Dịch pha là sự dịch chuyển ngang sang trái hoặc phải đối với các hàm tuần hoàn . Nếu c = π 2 thì sóng hình sin dịch trái một đoạn. Nếu thì sóng hình sin dịch chuyển sang phải 3. Đây là hướng ngược lại so với những gì bạn có thể mong đợi, nhưng nó phù hợp với quy tắc biến đổi cho tất cả các hàm.

Công thức cho sự thay đổi pha là gì?

Công thức dịch pha là gì? . [C/B] thể hiện sự dịch pha. F[x] = Asin[Bx − C]+D. [C/B] represents the phase shift.

Chủ Đề