如何将归一化频率转换为实际频率

4
假设我们有以下代码:
function [ x ] = generate1(N,m,A3)
f1 = 100;
f2 = 200;
T = 1./f1;
t = (0:(N*T/m):(N*T))'; %'
wn = randn(length(t),1); %zero mean variance 1
x = 20.*sin(2.*pi.*f1.*t) + 30.*cos(2.*pi.*f2.*t) + A3.*wn;
%[pks,locs] = findpeaks(x);
 plot(x)
end

我已经使用以下命令生成了信号:

`我已经使用以下命令生成了信号`

y=generate1(3,500,1);

我有一个长度为501的样本,现在我想用音乐方法来检测频率,即100和200。假设参数数量为2,因此我尝试了以下:

pmusic(y,4)

如何从这张图片中确定实际频率?我认为我需要将标准化频率转换为实际频率。我知道标准化频率与$f/f_s$相同,其中$f_s$是采样频率,但在这种情况下我该怎么做?
1个回答

4

你需要乘以采样率的一半。也就是说,归一化频率“1.0”是Fsample/2。

举个简单的例子,这是一个200 Hz的信号,采样率为4KHz:

x=sin(2*pi*200/4000*[0:1000])

运行pmusic(x, 2)会在归一化频率0.1处产生明显的峰值。转换为赫兹,这是0.1*4000/2 = 200 Hz。

我已经修改了您的函数,使其更容易分析(只有一个正弦函数而没有随机性):

 function x = gen(N,m)
    f1 = 100;
    T  = 1/f1;
    dt = N*T/m;

    x = sin(2*pi*f1*dt*[0:num_of_samples]);
 end

 x = gen(3,500,1e3);

为了获得更好的分辨率,使用pmusic(x,2,[0:.01:0.2])

但为什么是0.1呢?在我的情况下,采样频率为16666.66666666667,所以我应该有0.1*16666.66666666667/2吗? - user466534
你在这里吗?我无法继续。 - user466534
在我的图中,峰值没有准确的归一化频率指示,我应该猜测吗? - user466534
在您的情况下,估计频率将为 Fs/2*0.116 = 1.666e3/2 * 0.116 = 96 Hz。如果您取更多样本,可以获得更好的准确性。您预计在100 Hz和200 Hz(f1和f2)处有峰值。 - nimrodm
1
你必须知道采样频率才能估算出真实频率。 - nimrodm
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接