簡體   English   中英

在Matlab中生成變頻正弦波

[英]Generating a variable frequency sine wave in Matlab

標題有點說明了一切,而且看起來很簡單,但是我遇到了困難。

我想創建一個正弦波,該正弦波以我輸入的功率呈指數衰減。 我嘗試了很多不同的嘗試,要么變得胡言亂語,要么被我稱為聲震?

亂碼的例子

在此示例中,數組乘數從1-> 4開始。 當我繪制cos(70000000 * t)和cos(4 * 70000000 * t)時,兩個圖看起來都很好,但是下面代碼中的圖看起來像是噪聲。

t = 1:.0000000004:1.0000004;
multiplier = linspace(1,2,1001).^-2;
reference_signal = cos(700000000*t.*multiplier);
plot(reference_signal)

節拍示例http://imgur.com/E9HPLy8

t = 1:.0000000004:1.0000004;
mult = linspace(1,3,1001);
plot(cos(700000000*t.*mult));

有誰對我如何創建一個表示正弦波的陣列有任何想法,正弦波的頻率呈指數衰減?

非常感謝

我認為您的問題是采樣問題之一-對於您要表示的信號,采樣頻率太低。

我建議您通過顯式計算進行調試

freq = 7E8/(2*pi);
t = 1 + linspace(0, 4E-7, 1001);
multiplier = linspace(1,2,1001).^2;
omega_t = 2*pi*freq*t.*multiplier;
d_omega_t = diff(omega_t);
plot(d_omega_t);

如果d_omega_t變得大於pi,則說明您存在混疊問題-每個周期至少需要兩個點才能忠實地再現波形(奈奎斯特定理)。 這可以通過使用較高的采樣頻率(更多的點)或較低的頻率來解決。

實際上,您的1和4的乘數看起來不錯,因為正在進行的別名是恆定的-因此您不會注意到這是一個問題。

更新

我只是在時間變量中帶有+1和不帶有+1情況下運行了以上代碼-這有很大的不同。 兩個相鄰值之間的增量為

2*pi*freq*(1 + t(n) - t(n-1)) * (mult(n) - mult(n-1))
2*pi*freq*(mult(n) - mult(n-1) + (t(n)-t(n-1)) * (mult(n)-mult(n-1))

這是一個非常大的值,因為2 * pi freq (multi(n)-mult(n-1))是一個非常大的值。

當您忽略+1並執行

t = linspace(0, 4E-7, 1001);
multiplier = linspace(1,2,1001).^-2;

事情表現出預期的效果-情節最終看起來像:

在此處輸入圖片說明

t = 0:0.0001:2*pi;
l = linspace(1,4,numel(t)).^2;
s = sin(t.*l);
figure,plot(t,fliplr(s)),axis tight

產生圖:

在此處輸入圖片說明

要計算可變頻率的信號,必須保持相位角,因此最好執行以下操作:

a [n + 1] = a [n] + 2 * pi * f(t)

其中a是樣本n處的正弦波相位,f(t)是您在改變頻率。 然后可以很容易地產生正弦波:sin(a)

在2秒內從1 Hz到4 Hz的頻率的matlab代碼:

Ts = 0.0001;
t = 0:Ts:2;
f = linspace(1, 4, length(t));
d_a = 2 * pi * f * Ts;
a = cumsum(d_a) % + initial angle if you like
res = sin(a);
plot(t, res)

在這里找到合適的答案:

https://www.mathworks.com/matlabcentral/answers/217746-implementing-a-sine-wave-with-linearly-changing-frequency?s_tid=mwa_osa_a

“公式:

 sin( 2*pi*f(t)*t )

不會產生隨頻率變化的所需正弦波。 相反,適當的公式將使用f(t)的0和t之間的積分代替f(t)* t:

 sin( 2*pi* ∫f(t)dt ) 

僅當f(t)是恆定的f值時,其積分才是f * t,而正弦波才是熟悉的sin(2 * pi f t)。

這樣做的合理性是正弦頻率是正弦相位的變化率/導數。 如果給定了所需的頻率曲線f(t),則需要對其進行積分以計算所需的正弦波相位(直到一個恆定的加法項),然后才能從中計算所需的波形。

(...)

在構建調頻信號時,使用sin(2 * pi * f(t)* t)代替sin(2 * pi *∫f(t)dt)並不是一個普遍的錯誤。 當f(t)是多項式函數時,前者會導致“幾乎正確看似”的解決方案,這一事實使情況更加惡化。 改用非多項式函數(例如f(t)= 2 + sin(t),一種在1Hz和3Hz之間振盪的調頻音),可以更清楚地看到這兩種方法之間的差異。”

(阿方索·涅托·卡斯塔農)

在我試圖創建一個線性增加的頻率正弦函數時,這為我解決了這個問題,為一個可變變頻器(V / F控制)的上升斜坡建模,並在斜坡末端獲得了兩倍的頻率。

我正在使用此功能

 V(ctrl)*V(pk)*cos(v(w_ctrl)*time + 0*3.14159/180); (i)

哪里:

 v(w_ctrl) = 377 * V(ctrl); (ii)

 V(pk) = 180; (iii)

 V(ctrl) = 1*time; for time = 0...1 and V(ctrl) = 1; for time > 1 (iv)

因此公式(i)簡化為:

 V(ctrl)*180*cos(377*time^2 + 0*3.14159/180); for time = 0...1 (v)

結果如圖1所示。

然后,我使用了函數v(w_ctrl)的積分,而沒有'time'變量:

 V(ctrl)*V(pk)*cos(v(int_w_ctrl) + 0*3.14159/180); (vi)

實際上,該功能

 V(ctrl)*V(pk)*cos( (377*time^2)/2 + 0*3.14159/180); for time = 0...1 (vii)

如圖2所示,這將導致適當的結果。

我使用的程序是Multisim 14,電路如圖3所示。

變頻上升斜坡-無積分

變頻上升斜坡-積分

仿真電路

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM