我正在做一个项目,研究使用Matlab软件和声音文件在超声波范围(20kHz到100kHz)内发出吱吱声的老鼠。
我已经(或将要获得)这些老鼠的几个.wav音频信号说话,在对这些波形的一般分析中,我还想将这些超声波信号(我们的听力之外)转换为人类听觉范围(20hz到20khz)。
我可以就如何进行此转换获得一些建议(通过Matlab编程,而不是使用设备)
调查一下,我找到了如下名字: - 频率划分 -heterodyning - 包络检测 - 时间扩展
但是看看它们似乎要么根据设备(蝙蝠探测器)的作用来解释,要么它们听起来非常相似。例如频分和时间扩展都涉及将输入信号除以10
因为我正在研究看似陌生的草皮,所以找到多种转换信号的方法会很棒(据我所知,上面的名字有自己相关的正面和负面特征)答案 0 :(得分:1)
你的问题是一个信号处理问题,而不是一个Matlab问题,这不是Stack Overflow的真正含义,所以你可能会得到一些负面投票。
确实有很多方法可以改变音频(或任何信号)的频率:
1)慢下来:对信号的破坏性最小的只是降低音频速度。如果您希望鼠标信号高达100 kHz,则需要以200 kHz或更高的频率对音频进行采样。完成录制后,只需重新保存wav文件,告知其采样率为44.1 kHz(或其他)。这将更慢地播放,但现在所有频率都是可听的(与下面讨论的单边带解调不同)。这绝对是你应该开始的地方......这是最简单的,听起来也是最好的。
fs = 200e3; %your original sample rate
myAudio = load('myFile.mat'); %your original audio
fs = 44.1e3; %simply declare that you want a lower sample rate
wavwrite(myAudio,fs,16,'myFile_44kHz.wav'); %save it out at the new rate
2)单边带:使用demod
命令“解调”信号以降低其频率。此命令有许多可用的解调方法。我会使用“单边带(抑制载体)”,因为这就是大鼠本身(和人类)创造声音的方式。要进行解调,您必须假设“载波频率”,就像它是无线电信号一样。如果大鼠squeek的最低频率是20 kHz,则可以假设载波为20 kHz。此操作会将所有音频降低20 kHz。因此,原始20-100 kHz的squeek现在将是0-80 kHz。所以,你不会听到整个事情,但你会听到它的一部分。
fs = 200e3; %your original sample rate
myAudio = load('myFile.mat'); %your original audio
[b,a]=butter(2,20e3/(fs/2),'high'); %define highpass filter
myAudio = filtfilt(b,a,myAudio); %remove the low frequencies
myAudio = demod(myAudio,20e3,fs,'amssb'); %shift it down 20 kHz
wavwrite(myAudio,fs,16,'myWave_shifted.wav'); %save it out
3)相位声码器(或其他音高转换):要听到整个20-100 kHz范围(80 kHz带宽,比人类听觉的20 kHz带宽大4倍),你必须要去更极端的方法。这些方法会让音频声音变得怪异,但你可以尝试一下。有几种算法。查找“阶段声码器”。或者,使用Audacity,Raven等音频处理软件包之一