如何在MATLAB中获得完整的傅立叶频谱?

时间:2018-02-09 04:48:00

标签: matlab signal-processing fft

我创建了一个6位量化器并通过它传递信号,但是当我绘制DFT时,它在200 MHz时达到峰值然后停止;我没有看到整个频谱。什么阻止我在我的代码中获得更高频率的其余点?

这是我的代码:

bits = 6; %6-bit
fs = 400e6; %sampling frequency
amp = 1; %amplitude
f = 200e6; %actual frequency
vpp = 2; peak-to-peak voltage
LSB = vpp/(2^bits); %least-significant bit
cycles = 1000;
duration = cycles/f;
values = 0:1/fs:duration;
party = LSB:LSB:(vpp-LSB); %partition
blocker = 0:1:(2^bits - 1); %codebook
biblocker = fliplr(decimaltobinary(blocker)); %I created a function that converts decimal to binary
qtone = amp + amp*sin(2*pi*f*values); %tone
[index, q] = quantization(qtone,party,blocker); %I created a quantizing function
ftq = fft(q)/length(q);                                         % Fourier Transform (Scaled)
qf = linspace(0, 1, fix(length(q))/2+1)*(fs/2);                     % Frequency Vector
qi = 1:length(qf);                                      % Index Vector
qa = abs(ftq(qi))*2/.7562;
figure
plot(qf/1e6, qa)                                % One-Sided Amplitude Plot
xlim([100 500]);
xlabel('Frequency [MHz]')
ylabel('Amplitude')

这是我得到的:

partial Fourier spectrum

3 个答案:

答案 0 :(得分:1)

由于您选择了采样频率fs = 400e6,即400 MHz,因此您只能观察到高达200e6的频谱,即采样频率的一半。您可以使用奈奎斯特采样定理来阅读其背后的理论。

作为解决方案,您需要设置频谱上要观察频率的两倍。无法观察整个频率,需要设置有限的频率限制。

答案 1 :(得分:1)

对于基带采样数据,频谱中高于采样率一半的所有内容都是冗余的,只是频谱的别名低于采样率的一半。因此,不需要重复显示相同的频谱。

当采样有限的时间长度(小于地球的年龄等)时,您必须采用的速率进行采样,而不是信号中最高频率的两倍。 2X(200MHz信号为400Msps)通常无法正常工作。

答案 2 :(得分:0)

qf = linspace(0, 1, fix(length(q)))*(fs);

enter image description here