返回信息流给了一个信号频率为380的余弦信号,记f0=380,采样频率fs=25600,采样点数N=512,先做FFT变换找到幅值最大频点为fft_result=400Hz,然后以400为中心,用CZT细化(350Hz,450Hz)间的频谱,细化间隔为1Hz,结果出来幅度最大的频点为381,理论上应该为380才对...
另外,如果我将采样频率25600改成12800,则CZT找出来的幅度最大频点为380,与理论相符,这是为什么....
matlab R2014a 的代码如下
clf;
close all;
clear
fs=25600; %采样频率
f0 = 380; %信号频率
N=512; %采样点数
n=0:N-1;
fn=fs*(0:N/2-1)/N; %F F T对应的频率序列
x=cos(2*pi*f0*n/fs); %信号序列
plot(n,x);
XK=fft(x,N); %进行FFT变换
am_xk = abs(XK(1:(N/2))); %求FFT变换的幅值
[XK_max,fft_i]=max(am_xk);
fft_result = fn(fft_i)
plot(n(1:end/2),abs(XK(1:(N/2))),'b');
% -----CZT变换----------
f1=fft_result-fs/N;%细化频率段起点
f2=fft_result+fs/N;%细化频率段终点
M=100;%细化频段的频点数,(这里其实就是细化精度)
w=exp(-j*2*pi*(f2-f1)/(fs*M));%细化频段的跨度(步长),1Hz的步长,(f2-f1)/(fs/N)*2*pi/N/M=(f2-f1)/(fs*M)
a=exp(j*2*pi*f1/fs);%细化频段的起始点,这里需要运算一下才能代入czt函数,等于频点对于的序号乘以2*pi/N,或2*pi/N*f1/(fs/N)=2*pi*f1/fs
xk=czt(x,M,w,a);
h=0:M-1;%细化频点序列
czt_f=(f2-f1)/M*h+f1;%细化的频率值
a = abs(xk);
czt_i = find(a==max(a)); %查找最大值所对应的序号
czt_result = czt_f(czt_i)
figure;
plot(czt_f,a);
这是一条镜像帖。来源:北邮人论坛 / communications / #26937同步于 2016/10/20
Communications机器人发帖
求教一个CZT变换的问题
whuiss
2016/10/20镜像同步0 回复
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。