用matlab将超声鼠信号转换成人类可听范围的建议

时间:2014-11-30 13:14:42

标签: matlab audio signals

我正在做一个项目,研究使用Matlab软件和声音文件在超声波范围(20kHz到100kHz)内发出吱吱声的老鼠。

我已经(或将要获得)这些老鼠的几个.wav音频信号说话,在对这些波形的一般分析中,我还想将这些超声波信号(我们的听力之外)转换为人类听觉范围(20hz到20khz)。

我可以就如何进行此转换获得一些建议(通过Matlab编程,而不是使用设备)

调查一下,我找到了如下名字: - 频率划分 -heterodyning - 包络检测 - 时间扩展

但是看看它们似乎要么根据设备(蝙蝠探测器)的作用来解释,要么它们听起来非常相似。例如频分和时间扩展都涉及将输入信号除以10

因为我正在研究看似陌生的草皮,所以找到多种转换信号的方法会很棒(据我所知,上面的名字有自己相关的正面和负面特征)

1 个答案:

答案 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等音频处理软件包之一