matlab基音周期频率估计
- 格式:doc
- 大小:58.00 KB
- 文档页数:5
数字信号处理实验
第 - 1 - 页
专业班级 组别
成员
实验内容:利用至少两种频率估计方法编程求给定信号的频率
1 设计思路
方案一:采用谱峰估计法
将信号进行傅里叶变换,从频谱中找到幅度最大的谱线,对应频点与频率分
辨率乘积即为信号频率。
方案二:采用导数法
利用傅里叶变换性质,将原信号进行时域求导,再利用离散Parseval定理,
求出原信号的频率。具体推导公式如下:
时域信号
()jtxte,求导得()()()()nnxtjxt
两边同时平方积分,得 ()2222|()||()()||()|nnnxtdtjxtdtxtdt
即 2()202220|()||()|nnxtdxtd
运用离散Parseval定理,得 00002222|()|2|()|knknkkkXkNXk
其中,为0~2的一个频点,采样频率为Fs,由此计算出频率2fFs
2 程序代码
① 谱峰估计法
function f=pufeng
load signal; %信号自动存于变量S
N=128;
Fs=4000; %信号采样频率
数字信号处理实验
第 - 2 - 页
f=zeros(1,7);
y=abs(fft(S,N));
[m,n]=max(y);
f(1)=(n-1)*Fs/N; %无噪声时求出的频率
SNR=[20 15 10 5 0 -5];%信噪比
for i=1:6
S=awgn(S,SNR(i));
y=abs(fft(S,N));
[m,n]=max(y);
f(i+1)=(n-1)*Fs/N;
end
plot(f);hold;
plot(f,'.');
axis([0 8 340 355]);
xlabel('无噪声 --> 20dB --> 15dB --> 10dB --> 5dB --> 0dB --> -5dB');
legend('谱峰估计法');
② 导数法
function f=daoshu2
Fs=4000;
N=128;
n=1; %求导次数n
delta=6;
SNR=[20 15 10 5 0 -5]; %信噪比
load signal;
signal=zeros(7,length(S));
signal(1,:)=S;
for i=1:6
signal(i+1,:)=awgn(S,SNR(i)); %加性高斯白噪声
end
数字信号处理实验
第 - 3 - 页
for j=1:7
F=abs(fft(signal(j,:),N));
[Fm,k0]=max(F);
En1=0;En2=0;
for k=k0-delta:k0+delta;
En1=En1+(k-1)^(2*n)*F(k)^2;
En2=En2+F(k)^2; %主瓣能量
end
f(j)=Fs/N*(En1/En2)^(1/(2*n));
end
plot(f,'r');hold;
plot(f,'.r');axis([0 8 340 355]);
xlabel('无噪声 --> 20dB --> 15dB --> 10dB --> 5dB --> 0dB --> -5dB');
legend('导数法');
3 程序使用说明
将谱峰估计法代码保存为pufeng.m文件,将导数法代码保存于daoshu2.m
文件,直接调用程序pufeng或daoshu2,查看运行结果。
为了能将两个程序的结果同时显示,便于比较,可以使用一下代码:
f1=pufeng;
f2=daoshu2;
hold on;
plot(f1,'.');
plot(f1);
plot(f2,'.r');
plot(f2,'r');
axis([0 8 340 355]);
xlabel('无噪声 --> 20dB --> 15dB --> 10dB --> 5dB --> 0dB --> -5dB');
ylabel('f (Hz)');
数字信号处理实验
第 - 4 - 页
legend('导数法','谱峰估计法');
4 运行结果与分析
已知给定待测信号的频率为350Hz,从上图可以看出,在相同N值的前提下
(此处N=128),导数法估计出的信号频率比较准确。另外,通过对信号加白噪
声后进行频率估计,可以看出,谱峰估计法不受信噪比影响,所以在信噪比极低
的情况下,谱峰估计法可以估计出相对准确的频率值。
5 设计中遇到的问题与心得
这次的实验说简单不简单,说困难不困难,经过了上次实验,我们对MATLAB
这个软件重新熟悉了,经过对老师的那两种方法的分析,具体思路的把握,我们
很快就可以编出程序。遇到的问题也不是很多,主要就是一些细节方面的东西没
注意。比如说,MATLAB中的数组下标是从1开始,所以第k个点对应的间隔数
应为k-1,之前写程序的时候没有注意到这点,结果导致估计出的频率偏差很大。
另外,我们还试过Pisarenko算法的matlab程序,估计出来的频率比较精准。
数字信号处理实验
第 - 5 - 页
这次的实验我们对MATLAB这软件更熟悉了,也运用到一些新的函数,同时我们
还学习到了两种频率估计方法:谱峰估计法和导数法。
参考文献
[1] 彭鸿铭. “对混有复白噪声的正弦信号的频率估计” 江汉大学学报, 2002, 19(3).