我使用fft在matlab中创建了一个音频回声信号:它是真正的回声?"

时间:2014-07-19 03:16:54

标签: matlab audio fft

这只是我所做的概述(假设我的所有尺寸都合适):<​​/ p>

    (code that imports audio to read audio as function x)
    X=fft(x);
    (code to define time t and frequency f)

    H=L+M*exp(-1i*2*pi*f*N)+O*exp(-1i*2*pi*f*P);
    % This is where it gets tricky 
    % In the frequency domain I have the function above where f is the frequency 
    % variable and L M N O P are arbitrary values

    Y=X.*H;   
    % again assume dimensions fit

    y=real(ifftshift(ifft(Y)*length(t)));
    %Taking the inverse fft and fftshift was the only way I could get back a signal
    % Once again assume the dimensions fit 

我会发布图片,但我需要至少10个代表: 我会尽力在下面描述:

   | 
   ||       
   |||||  
   ||     
   |

这是我的原始输入信号x

      |      |
    |||      |||
      |      |

这是我的输出y

(现在,如果我重力(t-t0)输出y并将其添加到原始我得到以下内容)

   | 
   ||        |
   |||||     |||
   ||        | 
   |
这是合法的吗?还是我只是拉着自己的腿?

1 个答案:

答案 0 :(得分:0)

从根本上说,你使用正确的工具来创造一个回声,所以你得到的是合理的。考虑可以描述回声和输入信号与delta函数的卷积。

$$ Y(t)= X(t)\ ast \ delta(t-t_ {echo})$$

在频域中,卷积表示为乘法。此外,delta函数变为wave $ e ^ {i 2 \ pi t_ {echo} f} $。请参阅傅里叶变换的维基http://en.wikipedia.org/wiki/Fourier_transform。你的H函数基本上是对应于增量的这些波中的三个(常数是$ e ^ {i 2 \ pi 0 f} $。)。当您将X乘以H时,您正在复制和翻译x。因此,在时域中,您应该获得与OML成比例的三个信号副本。

一旦你掌握了这些一般概念,那么你需要关注实施细节。密切关注如何定义频率以确保它与FFT生成的点匹配。测试您是否对实现不确定的一种好方法是逐步构建它。设置H=1,此时您的输出应与您的输入相匹配。然后只尝试一个波形并验证您是否获得了预期的精确回波​​。一般来说,通过使用更简单的输入信号(纯cos或带有信封的cos,可以让你轻松看到移位)来测试和检查可能更容易。