デジタルオシロスコープとMATLABを使用した発電機の高調波係数の測定の自動化

実際には、信号発生器の高調波係数(Kg)の測定で問題が発生することがあります。 このようなジェネレーターは、アナログでもデジタルでもかまいません。 たとえば、パルス幅変調(PWM)またはデジタルからアナログ信号の形式の出力を持つ、オペアンプ、統合タイマー(NE555)、マイクロコントローラー(MK)またはプログラマブルロジック集積回路(FPGA)、またはデジタルシグナルプロセッサー(DSP)上のジェネレーターコンバーター(DAC)。 高調波信号を生成する必要がある場合は、PWMまたはDACの出力にローパスフィルター(ローパスフィルター)がインストールされます。これにより、信号のステップ形状が滑らかになり、Kgが減少します。 一般に、Kgの測定により、ソフトウェアアルゴリズムとハードウェアノードの両方の動作を制御できます。



たとえば、 「時間領域で指定された信号電圧の高調波係数を測定する」という記事では、従来の測定器と有望な測定器の両方で、このパラメーターを測定するためのいくつかのオプションが提供されています 。 しかし、これらのデバイスは、たとえばデジタルオシロスコープやマルチメーターよりも特殊化されていることに注意してください。 したがって、すべてのエンジニアや無線アマチュアがそのようなデバイスをあえて購入するわけではありません。

即興のツールを使用してKgを測定する方法を理解するには、その式を調べる必要があります。 たとえば、記事「非線形歪みの係数」では 、このパラメーターの物理的意味について詳しく説明しています。 信号の高調波のみを使用する単純な式。 したがって、発電機の出力で信号の高調波の振幅を測定すると、Krを測定する問題の解は1つの式に還元されます。



デジタルオシロスコープには、高速フーリエ変換(FFT)オプションが含まれる場合があります。 この場合、オシロスコープはFFT測定モードに切り替わり、マーカーの助けを借りて、高調波の振幅が測定され、紙に記録されます。



画像






これは通常起こりますが、まず、時間がかかります。 測定は手動で行われます。 そして第二に、信号サンプリングの期間、したがって周波数におけるFFTの分解能は、原則として大幅に制限されます。 別のことは、オシロスコープを使用して希望の長さの信号のサンプルをキャプチャする場合です。スペクトルの後続の計算はすでにコンピュータ上にあります。



USBやイーサネットなどのリモートインターフェイスを備えたほとんどのデジタルオシロスコープは、信号の一時的なサンプルのキャプチャを処理し、それをコンピューターに転送できます。 また、スペクトルからKgを計算するには、Matlabを選択できます。 さらに、Instrument Control Toolboxが存在する場合、信号のリモートキャプチャはMatlabから直接行われます。



function [osc_data,fs] = osc_capture_ds2202() ds2000 = visa('ni','USB0::0x1AB1::0x04B0::DS2A142900939::INSTR'); % Create VISA object. ds2000.InputBufferSize = 2e6; fopen(ds2000); fprintf(ds2000,':CHAN1:BWLimit 20M'); % Set BandWidth Limit to 20MHz. fprintf(ds2000,':ACQ:MDEPth 140000'); % Set Memory Depth from several typical values. fs = str2double(query(ds2000,':ACQ:SRATe?')); % Get Sample Rate. %% Setup Waveform fprintf(ds2000,':STOP'); % Stop oscilloscope. fprintf(ds2000,':WAV:SOURce CHAN1'); fprintf(ds2000,':WAV:MODE RAW'); fprintf(ds2000,':WAVeform:FORMat ASCII'); fprintf(ds2000,':WAV:POINts 131072'); % Number of points that must be less than MDEPth. fprintf(ds2000,':WAV:RESet'); fprintf(ds2000,':WAV:BEGin'); pause(5); % Wait the end of the acquisition. %% Get Waveform while true status = query(ds2000,':WAV:STATus?'); pause(1); % Not neccesary, but... [state,rem] = strtok(status,','); len = strtok(sscanf(rem,'%s'),','); if eq(len,'0') break; end if eq(state(1),'I') osc_data = cell2mat(textscan(query(ds2000,':WAV:DATA?'),'%f','delimiter',',')); break; else osc_data = cell2mat(textscan(query(ds2000,':WAV:DATA?'),'%f','delimiter',',')); end end fprintf(ds2000,':WAV:END'); fprintf(ds2000,':RUN'); % Run the oscilloscope. %% Delete instrument object fclose(ds2000); delete(ds2000); clear ds2000;
      
      





しかし、スペクトルKg計算方法を使用する前に、オシロスコープが適切であることを確認する必要があります。 「残余のコーシー法による全高調波歪みの計算のための分析方法」という記事に記載されている研究によれば、Kg蛇行と、さまざまな次数のフィルターで蛇行をフィルタリングした後に受信した信号は、ケースはベンチマークかもしれません。 チェックするには、オシロスコープに接続する必要がある矩形パルス発生器が必要です。



画像






Signal Processing Toolboxを使用してプログラムで実装できる関連フィルターも同様です。



 clear all clc %% Signal Acquisition [s,fs] = osc_capture_ds2202(); % s - signal, fs - sample frequency. %% Setup parameters number_of_harmonics = 11; % Number of harmonics (including the fundamenal)... % to use in the THD calculation. L = length(s); % Length of the signal for FFT computing. It is used only for plot. T = 1/fs; t = (0:L-1)*T; s_ac = s-mean(s); % Remove DC level. It is not neccesary for thd function. s_ac = s_ac/max(abs(s_ac)); % Normalize signal. As above for thd. %% Estimate the THD of the signal [thd_dBc,harmpow,harmfreq] = thd(s_ac,fs,number_of_harmonics); thd_perc = 10^(thd_dBc/20)*100 % Convert dB to Percents and display result. figure(2); thd(s_ac,fs); % Plot the Spectrum of the signal. %% Apply Butterworth filter to signal and estimate THD for filtered signal [lpFilter_b_II, lpFilter_a_II] = butter(2,2*harmfreq(1)/fs,'low'); % Design B-II filter. filtII_s_ac = filter(lpFilter_b_II, lpFilter_a_II, s_ac); % Apply B-II filter to signal. thd_perc_BII = 10^(thd(filtII_s_ac,fs,number_of_harmonics)/20)*100 % Convert dB to Percents and display result. figure(3); thd(filtII_s_ac,fs); % Plot the Spectrum of the B-II filter. [lpFilter_b_IV, lpFilter_a_IV] = butter(4,2*harmfreq(1)/fs,'low'); % Design B-IV filter. filtIV_s_ac = filter(lpFilter_b_IV, lpFilter_a_IV, s_ac); % Apply B-IV filter to signal. thd_perc_BIV = 10^(thd(filtIV_s_ac,fs,number_of_harmonics)/20)*100 % Convert dB to Percents and display result. figure(4); thd(filtIV_s_ac,fs); % Plot the Spectrum of the B-IV filter.
      
      





画像








矩形パルス発生器の出力信号のスペクトル。 Kg = 43.98%











2次のバタワースフィルターの出力でのスペクトル。 Kg = 5.36%











4次バターワースフィルター出力でのスペクトル。 Kg = 0.59%



グラフの簡単な説明:キャップ内のTHDの対数値は最初の5つの高調波のみに対応するため、これらの値は類似の値とは異なり、多数の高調波が提供されます。



フィルターの出力でのKgは、計算されたフィルターと完全に一致することに注意してください。 ただし、矩形信号のKgは計算値よりも小さくなります。 矩形波のスペクトルはゆっくり減衰し、計算値を達成するために数十の高調波が必要になる場合があります-何もする必要がありません



Kgの測定を自動化するには、前のスクリプトに加えて、Instrument Control Toolboxを使用して、テストされたジェネレーターのコマンドをサポートする必要がありますが、これはデバイスにリモートインターフェイスがある場合のみです。 たとえば、コマンドがコマンドラインインターフェイス(CLI)として実装されている場合、すべてがシンプルである必要があります。



 [qty,b5_comport_list,~,b5] = b5_open_test; % Search connected devices. if qty b5.Port = b5_comport_list{1}; % Assign port to first device. fopen(b5); disp(b5_command(b5,'versions',.1)); % Display Versions of MCU and FPGA. disp(b5_command(b5,'sn',.1)); % Display Serial Number. b5_command(b5,'outrfreq 101050',.1); % Set output frequency. b5_command(b5,'outrlvl 0',.1); % Set output level. b5_command(b5,'outimp 600',.1); % Set output impedance. b5_command(b5,'outpath output',.1); % Connect generator to output connector. fclose(b5); % Close port. delete(b5); % Clear buffer. clear b5 % Remove var from memory. else disp('b5-vf is not connected'); delete(b5); % Clear buffer. clear b5 % Remove var from memory. end
      
      











実際、FPGAに基づいて開発された発電機のKgは、アナログ伝送システムをテストするために設計されたモジュールで測定されました。 例として、DACの出力(図のADC)およびタイプkのフィル​​ターリンク後のスペクトルとKgの値のグラフと、プロットに必要なスクリプトを以下に示します。



 %% Window win = tukeywin(length(s_ac),1); % Generate window. % win = 1; % Disable window. s_ac_win = s_ac.*win; % Apply the window. %% FFT nfft = 2^nextpow2(L); %% FFT length fft_s_ac_win = fft(s_ac_win,nfft)/L; f = fs/2*linspace(0,1,nfft/2+1); win_scale = 1/mean(win); %% Normalization the result fft_s_ac_win_lin = 2*win_scale*abs(fft_s_ac_win(1:nfft/2+1)); fft_s_ac_win_log = 20*log10(fft_s_ac_win_lin); %% Fig 1 figure(1); subplot(2,1,1), plot(t,s_ac), axis([0 max(t) -max(abs(s_ac)) max(abs(s_ac))]), grid on; title('\itADC','fontsize',10); xlabel('Time, \its','fontsize',10), ylabel('Amplitude, \itV','fontsize',10); subplot(2,1,2), plot(f,fft_s_ac_win_log), axis([0 fs/2 -110 10]), grid on; title('\itFast Fourier Transform (FFT) Plot','fontsize',10); xlabel('Frequency, \itHz','fontsize',10), ylabel('Amplitude, \itdB','fontsize',10);
      
      











DACの出力での信号とそのスペクトル、Kg = 28.3%









タイプkのフィル​​ターユニットの出力での信号とそのスペクトル、Kg = 2.5%



この作業はすべて、発電機の最大周波数のKgの最悪値を評価するためだけに行われたことに注意する必要があります。 200 Hz〜62 kHzの動作周波数帯域では、Kgは0.34%を超えませんでした。 これらの周波数では、信号とスペクトルのグラフはもはや興味深いものではありません。



したがって、DACが接続され、ローパスフィルタータイプkを使用した追加の信号フィルタリングを備えたFPGA上に構築されたジェネレーターの例を使用すると、回路のさまざまなポイントでのKgの測定が、コンピューターとMatlabに接続されたデジタルオシロスコープを使用して実行できることがわかります。 このようなメカニズムにより、デバイスの機能の品質を評価する時間が大幅に短縮され、エンジニアはコンピューティングのルーチンから解放されます。



All Articles