声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 5098|回复: 25

[FFT] [求助]细化一组含有谐波的正弦波数据

[复制链接]
发表于 2008-5-23 13:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
[求助]细化一组含有谐波的正弦波数据

我通过采集卡采集了7999点的正弦波数据,想通过FFT变换看出含有的谐波,在各位的帮助下实现了FFT变换
程序如下:
x1=x-mean(x);
x2=x1.*hanning(length(x1));
n=8192;
fs=64709;
y=fft(x2,n);
fn=0:length(y)-1;
f=fs*fn/length(y);
mag=abs(y)*2/n*2;
plot( f(1:n/2),20*log10(mag(1:n/2)));

但是结果是除了基波比较明显外,谐波分量无法很好的分辨。

在论坛里看到各位使用细化的方法提高分辨率,但我始终不得要领,求助于各位可否帮忙实现,我的目的就是分辨2,3,4,5次谐波分量(按理说在200,300,400,500处)

另外还想请教各位是否还有什么其他的办法可以有效提取谢波分量,谢谢。

附件是1组采样频率约为64710的7999点100Hz正弦波数据,希望各位可以帮忙分析一下,谢谢。


另外我用相同的程序处理1Khz,2Khz的数据就基本可以分辨出谐波分量,但是500Hz,400Hz,.....那些小的低频的数据就无法很好的区分,不知为何,希望帮忙分析,

所有数据的采集频率都是一样的,约为64710,感觉源信号的频率越低,越是无法分辨谐波分量,恳请大家帮忙。

用附件相应数据作出的频谱图(100Hz)

用附件相应数据作出的频谱图(100Hz)

用附件相应数据作出的频谱图(200Hz)

用附件相应数据作出的频谱图(200Hz)

用附件相应数据作出的频谱图(500Hz)

用附件相应数据作出的频谱图(500Hz)

用附件相应数据作出的频谱图(1000Hz)

用附件相应数据作出的频谱图(1000Hz)

用附件相应数据作出的频谱图(2000Hz)

用附件相应数据作出的频谱图(2000Hz)

100.0.txt

89.9 KB, 下载次数: 35

采样频率约为64710的7999点100Hz正弦波数据

200.0.txt

89.85 KB, 下载次数: 20

采样频率约为64710的7999点200Hz正弦波数据

500.0.txt

89.82 KB, 下载次数: 23

采样频率约为64710的7999点500Hz正弦波数据

1000.0.txt

89.83 KB, 下载次数: 19

采样频率约为64710的7999点1000Hz正弦波数据

2000.0.txt

89.84 KB, 下载次数: 15

采样频率约为64710的7999点2000Hz正弦波数据

回复
分享到:

使用道具 举报

 楼主| 发表于 2008-5-23 13:37 | 显示全部楼层
为方便各位帮忙,我把从20Hz---10,000Hz的1/24倍频程的正弦波数据打包传到了网盘(5兆多,论坛附件有限制),

都是7999点的,采样频率约为64710,信号频率为各个相应的文件名。

这些数据是实测数据,失真度按理说绝对不大于5%(确切说小到1%),希望可以为需要的人作为实验数据。谢谢

数据地址:http://www.fs2you.com/files/7bd1691c-288a-11dd-8e23-0014221f4662/
发表于 2008-5-23 19:58 | 显示全部楼层
本帖最后由 VibInfo 于 2016-10-13 16:46 编辑
原帖由 Jnny_CN 于 2008-5-23 13:14 发表
[求助]细化一组含有谐波的正弦波数据
我通过采集卡采集了7999点的正弦波数据,想通过FFT变换看出含有的谐波,在各位的帮助下实现了FFT变换
程序如下:
...
但是结果是除了基波比较明显外,谐波分量无法很好的分辨。
在论坛里看到各位使用细化的方法提高分辨率,但我始终不得要领,求助于各位可否帮忙实现,我的目的就是分辨2,3,4,5次谐波分量(按理说在200,300,400,500处)
另外还想请教各位是否还有什么其他的办法可以有效提取谢波分量,谢谢。
附件是1组采样频率约为64710的7999点100Hz正弦波数据,希望各位可以帮忙分析一下,谢谢。
另外我用相同的程序处理1Khz,2Khz的数据就基本可以分辨出谐波分量,但是500Hz,400Hz,.....那些小的低频的数据就无法很好的区分,不知为何,希望帮忙分析,
所有数据的采集频率都是一样的,约为64710,感觉源信号的频率越低,越是无法分辨谐波分量,恳请大家帮忙。

