关于信号显示频谱问题的思考

来源:互联网 发布:搜狗推广账户怎么优化 编辑:程序博客网 时间:2024/05/16 18:56
f = Fs/N*(1:N);相当于先进性归一化,然后再乘以抽样频率Fs,相当于以抽样频率显示,
y = fft(x,N);%对x进行N点fft变换
f = Fs/N*(1:N/2);
plot(f,y(1:N/2));%fft变换后关于N/2对称,只需要显示一半就可以了

这里注意只能将点数N变为N/2,若将Fs变为Fs/2,虽然显示范围是采样频率的一半,但N个点还是对称的,只有将点数N变为N/2,才能实现只显示一半

还有由于fft是关于N/2对称的所以不能对输入的x进行N/2点fft变换,这样输出时候不会显示一半,而且还会有信息的丢失,因此不能试图进行N/2点fft变换,而显示一半

总而言之,只能对抽样点数N变为N / 2,采样频率Fs不能变为变为N / 2,

也不能只进行N / 2点fft变换

y = fft(x,2048);  %对信号x进行2048点傅里叶变换
f = Fs/2048*(1:1024);%显示频率的一半
plot(f,y(1:1024));

两者区别于进行fft变换的点数一个是N点,一个是2048点,对已第二种会有信息的丢失,因为对信号进行的共有N点的采样

[x,Fs] = wavread('5');
N = length(x);
t = (0:N-1)/Fs; %抽样点数除以抽样频率是显示时间
figure(1)
plot(t,x(1:N));title('信号时域波形');
xlabel('Time(s)');
y = fft(x,N);  %对信号x进行N点傅里叶变换
f = Fs/N*(1:N/2);%显示频率
figure(2)
plot(f,abs(y(1:N/2)));
title('对信号进行N点fft变换的信号频域特性');
xlabel('Frequency(Hz)');
sound(x,Fs);  %播放原声
pause(4.5);

————————————————————

[x,Fs] = wavread('5');
N = length(x);
t = (0:N-1)/Fs; %抽样点数除以抽样频率是显示时间
figure(3)
plot(t,x(1:N));title('信号时域波形');
xlabel('Time(s)');
y = fft(x,2048);  %对信号x进行N点傅里叶变换
f = Fs/2048*(1:1024);%显示频率
figure(4)
plot(f,abs(y(1:1024)));
title('对信号进行2048点fft变换的信号频域特性');
xlabel('Frequency(Hz)');
sound(x,Fs);  %播放原声
pause(4.5);



0 0
原创粉丝点击