如何使用指数函数生成正弦和余弦函数?

信息处理 matlab 采样 连续信号
2022-02-19 23:44:28

我一直在尝试通过给定的采样频率生成正弦和余弦采样图。

fc = 4092; % Carrier frequency Hz

fs = 16368; % Sampling freq Hz
ts = 1/fs; % Sampled time

nn = [0 :4091] % Array with numbers from 0 to fc


y1 = exp(i*2*pi*fc*ts*nn); % Exponential equation

cosine = real(y1);
sine = imag(y1);



subplot(2,2,1);
plot(cosine);
axis tight;
grid on;

subplot(2,2,2);
plot(sine);
axis tight;
grid on;
2个回答

如果您已经定义了一个采样频率,那么您应该在定义您的时间网格“nn”时使用它,否则您只是在以数字步长递增。

网格“nn”基本上是一个数字网格,而不是代表基于您定义的采样频率的真实采样。此外,您的时间网格的范围应该是正弦曲线时间段的倍数(它可以是任何东西,但如果你想用那个术语定义它,那么根据正弦曲线的时间段而不是频率来定义它)。我修改了下面的代码以查看 5 个正弦曲线周期。希望能帮助到你

fc = 4092; % carrier frequency Hz

fs = 16368; % sampling freq Hz

nn = [0 : (1/fs):5*(1/fc)] % array with numbers from 0 to fc

y1 = exp(i*2*pi*fc*nn); % exponential equation

你有基本的想法,但首先你有一些发布的格式问题(这可能不在你正在执行的内容中)。而且还不清楚您希望在图中看到什么(一个周期?更多?)。

格式问题:首先,“ts = 1/fs;” 应该拆分到另一行,否则它会在前面的注释中丢失。其次,“pi fc ts”应该是“pi * fs *ts”。等效地,您可以通过完全摆脱ts并除以fs来简化。

一个概念问题是您将nn定义为“从 0 到 fc”。它与fc没有关系,它只是你想在屏幕上绘制多少点。

最后,因为您绘制的频率fs是采样率fc的四分之一,所以您最终只会绘制四分之一周期。您可能希望至少看到一个完整的周期,因此您还需要乘以另一个因子。

我假设您想从查看一个周期开始,以证明您对复指数的看法是正确的。所以,这里的情节只是0到2pi,一个周期。如果您想缩放频率,并且如果您想在图中显示更多周期,则将 2*pi 乘以 fc/fs 乘以大于 1 的因子来做到这一点。

plotPoints = 1000;  % number of points in plot

nn = [0 : plotPoints - 1];

y1 = exp(i*2*pi * nn/plotPoints); % exponential equation from 0 to 2pi

cosine = real(y1); sine = imag(y1);

subplot(1,2,1); plot(cosine); axis tight; grid on;

subplot(1,2,2); plot(sine); axis tight; grid on;

余弦和正弦图