对楼主希望加强谐波分量可以用多通带滤波器来实现,而不必用细化方法,因为细化的话也一样把谐波附近的干扰也细化了。我对1000Hz做分析,用FIR滤波器,程序和图如下,可以看到处理后谐波分量明显增强了。对于低于1000Hz的频率,一样也可以用本方法,但滤波器带宽必须选择更窄,这样势必要求滤波器有更高的阶数,在这种情况下建议降低采样频率(下采样)后再处理。
x=load('1000.0.txt');
x1=x-mean(x);
x2=x1.*hanning(length(x1));
n=8192;
fs=64709;
y=fft(x2,n);
fn=0:length(y)-1;
f=fs*fn/length(y);
mag=abs(y)*2/n*2;
plot( f(1:n/2),20*log10(mag(1:n/2)));
axis([0 10000 -140 0.5]); grid;
title('Original Signal Spectrum');
ylabel('dB'); xlabel('Frequency (Hz)');
figure
ff=0;
Am=0;
for k=1 : 5
    fre1=(fre*k-300)/(fs/2);
    fre2=(fre*k-100)/(fs/2);
    fre3=(fre*k+100)/(fs/2);
    fre4=(fre*k+300)/(fs/2);
    ff=[ff fre1 fre2 fre3 fre4];
    Am=[Am 0 1 1 0];
end
ff=[ff 1];
Am=[Am 0];
b=firls(201,ff,Am);
%freqz(b,1);
[db, mag, pha, grd,w]=freqz_m(b,1);
plot(fs*w/2/pi,db);
axis([0 10000 -60 0.5]); grid;
title('Respeonse of multi-band Filter');
ylabel('dB'); xlabel('Frequency (Hz)');
figure
x3=filter(b,1,x1);
x2=x3.*hanning(length(x3));
n=8192;
fs=64709;
y=fft(x2,n);
fn=0:length(y)-1;
f=fs*fn/length(y);
mag=abs(y)*2/n*2;
plot( f(1:n/2),20*log10(mag(1:n/2)));
axis([0 10000 -140 0.5]); grid;
title('Signal Spectrum after multi-band Filtering');
ylabel('dB'); xlabel('Frequency (Hz)');

原始信号的谱图

原始信号的谱图

滤波器的幅值响应曲线

滤波器的幅值响应曲线

滤波后的谱图

滤波后的谱图
发表于 2008-5-24 21:23 | 显示全部楼层

全相位谱波分析

用全相位FFT分析  200.txt,  500.txt,  1000.txt,  2000.txt  结果如下

N=2048, 红线为apFFT, 兰线为FFT

200a.fig (37.6 KB, 下载次数: 43)
500a.fig (38.48 KB, 下载次数: 28)
1000a.fig (35.53 KB, 下载次数: 21)
2000a.fig (37.58 KB, 下载次数: 20)


(请版主帮助打开贴上,我不会操作,以便观看)

[ 本帖最后由 zhwang554 于 2008-5-24 22:02 编辑 ]
 楼主| 发表于 2008-5-25 10:31 | 显示全部楼层
谢谢两位的帮助,我马上试试看:handshake
 楼主| 发表于 2008-5-25 10:38 | 显示全部楼层
本帖最后由 VibInfo 于 2016-10-13 16:46 编辑
原帖由 songzy41 于 2008-5-23 19:58 发表

对楼主希望加强谐波分量可以用多通带滤波器来实现,而不必用细化方法,因为细化的话也一样把谐波附近的干扰也细化了。我对1000Hz做分析,用FIR滤波器,程序和图如下,可以看到处理后谐波分量明显增强了。对
于低于1 ...

还要请问您,为何对于低频要降低采样率呢?这样做有什么好处呢?
发表于 2008-5-25 16:43 | 显示全部楼层
本帖最后由 VibInfo 于 2016-10-13 16:47 编辑
原帖由 Jnny_CN 于 2008-5-25 10:38 发表
还要请问您,为何对于低频要降低采样率呢?这样做有什么好处呢?

你可以从程序中看到,在1000Hz时,我用的滤波器带宽为200Hz,当对于低频时,就不能用这样的带宽了。在200Hz带宽时用的滤波器阶数是201,当频带变窄,中心频率降低,为了能得到满意的频响,势必要把滤波器阶数增加,这样计算量就会增加很多。
楼主不妨试一下,用上程序处理低频会有什么效果。
发表于 2008-5-25 20:06 | 显示全部楼层

低频长数据

100.txt谐波分析谐波峰不明显的原因是数据长度不够,数据越长频谱间隔越小,100Hz中谱线越多,泄漏减小.
现数据长7999,我把它尽量连续接起来,变成15779长,对这长度作DFT分析,得下图

100a.fig (138.37 KB, 下载次数: 20)

版主能否提供低频长数据

或者降低取样频率,100Hz信号用1000赫就足够了,数据也可少多了.

柚主在1柚提供的100.txt频谱图中波峰还是很明显的,它是50Hz的倍频

2柚
数据地址:http://www.fs2you.com/files/7bd1691c-288a-11dd-8e23-0014221f4662/
下载不了


[ 本帖最后由 zhwang554 于 2008-5-25 22:08 编辑 ]
 楼主| 发表于 2008-5-25 21:51 | 显示全部楼层
