首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >利用调和数生成直方图

利用调和数生成直方图
EN

Stack Overflow用户
提问于 2018-06-01 05:38:29
回答 1查看 151关注 0票数 1

我正在尝试用GNU Octave创建一个程序来绘制一个直方图,显示一个修改的正弦波的基波和谐波( SCR调光器的输出,它由一个正弦波组成,它在波的中途一直是零)。

我已经能够生成波形并执行FFT来获得一组频率与幅度点,但是我不确定如何将这些数据转换为适合生成直方图的柱状图。

下面是我想要的示例代码和图片--谢谢你的帮助!

代码语言:javascript
复制
clear();
vrms = 120;
freq = 60;
nCycles = 2;
level = 25;
vpeak = sqrt(2) * vrms;
sampleinterval = 0.00001;
num_harmonics = 10

disp("Start");

% Draw the waveform
x = 0 : sampleinterval : nCycles * 1 / freq; % time in sampleinterval increments
dimmed_wave = [];
undimmed_wave = [];
for i = 1 : columns(x)
  rad_value = x(i) * 2 * pi * freq;
  off_time =  mod(rad_value,  pi);
  on_time =  pi*(100-level)/100;
  if (off_time < on_time)
    dimmed_wave = [dimmed_wave, 0]; % in the dimmed period, value is zero
  else
    dimmed_wave = [dimmed_wave, sin(rad_value)]; % when not dimmed, value = sine
  endif
  undimmed_wave = [undimmed_wave, sin(rad_value)];
endfor

y = dimmed_wave * vpeak; % calculate instantaneous voltage
undimmed = undimmed_wave * vpeak;

subplot(2,1,1)
plot(x*1000, y, '-', x*1000, undimmed, '--');
xlabel ("Time (ms)");
ylabel ("Voltage");

% Fourier Transform to determine harmonics
subplot(2,1,2)

N = length(dimmed_wave);  % number of points
fft_vals = abs(fftshift(fft(dimmed_wave))); % perform fft
frequency = [ -(ceil((N-1)/2):-1:1) ,0 ,(1:floor((N-1)/2)) ] *  1 / (N *sampleinterval);
plot(frequency, fft_vals);
axis([0,400]);
xlabel ("Frequency");
ylabel ("Amplitude");
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-01 06:05:59

你知道你的基频(基音),我们称它为F2*F是第二次谐波,3*F是第三次谐波,依此类推。你想要在1.5*F2.5*F等之间设置直方图的二进制边缘。

您的输入信号中有两个周期,因此您的(整数)基频是k=2 ( fft_vals[k+1]处的值,曲线图中的第一个峰值)。第二次谐波在k=4,第三次谐波在k=6,等等。

因此,您可以将存储箱边缘设置为k = 1:2:end

通常,这将是k = nCycles/2:nCycles:end

您可以根据我们计算的仓边计算条形图,如下所示:

代码语言:javascript
复制
fft_vals = abs(fft(dimmed_wave));
nHarmonics = 9;
edges = nCycles/2 + (0:nHarmonics)*nCycles;
H = cumsum(fft_vals);
H = diff(H(edges));
bar(1:nHarmonics,H);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50633176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档