在Matlab中使用FFT进行频率偏移

5
我正在实现带有频率跳变的 BFSK 调制和解调,并需要使用 Matlab 测试我的结果。我从我的 BFSK 程序中得到的输出是一组正弦值,对应于不同位的载波信号。这些信号是以 2.51kHz 为中心,带宽为 4kHz 的带通信号。但是为了测试解调步骤,我需要将信号转换为基带信号。因此,我需要将输出信号置于 0Hz 处。
我知道可以创建一个 2.51kHz 的复杂信号,并在时间域上进行乘法来完成这个任务。但是,在 Matlab 中是否有任何方法可以使用 fft() 函数来移动信号的中心频率,然后对信号进行 ifft() 以生成基带信号呢?
谢谢, Anshu
1个回答

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)]  );

对于需要将索引移动的箱数的帮助,您可能会发现以下问题有用……
这让我想起,在将来的dsp.stackexchange.com上发布此类问题可能会得到更快的答案。 https://dsp.stackexchange.com/questions/2970/how-to-make-frequency-axis-for-even-and-odd-fft-length/2971#2971

非常感谢learnvst...这个方法完美地解决了我的问题...我会确保在将来在DSP.stackexchange.com上提出与DSP相关的问题。 - anshu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接