本帖最后由 VibInfo 于 2016-10-13 16:47 编辑
原帖由 zhwang554 于 2008-5-25 20:06 发表
100.txt谐波分析谐波峰不明显的原因是数据长度不够,数据越长频谱间隔越小,100Hz中谱线越多,泄漏减小.
现数据长7999,我把它尽量连续接起来,变成15779长,对这长度作DFT分析,得下图

35055

版主能否提供低频长数据 ...


数据可以下载啊,我刚刚试了一下,firedox,ie7督可以阿,您可以在试试,实在不行的话您可以留下邮件地址,我可以用邮件把数据发给您,谢谢您的帮助。
 楼主| 发表于 2008-5-25 21:54 | 显示全部楼层
本帖最后由 VibInfo 于 2016-10-13 16:47 编辑
原帖由 songzy41 于 2008-5-25 16:43 发表

你可以从程序中看到,在1000Hz时,我用的滤波器带宽为200Hz,当对于低频时,就不能用这样的带宽了。在200Hz带宽时用的滤波器阶数是201,当频带变窄,中心频率降低,为了能得到满意的频响,势必要把滤波器阶数增加, ...

谢谢您的帮助,我正在用您的程序进行试验,谢谢您。
 楼主| 发表于 2008-5-26 09:10 | 显示全部楼层
本帖最后由 VibInfo 于 2016-10-13 16:47 编辑
原帖由 songzy41 于 2008-5-23 19:58 发表

对楼主希望加强谐波分量可以用多通带滤波器来实现,而不必用细化方法,因为细化的话也一样把谐波附近的干扰也细化了。我对1000Hz做分析,用FIR滤波器,程序和图如下,可以看到处理后谐波分量明显增强了。对于低于1 ...


您好,您的程序中freqz_m这个函数我用的Matlab 2007a这里面没有啊,不知您可否贴出来让我学习一下。十分感谢,
另外我还像向您请教,我要用您传授的方法对100,200,500Hz的数据进行多带通滤波,那么滤波器阶数该如何确定呢?有什么方法可以遵循呢?谢谢。
发表于 2008-5-26 16:35 | 显示全部楼层
本帖最后由 VibInfo 于 2016-10-13 16:47 编辑
原帖由 Jnny_CN 于 2008-5-26 09:10 发表

您好,您的程序中freqz_m这个函数我用的Matlab 2007a这里面没有啊,不知您可否贴出来让我学习一下。十分感谢,
另外我还像向您请教,我要用您传授的方法对100,200,500Hz的数据进行多带通滤波,那么滤波器阶数该如何确定呢?有什么方法可以遵循呢?谢谢。

freqz_m函数如下:
function [db, mag, pha, grd,w]=freqz_m(b,a);
%Modified version of freqz subroutine
[H,w]=freqz(b,a,1000,'whole');
H=(H(1:501))'; w=(w(1:501))';
mag=abs(H);
db=20*log10((mag+eps)/max(mag));
pha=angle(H);
grd=grpdelay(b,a,w);
我没有看到过对于多带宽FIR滤波器设计中N的求法,在上程序中我是试了几次,没有计算阶数N。如果要计算阶数,我想可把陈怀琛的“数字信号处理教程:MATLAB释义与实现”一书中对最优化等波动FIR滤波器设计中N计算方法作参考。
发表于 2008-6-1 17:16 | 显示全部楼层

重构原信号及其谱波

如果用离散频谱校正法(最近论坛贴子上介绍能量中心法,比值法程序)求出基波及其4个谐波的振幅值,相位值,频率值,重构一个信号,这个信号和原信号基本一样,但振幅谱的谱波清晰,


下图是500.0txt结果
兰色原信号的振幅谱, 红色重构信号的振幅谱

500again.fig (37.51 KB, 下载次数: 22)

[ 本帖最后由 zhwang554 于 2008-6-1 17:21 编辑 ]
发表于 2008-6-1 19:45 | 显示全部楼层
楼主的100Hz信号谐波分量不明显,也许有以下原因:

1. 也许它的谐波本来就小(楼主不是说THD小到1%吗,我算了一下在应在1%~0.5%之间)。窃以为用滤波器只是人为将谐波突出来。
2. 如zhwang554说的,数据长度不够,FFT分辨率仅为:7.899HZ,相对与100HZ来说,较粗糙
3.由于采集的不是100HZ信号周期的整数倍分析,虽然说加窗,但还是有泄漏。

下图用校正法校正了峰值频率的位置, 校正前应为94.8HZ或102.7HZ, 校正后正好100HZ。

[ 本帖最后由 TestGuru 于 2008-6-1 19:51 编辑 ]
100Hz.jpg
 楼主| 发表于 2008-6-2 12:30 | 显示全部楼层
真是受教了,谢谢各位的帮助:handshake
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-28 02:46 , Processed in 0.081259 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表