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

时间:2014-02-16 14:46:03

标签: matlab signal-processing spectrum

假设我们有以下代码

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)

enter image description here

如何从这张照片确定实际频率?我认为我需要将标准化频率转换为实际频率,因为我知道归一化频率与$ f / f_s $相同,其中$ f_s $是采样频率,但在此我该怎么办?

1 个答案:

答案 0 :(得分:4)

您需要乘以采样率的一半。即,归一化频率“1.0”是Fsample / 2。

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

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

运行pmusic(x, 2)在归一化频率0.1处给出明显的峰值。 转换为Hz,这是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])

相关问题