之前一直使用模拟频率f生成信号,然后今天看到别人使用了离散频率索引k,就犯迷糊了。在这里记录一下,离散频率索引k和模拟频率f的关系。
公式:
表达式一:sin(2* π* k /N* n)
表达式二:sin(2* π* f/ fs * n)
两者在形式上有很强的一致性,当满足k/N = f/fs(即f=k* fs /N)时,两个表达式完全等价。
比如说,fs=1000,N=1500,分别采用两种方式生成信号,k=350,f=233。
clc,clear,close all;fs = 1000; % 采样率
N = 1500; % 采样总点数
n = 0:N-1; % n表示采样的第n个点% 方式一:在N个采样点中,一共振动了k个周期
k = 350;
% 方式二:生成的信号频率为f
f = 233;xn_1 = 0.7*sin(2*pi*k/N*n); % 采用方式一生成信号
xn_2 = 0.7*sin(2*pi*f/fs*n); % 采用方式二生成信号
% xn_2-xn_1
max_xn_1 = max(xn_1)
max_xn_2 = max(xn_2)xk1=fft(xn_1);
xk2=fft(xn_2);P2=abs(xk1/N);
P1=P2(1:N/2+1);
P1(2:end-1)=2*P1(2:end-1);P4=abs(xk2/N);
P3=P4(1:N/2+1);
P3(2:end-1)=2*P3(2:end-1);% 频率轴
f = (0:N/2)*fs/N;
figure(1);
subplot(2,1,1);
plot(f,P1);
subplot(2,1,2);
plot(f,P3);
可以看到两者的最大值不一样。再看看频谱图。
方式一的信号幅值是与生成的幅值一致,但方式二的为实际的一半。原因在于k/N=350/1500=0.23333333333333333… ,而 233/1000=0.233两者的比值不一样。
当把233增加一个小数点3时,即f=233.3
此时很接近实际值。但还不是理想值0.7 。当再增加小数点时,f=233.333就一致了。
关于DFT的结果与输入信号幅值的关系,可以参考https://blog.csdn.net/qq_42622433/article/details/132312281