2016-07-12 30 views
-1

周波数50Hz、振幅50の正弦波が必要です。さらに、正弦波に沿って三角波リップル(+10〜-10)と1000Hzの周波数が必要です。matlabにリップルを持つ正弦波信号を生成する方法はありますか?

example image

平均値は正弦波ですが、実際の波形はリップルではありません(つまり、三角形で脈動します)。オリジナルの波形は、私は次を続行する方法がわからない正弦波

`

f_inv_ac = 50; 

fs_inv = 1e3; 

p_inv_ac = 150e3; % power in Watt 

u_inv_ac_rms = 400; % output voltage (RMS) in V 

i_inv_ac_rms = p_inv_ac/u_inv_ac_rms/sqrt(3); 

t_inv_ac = 1/f_inv_ac; % Inverter output period in s 

ts_inv = 1/fs_inv; % Inverter switching period in s 

vector_calc = zeros(1, num_inv_switch); 

t_inv = vector_calc; 

angle_inv_rn = vector_calc; 


for i = 1:num_inv_switch 

    t_inv(i) = i*ts_inv; 

    angle_inv_rn(i) = 2*pi*t_inv(i)/t_inv_ac; 

end 


u_inv_ac_rn = u_inv_ac_rms*sqrt(2/3)*sin(angle_inv_rn); % R-N voltage 

i_inv_ac_r = i_inv_ac_rms*sqrt(2)*sin(angle_inv_rn); % R current 

figure 

plot(t_inv*1e3,i_inv_ac_r) 


%% for ripple calulation 

fs_inv = 1e3; % frequency ripple 

% current ripple 

delta_i_inv_r = zeros(1, num_inv_switch); 

% current peak-value 

i_peak_inv_r = zeros(1, num_inv_switch); 

% current bottom-value 

i_bottom_inv_r = zeros(1, num_inv_switch); 

% Current ripple (peak-to-peak) (in version 1.00 no ripple considered) 

    delta_i_inv_r(i) = i_inv_ac_r(i)*0.30; 


% Current-peak value 

i_peak_inv_r(i) = i_inv_ac_r(i) + delta_i_inv_r(i)/2; 

i_bottom_inv_r(i) = i_inv_ac_r(i) - delta_i_inv_r(i)/2;` 

形で三角形の伝播(移動)です。

+1

あなたはすでに何を試してみましたか?あなたのサンプリング周波数は何ですか?既存のコードはありますか? – hbaderts

+0

完全な質問は申し訳ありません。新しいスタックオーバーフロー。私はすぐに私のコードを更新します。 –

答えて

0

あなたの場合、sawtoothの周波数と振幅を実験したいと思います。

amplitude=1; 
amplitude2=0.1; 
amplitude3=0.3; 
t=1:0.01:10; 
frequency=0.1; 
frequency2=1; 
frequency3=4; 
sinusoid = amplitude * (sin(frequency * 2 * pi * t)); 

sinusoid2 = sinusoid + amplitude2 * (sin(frequency2 * 2 * pi * t)); 

square_wave_1 = sinusoid + amplitude2 * square(frequency2*2*pi*t,50); 

square_wave_2 = sinusoid + amplitude2 * square(frequency2*2*pi*t,33); 

sawtooth = sinusoid + amplitude3 * sawtooth(frequency3*pi*t); 


figure;hold on 
plot(t,sinusoid) 
plot(t,sinusoid2,'k') 
plot(t,square_wave_1,'r') 
plot(t,square_wave_2,'g') 
plot(t,sawtooth,'c') 

注意してください、sawtoothのための私のコードはいくつかの周波数とamplitudesに悪いようです。それで気を付けてください。私はあなたのコードを使用せずに質問をするつもりです

+0

あなたのスーパーインポーズはノコギリ波が正しく見えないので、修正したいかもしれません。 – GameOfThrows

+0

私は参考として画像を使用しました。私が直面している問題の概要を説明する。あなたの答えをありがとう。それでも問題は解決されません。 –

2

、私はあなたが不快ではありません願っていますが、すべての変数を理解することは困難であり、また、あなたのVARSの一部が欠落していると私はあなたのコードを実行することはできません。

まず者の範囲を作成してみましょう:

t = 0:0.00001:0.1; %test range - change 0.00001 to get more samples. 
y=50*sin(2*pi*50*t); %generated simple Sine wave 
% generate Triangle wave 
period=1/2000; % same as 1/frequency in your case, 2000Hz 
phase=0; % 0 unless you want it phase shifted 
ratio=0.5; % 50:50 ratio, if you want sawtooth use 0.99 
amp=20*1.25; %generates the 0 to 20 range for triangle wave 
u1=rem(t+phase*period/(2*pi)+period,period); 
s=(u1<=period*ratio).*u1*amp/(period*ratio)+(u1>period*ratio).*(period-u1)*amp/(period*(1-ratio))-10; %NOTE this is actually Simulink's triangle wave generator 

%combine them 
z = s+y; 

figure 
plot(t,y,'r') 
hold on 
plot(t,z) 

and there you have it

+0

ありがとうございます。私は自分のコードで実装します。 私はそれが役に立つと思います。私は私の実装後にあなたを更新します。 –

+0

@grandhisrujanあなたは大歓迎です、追加することでそれらを組み合わせる3番目の部分を知る必要があると思います。スーパーインポーズを作成し、それらをエレメントワイズプロダクトで組み合わせることでモジュレーションが作成されます。あなたが正しい答えを見つけたら、この答えを受け入れてください:D – GameOfThrows

関連する問題