2015-01-06 258 views
1

我有一個正弦波,並在同一曲線圖上顯示了一個直流波,它是沒有反饋的運算放大器比較器的閾值電壓。在MATLAB中創建一個矩形波

到目前爲止,我編寫的代碼是:

t1 = 0:t/1000:N*t; 
y1 = Vin*sin(2*(1/t)*3.14*t1); 
subplot('position',[0.056 0.1 0.27 0.25]); 
plot(t1,y1,t1,Vth, 'r'); 
grid on; 
title('Input Signal'); 
xlabel('Time[s]'); 
ylabel('Vi'); 

我的問題是我需要另一個情節中,我有一個矩形波時,由達到閾值從Vin更改爲-Vin正弦波。

這就是我要做的:

我已經試過我知道在MATLAB一切努力使該情節,但我還沒有成功地創造它。有誰知道如何?

回答

2

另一種方法是通過sign結合使用Signum function一個正弦函數。

Signum function在信號處理中使用相當多,特別是在通信系統中使用Hilbert Transform。 signum函數是一個符號指示符。如果輸入爲正值,則輸出爲1,如果輸入爲負值,則輸出爲-1,如果輸入爲0,則輸出爲0.這很好地模擬了沒有反饋的運算放大器。但是,您希望在達到閾值時更改符號。因此,您可以將sign應用於減去此閾值的信號。鑑於您的輸入/輸出由Vin縮放,則需要通過Vin的範圍內規模sign輸出以及輸出爲 -/+ 1

這裏就是我說的一個例子約:

Vth = 1; %// Threshold 
Vin = 5; %// Amplitude of input/output 
fs = 10; % // Hz 
t = 0 : 0.001 : 0.5; 
y = Vin*sin(2*pi*fs*t); 
yout = Vin*sign(y - Vth); 
plot(t, y, t, yout, [0 0.5], [Vth Vth]); 

上面代碼聲明的1閾值時,輸入爲5的幅度,然後通過指定一個正弦頻率,以及從0至0.5秒的0.001步驟的時間矢量。接下來,我們生成一個正弦信號,然後生成使用閾值的飽和波。我們繪製的正弦信號,飽和信號以及門檻的印記,以便你可以看到它的工作

這就是我得到:

enter image description here

正如你所看到的,飽和波改變極性一旦浪潮超過門檻。

1

你可以做以下

y2 = Vin*(y1 >= thresh) + -Vin*(y1 < thresh) 

當你做y1 >= thresh,你將有1的其中Y>脫粒,否則爲0(你再乘以Vin)。相反將發生的-Vin

這是什麼輸出看起來(儘管我做了這個在Python中,但語法是相同的)時疊加。閾值設置爲2這裏

enter image description here

0

你可以這樣做:

y2=y1; 
y2(y2>=Vth)=Vin 
y2(y2<Vth)=-Vin 

要繪製兩種:

subplot(2, 1, 1), plot(t1, y1); 
subplot(2, 1, 2), plot(ti, y2);