频谱选带与细化分析两个小例子

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

频谱选带与细化分析两个小例子

解:

利用matlab编程,得出图9-1所示结果

(a)信号采样图

(b)参与FFT为64点频谱图

(c)参与FFT为128点频谱图

(d)参与FFT为256点频谱图

(e)参与FFT为64点补零至256点频谱图

(f)参与FFT为128点补零至256点频谱图

图9-1 第9章第1题各结果图示

作出一个周期内各幅值谱图如图9-1所示。

比较图(b)参与FFT为64个点,(c)参与FFT为128个点,(d)参与FFT为256个点。图(b)只有一个峰值,峰较宽;图(c)也只有一个峰值,峰较窄;图(d)有三个峰值,峰更窄。显然只有图(d)能分辨出信号中有三个频率(49Hz,50Hz,51Hz)。容易得出,随着参与点数增加,分辨率越来越高,这个是显然的。

比较图(b)参与FFT为64点频谱图,图(e)参与FFT为64点补零至256点频谱图,可以发现,补零之后的频谱分辨率提高了,但造成谱形失真。

比较图(c)参与FFT为128点频谱图和图(f)参与FFT为128点补零至256点频谱图。可以发现,补零之后的频谱分辨率提高了,能大致分辨出三个峰值,但造成谱形失真。

比较图(e)参与FFT为64点补零至256点频谱图和图(f)参与FFT为128点补零至256点频谱图。图(e)失真更严重,因此补零越多,失真越厉害。

该题的Matlab代码如下:

clear;clc;

%信号采样,采样频率128Hz,采样点数256

Fs=128;

N=256;

n=0:N-1;

t=n/Fs;

x=100*cos(2*pi*50*t)+150*cos(2*pi*51*t)+50*cos(2*pi*49*t);

subplot(3,2,1);

plot(t,x) %画出采样信号

xlabel('t/s'); ylabel('Amplitude'); title('信号采样图');

%参与FFT点数为64

N1=64;

y1=fft(x(1:N1));%对信号进行快速Fourier变换

amp1=abs(y1)*2/N1;%求Fourier变换振幅

f=n(1:N1)*Fs/N1;

subplot(3,2,3);

plot(f(1:N1/2),amp1(1:N1/2))

xlabel('f/Hz'); ylabel('Amplitude1'); title('参与FFT点64频谱图'); %参与FFT点数为128

N2=128;

y2=fft(x(1:N2));

amp2=abs(y2)*2/N2;

f=n(1:N2)*Fs/N2;

subplot(3,2,5);

plot(f(1:N2/2),amp2(1:N2/2))

xlabel('f/Hz'); ylabel('Amplitude2'); title('参与FFT点128频谱图'); %参与FFT点数为256

y3=fft(x(1:N));%对信号进行快速Fourier变换

amp3=abs(y3)*2/N;%求Fourier变换振幅

f=n(1:256)*Fs/N;

subplot(3,2,2);

plot(f(1:N/2),amp3(1:N/2))

xlabel('f/Hz'); ylabel('Amplitude3'); title('参与FFT点256频谱图'); %对64个点样本补零增为256点后,进行FFT变换

x1=[x(1:64),zeros(1,192)];

y4=fft(x1);

amp4=abs(y4)*2/N1;

f=n(1:256)*Fs/N;

subplot(3,2,4);

plot(f(1:N/2),amp4(1:N/2))

xlabel('f/Hz'); ylabel('Amplitude4'); title('参与FFT点64补零至256频谱图') %对128个点样本补零增为256点后,进行FFT变换

x1=[x(1:128),zeros(1,128)];

y5=fft(x1);

amp5=abs(y5)*2/N2;

f=n*Fs/N;

subplot(3,2,6);

plot(f(1:N/2),amp5(1:N/2))

xlabel('f/Hz'); ylabel('Amplitude5'); title('参与FFT点128补零至256频谱图');

解:

利用matlab编程,得出图9-2所示结果

(a)信号采集图

(b)全景频谱图

(c)细化后频谱图

图9-2 第9章2题结果图示

表9-1 计算结果

参数理论值FFT谱细化谱频率(Hz)84.6 84.0000 84.6000 幅值100 85.7550 99.8996 相位(度)54 107.1010 65.4522

观察图9-2易知细化后的谱图更加清楚。通过表9-1中的计算结果,易知,细化谱的频率(Hz)、幅值、相位(度)与理论值更加接近,细化的目的达到。

该题Matlab代码如下:

clear;clc;

%信号采样,采样频率Fs=256Hz,采样点数N=128

Fs=256;

N=128;

n=0:N-1;

t=n/Fs;

x=100*cos(2*pi*84.6*t+0.3*pi);

%画信号采样图

subplot(3,1,1);

plot(t,x)

xlabel('t/s'); ylabel('Amplitude1'); title('信号采样图');

%全景FFT变换

y1=fft(x);%对信号进行快速Fourier变换

amp1=abs(y1).*2./N;%求Fourier变换振幅(需要将结果的绝对值乘以2除以N)Theta1=angle(y1)*180/pi;%计算相位

% Theta1=atan(imag(y1)./real(y1));

kmax1=find(amp1==max(amp1)); %找出幅值最大的序列下标值

f=n*Fs/N;%归一化频率轴

%作全景幅值谱图

subplot(3,1,2);

plot(f(1:N/2),amp1(1:N/2))

xlabel('f/Hz'); ylabel('Amplitude2');title('全景频谱图');

fprintf(' 全景幅值谱图最大幅值为:%3.4f\n ',amp1(kmax1(1)))

fprintf('全景幅值谱图最大幅值处频率为:%3.4fHz\n ',f(kmax1(1)))

fprintf('全景幅值谱图最大幅值处相位为:%3.4f度\n ',Theta1(kmax1(1)));

%对82~86Hz之间进行频谱细化,取谱线条数为41条

fx=82:0.1:86;%取41条频率

for i=1:length(fx)

af(i)=2/N*x*cos(2*pi*(1:N)*fx(i)/Fs)';%计算a(f)的值,即实部

bf(i)=2/N*x*sin(2*pi*(1:N)*fx(i)/Fs)';%计算b(f)的值,即虚部

amp2(i)=sqrt(af(i)^2+bf(i)^2);%计算幅值

Theta2(i)=angle(af(i)+bf(i)*1i)*180/pi;%计算相位

% Theta2(i)=atan((-bf(i))/af(i));

end

相关文档
最新文档