利用Matlab绘制正弦信号的频谱图并做相关分析

  • 格式:docx
  • 大小:105.63 KB
  • 文档页数:6

利用Matlab绘制正弦信号的频谱图并做相关分析

一、作业要求:

一、信号可变(信号的赋值、相位、频率可变);

二、采样频率fs可变;

3、加各类不同的窗函数并分析其阻碍;

4、频谱校正;

五、频谱细化。

二、采纳matlab编写如下程序:

clear;

clf;

fs=100;N=1024; %采样频率和数据点数

A=20;B=30;C=0.38;

n=0:N-1;t=n/fs; %时刻序列

x=A*sin(2*pi*B*t+C); %信号

y=fft(x,N); %对信号进行傅里叶变换

yy=abs(y); %求得傅里叶变换后的振幅

yy=yy*2/N; %幅值处置

f=n*fs/N; %频率序列

subplot(3,3,1),plot(f,yy); %绘出随频率转变的振幅

xlabel('频率/\itHz');

ylabel('振幅');

title('图1:fs=100,N=1024');

grid on;

%两种信号叠加,

x=A*sin(2*pi*B*t+C)+2*A*sin(2*pi*1.5*B*t+2.5*C); %信号

y=fft(x,N); %对信号进行傅里叶变换

yy=abs(y); %求得傅里叶变换后的振幅

yy=yy*2/N; %幅值处置

f=n*fs/N; %频率序列

subplot(3,3,2),plot(f,yy); %绘出随频率转变的振幅

xlabel('频率/\itHz');

ylabel('振幅');

title('图2:fs=100,N=1024,两种信号叠加');

grid on;

%加噪声以后的图像

x=A*sin(2*pi*B*t+C)+28*randn(size(t));

y=fft(x,N);

yy=abs(y);

yy=yy*2/N; %幅值处置

subplot(3,3,3),plot(f(1:N/2.56),yy(1:N/2.56));

xlabel('频率/\itHz');

ylabel('振幅');

title('图3:fs=100,N=1024混入噪声');grid on;

%改变采样点数N=128

N=128;

n=0:N-1;t=n/fs; %时刻序列

x=A*sin(2*pi*B*t+C); %信号

y=fft(x,N); %对信号进行傅里叶变换

yy=abs(y); %求得傅里叶变换后的振幅

yy=yy*2/N; %幅值处置

f=n*fs/N; %频率序列

subplot(3,3,4),plot(f(1:N/2.56),yy(1:N/2.56)); %绘出随频率转变的振幅

xlabel('频率/\itHz');

ylabel('振幅');

title('图4:fs=100,N=128');

grid on;

%改变采样频率为200Hz时的频谱

fs=400;N=1024;n=0:N-1;t=n/fs;

x=A*sin(2*pi*B*t+C); %信号

y=fft(x,N); %对信号进行快速傅里叶变换

yy=abs(y); %求取傅里叶变换的振幅

yy=yy*2/N; %幅值处置

f=n*fs/N;

subplot(3,3,5),plot(f(1:N/2.56),yy(1:N/2.56)); %绘出随频率转变的振幅

xlabel('频率/\itHz');

ylabel('振幅');

title('图5:fs=400,N=1024');

grid on;

%加三角窗函数

fs=100;N=1024; %采样频率和数据点数

n=0:N-1;t=n/fs; %时刻序列

x=A*sin(2*pi*B*t+C); %信号

window=triang(N);%生成三角窗函数

x=x.*window';%加窗函数

y=fft(x,N); %对信号进行傅里叶变换

yy=abs(y); %求得傅里叶变换后的振幅

yy=yy*2/N; %幅值处置

f=n*fs/N; %频率序列

subplot(3,3,6),plot(f(1:N/2.56),2*yy(1:N/2.56)); %绘出随频率转变的振幅

xlabel('频率/\itHz');

ylabel('振幅');

title('图6:fs=100,N=1024,加三角窗函数');

grid on;

%加海明窗函数后的频谱

fs=100;N=1024;n=0:N-1;t=n/fs;

x=A*sin(2*pi*B*t+C); %信号

window=hamming(N);%生成海明窗函数

x=x.*window';%加窗函数

y=fft(x,N); %对信号进行快速傅里叶变换

yy=abs(y); %求取傅里叶变换的振幅yy=yy*2/N; %幅值处置

f=n*fs/N;

subplot(3,3,7),plot(f(1:N/2.56),1.852*yy(1:N/2.56)); %绘出随频率转变的振幅

