在Matlab中使用FFT进行频移

时间:2012-08-03 11:17:11

标签: matlab fft frequency-analysis

我正在使用跳频实现BFSK调制和解调,我需要使用Matlab测试我的结果。我从BFSK程序得到的输出是一个正弦值数组,对应于不同位的载波信号。这些信号是以2.51KHz为中心的带通信号,其周围带宽为4KHz。但是为了测试解调步骤,我需要将信号转换为基带。所以我需要将输出信号置于0Hz。

我知道创建一个2.51KHz的复杂信号并将其在时域中相乘可以完成这项工作。但有没有任何方法可以在matlab中使用fft()函数来移动信号的中心频率,然后取ifft()信号来生成基带信号。

谢谢, 安舒

1 个答案:

答案 0 :(得分:3)

这应该是完全可能的。在计算ifft之前,只需旋转fft过程中出现的复杂向量。

伪代码将是:

shiftIndex  = 20; %// This value would depend on the frequency shift requited

Y = fft(x); %// Where x is the input vector
z = ifft (  [Y((shiftIndex+1):end);      Y(1:shiftIndex)]  );

有关您需要移动索引的bin数量的帮助,您可能会发现以下问题很有用。 。 。

https://dsp.stackexchange.com/questions/2970/how-to-make-frequency-axis-for-even-and-odd-fft-length/2971#2971

这让我想起,将来你可能会在DSP.stackexchange.com上发布更快的答案。