MATLAB中,信号的频谱图该怎么绘制?横坐标如何标注出频率值?

一、什么是频谱?

频谱的全称是频率谱密度。在对时域信号进行认识和研究的过程中非常不便,那我们该如何更直观地认识信号,更清楚地了解信号的特点呢?

利用傅里叶变换将时域信号变换到频域。

我们知道,在通信领域里傅里叶变换是非常非常非常重要的。傅里叶级数很清楚地说明了,不同频率分量的累加可以合成任何信号,也就是说一个时域信号,在频域是由不同频率的分量组合而成的。

二、那在matlab中如何绘制频谱呢?

如下代码所示(针对无载波幅度和相位调制信号(CAP 4)绘制的)。

% 对发送信号进行fft
F_TxSignal = fft(TxSignal./length(TxSignal));
% 取单边带
FSingle_TxSignal = F_TxSignal(1:length(F_TxSignal)/2);
% 符号持续时间
Tsamping = 1/(SamplingFrequency); 
% 总共的点数
SamplingNum = length(F_TxSignal);
% 计算单边带的频率分辨率
for i = 1:length(FSingle_TxSignal)
    F_xlabel_1(i) = (i-1)/(SamplingNum_1*Tsamping );
end
% 绘制单边带频谱
figure(2)
plot(F_xlabel/1e6, 20*log10(abs(FSingle_TxSignal)),'r');grid on;
% xlim([0 500]);ylim([-140 -40]);
xlabel('Frequency(MHz)');ylabel('Power(dBm)');

结果如下:
MATLAB中,信号的频谱图该怎么绘制?横坐标如何标注出频率值?_第1张图片

三、需要注意的事项

1、fft

其中,第一行是对发送信号进行fft,并除以信号总数,为什么除以总数,这是因为在matlab里的fft函数并没有除以傅里叶变换中的1/N,具体可以找傅里叶变换的原公式思考一下。

2、单边带

在matlab中,利用fft得到的频域信号,如果直接绘制频谱的话,会得到双边谱,而且前半段是正频率谱而后半段是负频率谱,因此,如果想画正确的双边谱则需要加一个fftshift函数,将直流分量调整到频谱中间,例如:

% 对发送信号进行fft
F_TxSignal = fftshift(fft(TxSignal./length(TxSignal)));
% 符号持续时间
Tsamping = 1/(SamplingFrequency); 
% 总共的点数
SamplingNum = length(F_TxSignal);
% 计算单边带的频率分辨率
for i = 1:length(F_TxSignal )
    F_xlabel_1(i) = (i-1)/(SamplingNum_1*Tsamping );
end
% 绘制单边带频谱
figure(2)
plot(F_xlabel/1e6, 20*log10(abs(F_TxSignal )),'r');grid on;
% xlim([0 500]);ylim([-140 -40]);
xlabel('Frequency(MHz)');ylabel('Power(dBm)');

结果如下:
MATLAB中,信号的频谱图该怎么绘制?横坐标如何标注出频率值?_第2张图片

3、采样率

实际上matlab仿真中,会设定信号的波特率,因此,这个采样率在有些情况下用波特率(这里属于特定情况)。

4、绘制频谱

为什么在最后绘制频谱的时候用了20*log10(abs(F_TxSignal ))呢?因为要用对数坐标才能表示dB。

你可能感兴趣的:(通信技术,光纤通信系统,matlab,数字信号处理,光通信)