求大神帮忙改错,MATLAB程序如下function owen() %自编的czt对比fftclear;clc;t=0:0.001:1; h=3*sin(2*pi*120*t)+2*cos(2*pi*280*t); Fs=1000; f1=100; f2=300; m=length(h); w=exp(-1i*2*pi*(f2-f1)/
来源:学生作业帮助网 编辑:六六作业网 时间:2025/02/04 10:13:40
求大神帮忙改错,MATLAB程序如下function owen() %自编的czt对比fftclear;clc;t=0:0.001:1; h=3*sin(2*pi*120*t)+2*cos(2*pi*280*t); Fs=1000; f1=100; f2=300; m=length(h); w=exp(-1i*2*pi*(f2-f1)/
求大神帮忙改错,MATLAB程序如下
function owen() %自编的czt对比fft
clear;clc;
t=0:0.001:1;
h=3*sin(2*pi*120*t)+2*cos(2*pi*280*t);
Fs=1000;
f1=100;
f2=300;
m=length(h);
w=exp(-1i*2*pi*(f2-f1)/(m*Fs));
a=exp(1i*2*pi*f1/Fs);
y=fft(h,m);
z=func_czt(h,m,w,a);
fy=(0:m-1)*Fs/m;
fz=(0:m-1)*(f2-f1)/m+f1;
subplot(2,1,1);
plot(fy,abs(y));
title('fft');
subplot(2,1,2);
plot(fz,abs(z));
title('chirp z') ;
function z = func_czt(h,m,w,a)
len1 = length(h);
nlist = (0 : 1 : len1-1).';
x1 = h .* a.^(-nlist) .* w.^(nlist.^2 / 2);
n1 = 2^nextpow2(len1 + m - 1);
h1 = [w.^(-(0 : 1 : m-1).'.^2/2); zeros(n1 - (m + len1 - 1), 1); w.^(-(-len1+1 : 1 : -1).'.^2/2)];
y1 = ifft(fft(x1, n1) .* fft(h1));
z = y1(1 : 1 : m) .* w.^((0 : 1 : m-1).'.^2 / 2);
程序主要目的是实现function z = func_czt(h,m,w,a)与matlab中的fft对比
求大神帮忙改错,MATLAB程序如下function owen() %自编的czt对比fftclear;clc;t=0:0.001:1; h=3*sin(2*pi*120*t)+2*cos(2*pi*280*t); Fs=1000; f1=100; f2=300; m=length(h); w=exp(-1i*2*pi*(f2-f1)/
fft是宽带分析工具. 频率步长 = fs / m = 1000 / 1001 ≈ 1 Hz
czt是窄带分析工具, 频率步长 = (f2 - f1) / m = (300 - 100) / 1001 ≈ 0.2 Hz
信号主瓣宽度等于 2 / 1 = 2 Hz,
当使用fft时, 频率分辨率太低,在主瓣只采集了两点,
可以把h=3*sin(2*pi*120*t)+2*cos(2*pi*280*t);
改成h=3*sin(2*pi*120.5*t)+2*cos(2*pi*280.5*t);
再看看效果, 可以但到幅度明显与修改之前不同. 失真严重.
而czt 分辨率是0.2Hz, 主瓣采集了10点. 因此幅度始终很准确.
以上用到了频谱分析的一些知识, 希望对你有帮助