数字信号处理系列博客:
数字信号处理之信号的合成、分解、相关性及傅里叶系数的计算
数字信号处理之从傅里叶系数到DFT
M=15;%谐波次数
sine=zeros(M,N);%各次谐波存放的矩阵
square=zeros(1,N);%存放合成方波
figure(1);
for i=1:2:M
sine(i,:)=sin(2*pi*i*f*t)/i;%生成i次谐波
square=sine(i,:)+square;%将谐波叠加
subplot(M,1,i);
plot(sine(i,:));
title(sprintf('%d次谐波信号',i));
end
clear i;%清除临时变量i
figure(2);
plot(square);
title(sprintf('由1至%d次谐波叠加而成的方波',M));
y_dft(1,:) = dft_exp(f,0*w,t);
y_dft(2,:) = dft_exp(f,1*w,t);
y_dft(3,:) = dft_exp(f,2*w,t);
y_dft(4,:) = dft_exp(f,3*w,t);
y_dft(5,:) = dft_exp(f,4*w,t);
y_dft(6,:) = dft_exp(f,5*w,t);
y_dft(7,:) = dft_exp(f,6*w,t);
y_dft(8,:) = dft_exp(f,7*w,t);
y_dft(9,:) = dft_exp(f,8*w,t);
y_dft(10,:) = dft_exp(f,9*w,t);
y_dft(11,:) = dft_exp(f,10*w,t);
y_dft(12,:) = dft_exp(f,11*w,t);
y_dft(13,:) = dft_exp(f,12*w,t);
y_dft(14,:) = dft_exp(f,13*w,t);
y_dft(15,:) = dft_exp(f,14*w,t);
y_dft(16,:) = dft_exp(f,15*w,t);
Y_DFT(1) = sum_len(y_dft(1,:) ,N)/N;
Y_DFT(2) = sum_len(y_dft(2,:) ,N)/N;
Y_DFT(3) = sum_len(y_dft(3,:) ,N)/N;
Y_DFT(4) = sum_len(y_dft(4,:) ,N)/N;
Y_DFT(5) = sum_len(y_dft(5,:) ,N)/N;
Y_DFT(6) = sum_len(y_dft(6,:) ,N)/N;
Y_DFT(7) = sum_len(y_dft(7,:) ,N)/N;
Y_DFT(8) = sum_len(y_dft(8,:) ,N)/N;
Y_DFT(9) = sum_len(y_dft(9,:) ,N)/N;
Y_DFT(10) = sum_len(y_dft(10,:),N)/N;
Y_DFT(11) = sum_len(y_dft(11,:),N)/N;
Y_DFT(12) = sum_len(y_dft(12,:),N)/N;
Y_DFT(13) = sum_len(y_dft(13,:),N)/N;
Y_DFT(14) = sum_len(y_dft(14,:),N)/N;
Y_DFT(15) = sum_len(y_dft(15,:),N)/N;
Y_DFT(16) = sum_len(y_dft(16,:),N)/N;
stem(0:15,abs(Y_DFT));
title('DFT幅值谱');
stem(0:15,angle(Y_DFT)*180/pi);
title('DFT相位谱');
回到顶部
仔细观察DFT的公式,然后回忆前面我们进行的步骤
仔细一想,会发现k=1时对应1次谐波,k=3时对应3次谐波,k=5、7、9…
其实我们之前作的就是DFT,只不过是我们知道了原信号中有哪些频率分量,所以我们只要要用什么频率去作相关,而对于DFT,我们并不知道原信号中含有那些频率分量,所以我们需要更多的频率都拿来做相关,但是这个频率到底需要多少呢?于是我们规定一个间隔,每个多少进行一次采样,只要保证我们这个间隔足够小,我们就能分别出原信号中的相差足够小的频率分量,这个间隔,就叫做频谱分辨率。
关于频谱分辨率,你会发祥它不仅与DFT的点数有关,还与采样率有关,只要记住
频 谱 分 辨 率 = 采 样 率 ÷ 采 样 点 数 频谱分辨率=采样率÷采样点数 频谱分辨率=采样率÷采样点数
y_dft=zeros(N,N);%合成信号与相关信号相乘后存放到这里
for i=0:N-1
y_dft(i+1,:) = dft_exp(square,i*f,t);
end
Y_DFT=zeros(1,N);%DFT频谱
for i=0:N-1
Y_DFT(:,i+1) = sum_len(y_dft(i+1,:) ,N)/N;
end
stem(0:N-1,abs(Y_DFT));
set(gca,'XTick',0:10:N-1);
title('DFT幅值谱');
声明:本文仅作为个人技术交流,所述如有不当之处,欢迎读者批评指正!
转载请注明出处:https://blog.csdn.net/qq_39432978/article/details/89411438
回到顶部