Демодуляция и функции Берга.

John
Сообщения: 10
Зарегистрирован: 29 сен 2020, 17:57

Демодуляция и функции Берга.

Сообщение John »

Здравствуйте уважаемые форумчане.

Продолжаю изучать влияние нелинейных искажений на гармонические колебания. Благодаря помощи здесь на форуме я узнал что при прохождении через нелинейный элемент гармонического сигнала его спектр обогащается гармониками. Также я узнал что при прохождении бигармонического сигнала через нелинейный элемент в спектре формируются комбинационные частоты (w2-w1) и (w2+w1) и их гармоники в дополнение к гармоникам исходных сигналов.

Теперь в первую очередь я хотел изучить влияние на спектр (пока только гармонического сигнала) нелинейного искажения, а именно отсечения. Для этого я написал небольшую программу в которой я и производил генерацию и модификацию сигнала, но столкнулся с проблемой. Исходя из описания здесь видно что амплитуда гармоник изменяется согласно функциям Берга при обрезании гармонического сигнала, там же есть графики первых 5 гармоник:

Изображение

В своей программе я также сгенерировал гармоническое колебание, в цикле произвел его обрезку линейно изменяя угол отсечки, и произвел измерение спектра (используя FFT) гармоник сигнала, но у меня получился похожий, но немного другой график. У меня волны на графике симметричны, а волны в графике в статье затухают при увеличении угла отсечки.

Заполнение массива сигнала с отсечением согласно углу отсечки:
  1.     fDelta2 = fPeriod2 / FFT_SIZE   ' // fPeriod2 = 10
  2.  
  3.    
  4.  
  5.     fThreshold = Cos(sldCutOff.Value / 180 * PI)  ' // sldCutOff слайдер от 0...180
  6.  
  7.    
  8.  
  9.     For lIndex = 0 To FFT_SIZE - 1
  10.  
  11.        
  12.  
  13.         fPhase2 = fPhase2 + fDelta2
  14.  
  15.         If fPhase1 > 2 Then fPhase2 = fPhase2 - 1
  16.  
  17.  
  18.  
  19.         fSample = Cos(fPhase2 * PI * 2)
  20.  
  21.  
  22.  
  23.         If fSample <= fThreshold Then
  24.  
  25.             fSignal(lIndex) = 0
  26.  
  27.         Else
  28.  
  29.             fSignal(lIndex) = (fSample - fThreshold) * fAmp2 ' // fAmp2 = 1
  30.  
  31.         End If
  32.  
  33.  
  34.  
  35.     Next
Гармоники считаю так:
  1.     For lAngle = 0 To 180
  2.  
  3.        
  4.  
  5.         sldCutOff.Value = lAngle ' // Изменяю угол отсечки и просчитываю спектр
  6.  
  7.         DoEvents
  8.  
  9.        
  10.  
  11.         For lHarm = 0 To 5
  12.  
  13.  
  14.  
  15.             lIndex = lBin * lHarm ' // lBin = 10
  16.  
  17.            
  18.  
  19.             fValue = Sqr(fSpectrum(0, lIndex) ^ 2 + fSpectrum(1, lIndex) ^ 2)
  20.  
  21.            
  22.  
  23.             ' // Логарифмический масштаб
  24.  
  25.             fValue = (Log(fValue + 0.01) / Log(10) + 2) / 2
  26.  
  27.            
  28.  
  29.             If lAngle Then
  30.  
  31.                
  32.  
  33.                 picGraph.Line (lAngle - 1, fAcc(lHarm))-(lAngle, fValue), lColor
  34.  
  35.                
  36.  
  37.             End If
  38.  
  39.            
  40.  
  41.             fAcc(lHarm) = fValue
  42.  
  43.            
  44.  
  45.         Next
  46.  
  47.        
  48.  
  49.     Next
Вот что выходит у меня:
Project007.gif
Где я мог ошибиться или это в статье график неправильный?

Заранее спасибо!

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 1053
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: Демодуляция и функции Берга.

Сообщение Бахурин Сергей »

Вероятно вы не нормируете к амплитуде ваших импульсов, которые нарастают с увеличением угла отсечки. Поэтому ваши графики отличаются от приведенных. Если вы поделите амплитуды FFT на максимальное значение импульса, то получите затухание.

Посмотрите
Гоноровский И.С. РТЦиС 1977 года у меня книга на странице 287

John
Сообщения: 10
Зарегистрирован: 29 сен 2020, 17:57

Re: Демодуляция и функции Берга.

Сообщение John »

Огромное спасибо за помощь!
Все получилось:
Project008.gif
Выкладываю исходные коды и скомпилированную программу.
Тут интерактивно можно посмотреть зависимость спектра от величины угла отсечки. Количество гармоник и логарифмический масштаб можно задать в коде.
non-linear.zip
(12.83 КБ) 84 скачивания

Ответить