BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / communications / #26937同步于 2016/10/20
Communications机器人发帖

求教一个CZT变换的问题

whuiss
2016/10/20镜像同步0 回复
给了一个信号频率为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);
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。