|
这里也有一个细化频谱的程序,20倍抽取后的信号进行FFT点数的选择是怎么回事呢?
这个程序中用到了decimate( ),没用reshape( ),请问reshape( )是怎么回事?怎样用呢?
clear all;
close all;
N=input('取时间分隔的点数N=');
t=linspace(0,1,N);dt=1/N;%信号长度1秒,给出时间分割
f=10*sin(2*pi*64*t)+10*sin(2*pi*250*t)+20*sin(2*pi*256*t)+30*sin(2*pi*258*t)+20*sin(2*pi*512*t);
figure(1)
subplot(2,1,1);
stem(t,f,'g');grid%画出原始信号
title('原始信号')
xlabel('t(s)');ylabel('f(t)');
fw=input('需求的频谱宽度fw=');
Nf=input('需求的频谱点数Nf=');
f1=linspace(0,fw,Nf);df=fw/(Nf-1);dw=2*pi*df;
F=f*exp(-j*t'*2*pi*f1)*dt;%求f傅立叶变换
subplot(2,1,2);
plot(f1,abs(F)/max(abs(F))),grid
xlabel('f1(HZ)');ylabel('|F(jf1)|');
f_0=input('需求的中心频谱f_0=');
f_1=f.*exp(-j*2*pi*t*f_0);%'.*'为元素群运算
figure(2)
subplot(2,1,1);
stem(f_1);grid
title('频移后的信号')
xlabel('t(s)');ylabel('f_1(t)');
F1=f_1*exp(-j*t'*2*pi*f1)*dt;%求f_1傅立叶变换
subplot(2,1,2);
plot(f1,abs(F1)/max(abs(F1))),grid
xlabel('f1(HZ)');ylabel('|F1(jf1)|');
fw0=input('理想底通滤波器的带宽fw0(HZ)=');
n2=find((f1>-fw0)&(f1<fw0));%求出底通滤波器带宽内的下标
f2=f1(n2);%取出中段频率
F2=F1(n2);%取出中段频谱
figure(3)
subplot(2,1,2);
plot(f2,abs(F2)/max(abs(F2))),grid%画出滤波后的频谱
xlabel('f2(HZ)');ylabel('|F2(jf2)|');
f_2=F2*exp(j*2*pi*f2'*t)/pi*dw;%对中段频谱求傅立叶逆变换
subplot(2,1,1);
stem(f_2),grid%画出滤波后的波形
title('滤波后的信号')
xlabel('t(s)');ylabel('f_2(t)');
y=decimate(f_2,20);% 对信号先进行滤波,然后进行 20 倍的抽取
figure(4)
subplot(2,1,1);
stem(y),grid%画出滤波后的波形
title('抽取后的信号')
xlabel('t(s)');ylabel('y(t)');
Y=fft(y);% 对信号进行 20 倍抽取后的 FFT 运算
subplot(2,1,2);
plot(abs(Y)/max(abs(Y))),grid
xlabel('f1(HZ)');ylabel('|Y(jf1)|');
|
-
-
程序和图形.doc
125.5 KB, 下载次数: 45
对进行20倍抽取后的信号快速傅里叶变换点数的选择是怎么回事呢?
|