频率,角频率和数字频率的物理意义(zz)
标签:
股票 |
分类: 数字信号处理 |
多分辨率分析 http://www.cnblogs.com/lzhen/p/3952529.html
from
http://anony3721.blog.163.com/blog/static/51197420111129503233/
古人云:基础不牢,地动山摇。勿在浮沙筑高台。此话真不假,比如MATLAB中下标从1开始而物理概念t从0开始,结果往往会差一点,做FFT后结果会莫名其妙的差一点,做仿真的时候经常会因为这样一些基本概念不清而导致对结果无法正确的解释。盲目的追求多学习,不求甚解是得不偿失的,最后无知的还是你自己。一定要动脑子想想,把知识消化了才能灵活运用。本文是数字信号处理的基本功,是本人学习思考后的总结,网上没有发现有人讲此很基本的内容,相信肯定有不懂的,所以贴出来希望大家能受益。最后,原大家得大智慧,断贪嗔痴,阿弥陀佛。
1。
模拟角频率Ω:单位rad/s大OMEGA的物理含义是2*pi的时间段里面包含y=sin(OMEGA*t)正弦信号的个数。Ω
= 2*pi/T
for OMEGA = 1:4
y(:,OMEGA) = sin(OMEGA*t).';
str{OMEGA}=['OMEGA=',num2str(OMEGA)];
end
h=plot(t',y);
legend(h,str);
clear;
t=0:1/100:1;
for f= 1:4
y(:,f) = sin(2*pi*f*t).';
str{f}=['f=',num2str(f)];
end
h=plot(t',y);
legend(h,str);
clear;
w = pi/4;
N = 2*pi/w; % N = 8 ,此处是在数据上采样N个点,FFT时在频谱上也采样N个点
n = 0:N-1;
x = sin(n*w);
h=plot(n, x, '-o');
clear; close all;
% 该信号的数字周期N = 8,模拟周期T = N*Ts = 0.008s ,实际频率 f = 125 Hz
w = pi/4;
N = 2*pi/w; % N = 8
n = 0:N-1; % n = 0:N 可能会更好看一些,但是要清楚第N+1点可是下一个采样周期的第一个点
x = sin(n*w);
h=plot(n, x, '-o'); %注意n没有定标,没有物理含义!
Fs = 1000; %采样频率为1000Hz
Ts = 1/Fs;
t = n*Ts;
T = N*Ts; %模拟周期T
f = w*Fs/(2*pi); % 信号的真实频率f
figure; plot(t, x)
% (1)
做FFT的点数和时间采样的点数N(注意和数字周期N相同)相同时频率f的定标
freq = n*Fs/N -
Fs/2;
% freq = (n/N -
1/2)*Fs;
% freq = (n - N/2)/N;
X = fftshift(abs(fft(x))); %采用 N= 8点的FFT时的FFT,做FFT的点数和时间采样的点数相同
x_IFFT = ifft(fft(x));
figure; plot(freq, X);grid
figure; plot(t, x_IFFT); grid
t_ = (0:N-1)*Ts - N*Ts/2; % 等价的有 t_ =
(0-N/2:N-1-N/2)*Ts;
figure; plot(t_, x_IFFT);grid;
% (2) 做FFT的点数和时间采样的点数N不同时频率f的定标,补零后FFT
补零后的FFT和补零前的FFT,两者会有较大的不同,但两频谱的包络还是一致的。设补零前数据长N,补零后数据长M(补了M-N个零值),则补零前的FFT有N条谱线,分别代表的频率点是(0,1,...,N-1)*fs/N;补零后的FFT有M条谱线,分别代表的频率点是(0,1,...,M-1)*fs/M。由于补零前后数据长度不一样,它们的分辨率(分别为df1=fs/N,df2=fs/M)不一样,在频域中谱线所代表的频率也不一样,所以这两个频谱所描述的对象也不相同。这里举一个例子,fs=1000HZ,补零前后数据长度N=500和M=800,对应的df1=2,df2=1.25。补零前的频谱是对应于0,2,4,...,500HZ的频谱,而补零后的频谱是对应于0,1.25,2.5,...,500HZ的频谱,所以两频谱中对应频率不两同,描述当然不同。注意补零前后fs始终没有变!
但是当特殊情况:M=(2^n)*N时,补零后的频谱相当于在补零前的频谱中插入(2^n)-1条谱线。与补零前的频谱中相重合的谱线,它们的幅值和相位完全一致。
Nfft = 1024; % 此处 Nffft/N = 128,所以要对结果的频谱进行128点的抽取,才可以得到正确的频率定标!
X_Nfft = fftshift(abs(fft(x,Nfft)));
freqNormalized = ((0:Nfft-1) -
freq = freqNormalized(1:128:end)*Fs;
%
X_ = X_Nfft(1:128:end);
figure; plot(freq , X_);grid
4. 说说0~N-1和1~N和归一化频率
归一化频率:
频率f:
模拟角频率Ω:-Ωs --------- -Ωs/2 ------ 0 ----------- Ωs/2 -------- Ωs
数值频率w:
0~N-1和1~N都是描述单位圆上N个树坑的分布情况的,是一个正弦周期内应该采样的点的范围。
① 0~N-1描述的概念是这样的:第一个采样点N=0对应w的w=0,最后一个采样点N-1点对应w =
2*pi*(N-1)/N。此时w=pi 处对应f = Fs/2或Ω = Ωs/2的模拟最高频分量对应
N/2
② 1~N描述的也是单位圆上N个树坑的分布情况,只不过第一点N=1的位置在 w = 2*pi/N的位置,最后一点N点对应w = 2*pi*N/N = 2*pi是零频率的位置。由于MATLAB中下标从1开始,所以这样表达有时候比较方便。此时w=pi 处对应f = Fs/2或Ω = Ωs/2的模拟最高频分量对应N/2,而不是[1 + N]/2,因为N=1点采样没有在t=0处。
下面看一个 1:N的例子
clear;
N=100; % 数字周期 N
Fs=2000; % 采样频率,只有确定了采样频率才能从数字信号频率确定实际模拟频率
Ts=1/Fs;
n=1:N; % n = 0:N 可能会更好看一些,但是要清楚第N+1点可是下一个采样周期的第一个点
w=0.02*pi
x=sin(w*n); %数字频率w=0.02*pi
t=n*Ts;
plot(t,x);grid on; %注意此时信号的第t = 0时没有采样点
T=N*Ts
f = w*Fs/(2*pi); % 信号的真实频率f
% 该信号数字周期为2*pi/w=100,模拟周期为T=100*Ts=0.05s,实际频率为w*F/2*pi=20Hz
freq1 = n*Fs/N - Fs/N; % 1~N时 频率序列 f 的取值应该和 0~
N-1时的情况一样
X = (abs(fft(x)));
figure; plot(freq1, X);grid
freq = (n-1)*Fs/N - Fs/2; %频率序列
X = fftshift(abs(fft(x)));
figure; plot(freq, X);grid
from
模拟频率与数字频率
其物理意义是相邻两个采样点之间所变化的弧度数,如图1所示。
用采样频率fs=500Hz对其进行采样,得到的数字信号x[n]为:
很明显,这个数字信号的频率为0.4pi。
结论:在数字领域使用数字频率(和采样频率相关),而对模拟信号和连续信号使用模拟频率和模拟角频率。

加载中…