假设我们有以下代码
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 $是采样频率,但在此我该怎么办?
答案 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])
。