xlabel('频率/\itHz');

ylabel('振幅');

title('图7:fs=100,N=1024,加海明窗函数');

grid on;

%加汉宁窗函数后的频谱

fs=100;N=1024;n=0:N-1;t=n/fs;

x=A*sin(2*pi*B*t+C); %信号

window=hanning(N);%生成汉宁窗函数

x=x.*window';%加窗函数

y=fft(x,N); %对信号进行快速傅里叶变换

yy=abs(y); %求取傅里叶变换的振幅

yy=yy*2/N; %幅值处置

f=n*fs/N;

subplot(3,3,8),plot(f(1:N/2.56),2*yy(1:N/2.56)); %绘出随频率转变的振幅

xlabel('频率/\itHz');

ylabel('振幅');

title('图8:fs=100,N=1024,加汉宁窗函数');

grid on;

三、运行结果如下:

四、分析与结论:

1)从所做图像能够看出,信号的幅值均小于真实值,说明在截断信号时存在泄露。2)从图1和图图2取相同的采样频率fs=100和数据点数N=1024,不同的是图2采纳两种不同赋值和频率的正弦信号叠加,从图中能够看出,图2能够明显的看出含有两种不同的频率成份的信号,幅值也不相同,由此能够看出,不同频率的正弦信号叠加,在频域当中相互分离,互不阻碍。

3)从图1和图图2能够看出,整个频谱图是以fs/2频率为对称轴的。由此能够明白傅里叶变换数据的对称性。因此在用傅里叶变换做频谱分析时,咱们只需做出前一半频谱图即可。

4)图3为混入噪声以后的频谱,能够看出噪声散布在整个频率轴上,而且由于噪声中含有与原信号频率相同的成份,叠加以后致使幅值增加。加大噪声的幅值以后,将分辨不出原信号的频率。

5)图4减少了数据点数,N=128,与图1相较较,采纳128点和1024点的相同频率的振幅是有不同的表现值。因此振幅的大小与所用采样点数有关。必然范围内采样点数越多,信号的幅值越接近真实值。

6)图5改变采样频率观看不同采样频率对信号的阻碍,当采样频率过小时,谱线的尾部发生混叠现象,当采样频率太大时,频率的分辨率较低,无益于采样,依照采样定理,采样频率必需大于信号最高频率的2倍,通常采纳3~5倍。

7)图六、7、8别离对信号添加了三角窗、海明窗和汉宁窗,图1比较,加窗以后信号的幅值加倍接近真实值。而且使得图像的旁瓣减小,信号的能量相对集中。

五、采纳相位差法进行频谱校正

校正程序代码:

clear;

clf;

fs=100;N=1024;

n=0:N-1;t=n/fs;

A=20;B=30;C=0.38;

x=A*sin(2*pi*B*t+C); %正弦信号

y1=fft(x.*hanning(N)');%对信号做N点FFT变换

y2=fft(x(1:N/2).*hanning(N/2)');%对信号做N/2点FFT变换

Y1=abs(y1(1:N/2)/N*2);%第一段信号幅值

Y2=abs(y2(1:N/4)/N*4);%第二段信号幅值

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

subplot(2,1,1);plot(f,2*Y1);

xlabel('频率/\itHz');ylabel('振幅/A');

title('加汉宁窗校正前');

grid on;

[Y1Amax,k1]=max(Y1);

[Y2Amax,k2]=max(Y2);

phase1=angle(y1(k1));

phase2=angle(y2(k2));

Ano=Y1Amax*2

fno=(k1-1)*fs/N %未校正频率

phaseno=phase1*180/pi %未校正相角

delt=mod(phase1-phase2,2*pi);

%将delt调整到(-pi,pi)之间

if delt<-pi

delt1=delt+2*pi;

elseif delt>pi

delt1=delt-2*pi;

else delt1=delt;

enddeltf=2*(k2-1)-(k1-1)-2*delt1/pi;

Yyes=zeros(1,N/2);

Ayes=2/sinc(deltf)*Y1Amax*(1-deltf^2)

Yyes(k2)=Ayes;

fyes=(k1-1-deltf)*fs/N %校正后频率

phaseyes=(phase1+deltf*pi)*180/pi %校正后相位

f(k2)=fyes;

subplot(2,1,2);stem(f,Yyes);

xlabel('f');ylabel('幅值/A');title('加汉宁窗校正后');

grid on;

程序运行结果: