|
本帖最后由 那是星期六 于 2015-6-30 09:22 编辑
最近在学习数字信号处理这门课程,刚好接触到FFT变换,实验室里面刚好有电能质量方面的仪器,对比了一下,实现了128点的FFT,加hanning窗,然后恢复各次幅值。
实验的效果似乎还很理想。在这里给出MATLAB的仿真结论,加上DSP的硬件验证结论。m代码见附件。本次实验我使用的是DA产生1~7次幅值的正弦叠加信号,然后通过
外部的AD采样芯片将数据采样回来,内部加窗和FFT,然后显示波形和各次幅值,以及谐波畸变率。可以理解为一个小型的示波器,附带了电能质量测试的功能。
这里所用的芯片信号为:AD7656,DAC7744.LCD为12864.
一、MATLAB上验证
图1未加窗FFT
图2加窗FFT
加窗以后的频谱柱状图
代码的内容见后
二、硬件验证
图3DSP2812上验证
电能质量演示:见附件图片
M代码:
%FFT_hanning.m
clear;
N=128;%采样点数(1)
n=[0:1:127];%循环变量
load sam s;%从数据文件sam中装入采样%数据到数组s
fs=50*32;%实际的采样频率
z=abs(fft(s,128));
w=0.5-0.5*cos(2*pi*n./N);%窗函数哈宁窗
r=s.*w;%对信号的加窗
v=fft(r,128);%快速傅立叶变换
vz=abs(v)/64*1.852;%VZ存放未经过插值的%谐波系数,以便和插值后的做对比分析
n1=0:127;
figure(1);
stem(n1/(128/fs),abs(v)/64*1.852,'.');%绘图,使结果显示%更加直观
title('频谱柱状图');
figure(2);
plot(n1/(128/fs),vz);axis([0,400,0,12]);
title('频谱柱局部连线图');
u=abs(v);%为下面插值修正做准备,注意插%值修正公式用到的是未经过幅值修正的FFT%结果,与VZ有区别
A=zeros(1,7);%A存放修正后的结果
for I=0:6%I对应谐波次数
y1=u(5+4*I);%找到第I次谐波峰值两侧的值
%也是最大和次最大的值;
y2=u(6+4*I);
y3=u(4+4*I);
max=y2;
if y3>y2
max=y3;
end
if max==y3
t=y1;
y1=max;
y2=t;
end
b=(y2-y1)/(y2+y1);%相当于参数β
a=1.5*b;%相当于参数α (3)
A(I+1)=(y1+y2)*(2.35619403+1.15543682*a^2+0.32607873*a^4+0.07891461*a^6)/128;%修%正幅值(4)
end%循环结束通过修改语句(1)、(2)、(3)、(4),可
%以实现对加不同窗函数插值修正的分析.此外,本程序通过读取数据文件得到采样数据,数据文件为二进制码,为和其它程序接口提供
figure(3);
stem(A);
title('各次谐波频率的幅值A');
figure(4);
stem(n1/(128/fs),abs(z)/64,'.');
figure(5);
stem(z);
c源代码见附件:
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|