怎么用MATLAB画实数信号的功率谱?

2025-11-06 01:31:32

1、首先,生成一个离散的实数信号。这里以x=2*cos(3*pi*t)信号为例,借助EXCEL将其离散化。采样率fs取50,采样点数N取100。

怎么用MATLAB画实数信号的功率谱?

2、然后,在MATLAB中调取我们刚刚所生成的离散实数信号。我把包含该信号的EXCEL文件命名为signal_x_data,并放在了C盘根目录下,如果你采用和我同样的设置,调取时可以直接复制下面的命令:

x=xlsread('C:\signal_x_data.xlsx'); % 加载xlsx文件

x=x(:,3); % 取位于第三列的信号数据

怎么用MATLAB画实数信号的功率谱?

3、接着,我们对该实数信号作傅里叶变换,再取所得变换结果的绝对值的平方。这一步除了可以采用命令:

xfft=fft(x);

P=abs(xfft).*abs(xfft);

也可以采用命令:

xfft=fft(x);

P=(xfft).*conj(xfft);

可以看到,两种算法的结果是一致的(误差极小,例如在1e-12以内,即可认为结果一致)。我们所求得的P转化为分贝后即为功率谱中各点的纵坐标值。

怎么用MATLAB画实数信号的功率谱?

4、于是,我们可以作出实数信号的功率谱。横坐标为频率f=0:1*fs/N:fs-1*fs/N,可以直接复制下面的命令:

fs=50;

N=100;

f=0:1*fs/N:fs-1*fs/N;

figure(1);

subplot(1,2,1);

plot(1/fs:1/fs:N/fs,x);

xlabel('Time/s');

ylable('Amplitude');

title('时域信号');

subplot(1,2,2);

plot(f,20*log10(P));

xlabel('Frequency/Hz');

ylabel('Power/dB');

title('功率谱');

左边图反映信号时域变化右边图为信号的功率谱

怎么用MATLAB画实数信号的功率谱?

5、简介中提到:实数信号的功率谱包含正负频率成分,但上述功率谱的横坐标却并非如此。这里,实际上需要用到fftshift命令进行变换,可以直接复制下面的命令:

figure(2);

f=floor(-N/2)/N*fs:1*fs/N:(ceil(N/2)-1)/N*fs;

plot(f,20*log10(fftshift(P)));

这便是最终的功率谱,它包含了-1.5Hz和+1.5Hz这两个主要的频率成分。

怎么用MATLAB画实数信号的功率谱?

1、总结一下步骤,画实数信号功率谱的整个过程大致分为5步:

1、用EXCEL生成离散的实数信号;

2、在MATLAB中调取所生成的信号;

3、对信号作傅里叶变换,并求功率;

4、绘出初步的功率谱;

5、用fftshift命令进行变换得到最终的功率谱。

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