数字信号处理基于计算机的方法.ppt
文本预览下载声明
假设采样频率为Fs,信号频率F,采样点数为N。那么FFT之后结果就是一个为N点的复数。每一个点就对应着一个频率点。这个点的模值,就是该频率值下的幅度特性。具体跟原始信号的幅度有什么关系呢?假设原始信号的峰值为A,那么FFT的结果的每个点(除了第一个点直流分量之外)的模值就是A的N/2倍。而第一个点就是直流分量,它的模值就是直流分量的N倍。而每个点的相位呢,就是在该频率下的信号的相位。第一个点表示直流分量(即0Hz),而最后一个点N的再下一个点表示采样频率Fs,这中间被N-1个点平均分成N等份,每个点的频率依次增加。 例如某点n所表示的频率为:Fn=(n-1)*Fs/N。由上面的公式可以看出,Fn所能分辨到频率为为Fs/N,如果采样频率Fs为1024Hz,采样点数为1024点,则可以分辨到1Hz。1024Hz的采样率采样1024点,刚好是1秒,也就是说,采样1秒时间的信号并做FFT,则结果可以分析到1Hz,如果采样2秒时间的信号并做FFT,则结果可以分析到0.5Hz。如果要提高频率分辨力,则必须增加采样点数,也即采样时间。频率分辨率和采样时间是倒数关系。 下面以一个实际的信号来做说明。假设我们有 个信号,它含有2V的直流分量,频率为50Hz、相 位为-30度、幅度为3V的交流信号,以及一个频率 为75Hz、相位为90度、幅度为1.5V的交流信号。 用数学表达式就是如下: S=2+3*cos(2*pi*50*t-pi*30/180)+1.5*cos(2*pi*75*t+pi*90/180)。 总结:假设采样频率为Fs,采样点数为N,做FFT之后,某一点n(n从1开始)表示的频率为:Fn=(n-1)*Fs/N;该点的模值除以N/2就是对应该频率下的信号的幅度(对于直流信号是除以N);该点的相位即是对应该频率下的信号的相位。相位的计算可用函数atan2(b,a)计算。atan2(b,a)是求坐标为(a,b)点的角度值,范围从-pi到pi。要精确到xHz,则需要采样长度为1/x秒的信号,并做FFT。要提高频率分辨率,就需要增加采样点数,这在一些实际的应用中是不现实的,需要在较短的时间内完成分析。解决这个问题的方法有频率细分法,比较简单的方法是采样比较短时间的信号,然后在后面补充一定数量的0,使其长度达到需要的点数,再做FFT,这在一定程度上能够提高频率分辨力。 程序: % 产生两个正弦加白噪声; N=256; f1=.1;f2=.2;fs=1; a1=5;a2=3; w=2*pi/fs; x=a1*sin(w*f1*(0:N-1))+a2*sin(w*f2*(0:N-1))+randn(1,N); % 应用FFT 求频谱; subplot(3,1,1); plot(x(1:N/4)); f=-0.5:1/N:0.5-1/N; X=fft(x); y=ifft(X); subplot(3,1,2); plot(f,fftshift(abs(X))); subplot(3,1,3); plot(real(x(1:N/4))); 产生均匀分布的白噪声,和直方图 clear; N=50000; u=rand(1,N); u_mean=mean(u) power_u=var(u) subplot(211) plot(u(1:100));grid on; ylabel(u(n)) xlabel(n) subplot(212) hist(u,50);grid on; ylabel(histogram of u(n)) 滤波程序演示: 1.data1=load(E:\201202161850.xls);1 %%%%%%%% load the source signal 2. for num=3:n2 if data1(num)100 data1(num)=data1(num-1); end if data1(num)1 data1(num)=data1(num-1); end end %%%%%%%%%%%%去掉干扰点 3. fs1=3; [m2,w2]=cheb2ord(0.04/(fs1/2), 0.03/(fs1/2), 3, 15); % highpass [b2,a2]=cheby2(m2,15,w2,high); ff1=filtfilt(b2,a2,double(amp2)); subplot(2,1,2),pl
显示全部