matlab求基音频率,matlab基音周期频率估计

专业班级 组别

成员

实验内容:利用至少两种频率估计方法编程求给定信号的频率 1 设计思路

方案一:采用谱峰估计法

将信号进行傅里叶变换,从频谱中找到幅度最大的谱线,对应频点与频率分辨率乘积即为信号频率。

方案二:采用导数法

利用傅里叶变换性质,将原信号进行时域求导,再利用离散Parseval 定理,求出原信号的频率。具体推导公式如下:

时域信号x (t ) =e j Ωt ,求导得x (n ) (t ) =(j Ω) n x (t ) 两边同时平方积分,得 ⎰∞

-∞|x (t ) |dt =⎰|(j Ω) x (t ) |dt =Ω-∞(n ) 2∞n 22n ⎰∞-∞|x (t ) |2dt

Ω=

运用离散Parseval 定理,得

ω=2π

N 其中,ω为0~2π的一个频点,采样频率为Fs ,由此计算出频率f =ω⨯Fs 2π

2 程序代码

① 谱峰估计法

function f=pufeng

load signal; %信号自动存于变量S

N=128;

Fs=4000; %信号采样频率

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

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)');

legend('导数法',' 谱峰估计法');

4 运行结果与分析

已知给定待测信号的频率为350Hz ,从上图可以看出,在相同N 值的前提下(此处N=128),导数法估计出的信号频率比较准确。另外,通过对信号加白噪声后进行频率估计,可以看出,谱峰估计法不受信噪比影响,所以在信噪比极低的情况下,谱峰估计法可以估计出相对准确的频率值。

5 设计中遇到的问题与心得

这次的实验说简单不简单,说困难不困难,经过了上次实验,我们对MATLAB 这个软件重新熟悉了,经过对老师的那两种方法的分析,具体思路的把握,我们很快就可以编出程序。遇到的问题也不是很多,主要就是一些细节方面的东西没注意。比如说,MATLAB 中的数组下标是从1开始,所以第k 个点对应的间隔数应为k-1,之前写程序的时候没有注意到这点,结果导致估计出的频率偏差很大。另外,我们还试过Pisarenko 算法的matlab 程序,估计出来的频率比较精准。

这次的实验我们对MATLAB 这软件更熟悉了,也运用到一些新的函数,同时我们还学习到了两种频率估计方法:谱峰估计法和导数法。

参考文献

[1] 彭鸿铭. “对混有复白噪声的正弦信号的频率估计” 江汉大学学报

, 2002, 19(3).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值