Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 11.08.2015, 17:25  
zenekk
Частый гость
 
Регистрация: 05.05.2011
Сообщений: 16
Сказал спасибо: 1
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
zenekk на пути к лучшему
По умолчанию ДПФ, как узнать реальную амплитуду гармоники

Здравствуйте!
Есть сигнал который подвергается дискретному преобразованию фурье.
На выходе ДПФ есть мнимая и действительная части, корень из суммы квадратов которых есть амплитуда определенной частоты в сигнале.

Вот написал небольшую программку, которая генерирует сигнал и проводит над ним прямое преобразование фурье:

Код:
#include "stdafx.h"

#include ‹stdio.h›
#include ‹math.h›
#include ‹string.h›
#define PI 3.141592653589793238462643383279


#define SAMPLERATE 8000 
#define signal1_HZ 125  
#define signal2_HZ 375
#define DFT_SIZE 64     // êîëè÷åñòâî âûáîðîê äëÿ ÄÏÔ


signed char buff[SAMPLERATE];
float fbuf[SAMPLERATE];


void Generate (void)
{
    FILE* myfile;
    FILE* file; 
    int i;
    int ch;
    myfile = fopen("C:\\file.wav", "w"); 

    for(  i = 0; i ‹ SAMPLERATE ;i++)
	{
		
		fbuf[i]=64*((sin(2*PI*i*signal1_HZ/SAMPLERATE))+(sin(0.8+2*PI*i*signal2_HZ/SAMPLERATE))); // äâà ñèíóñà
		//fbuf[i]=42*((sin(2*PI*i*signal1_HZ/SAMPLERATE))+(sin(0.8+2*PI*i*signal2_HZ/SAMPLERATE))+(sin(2*PI*i*1500/SAMPLERATE))); // òðè ñèíóñà
		fputc((signed char)fbuf[i],myfile);
		//printf("%f\n",fbuf[i]); 
    } 

    fclose(myfile);
 
}


float Re[DFT_SIZE],Im[DFT_SIZE],Ampl[DFT_SIZE],summ=0;


int main(void)
{
	int i=0,j=0;

	Generate();

	for(i=0;i‹DFT_SIZE;i++){

		for(j=0;j‹DFT_SIZE;j++){
			Re[i]+=(float)fbuf[j]*cos(2*PI*i*j/DFT_SIZE);
			Im[i]-=(float)fbuf[j]*sin(2*PI*i*j/DFT_SIZE);
		}

		Ampl[i] = (float)sqrt(Re[i]*Re[i] + Im[i]*Im[i]);
	}


	for(i=0;i‹DFT_SIZE;i++){
		printf("Amp[%d]\t\t(%d Hz)\t = %f\n",i,(SAMPLERATE/DFT_SIZE)*i,Ampl[i]);
	}

	while(1);
	return 0;

}
Вот результат работы программы для сигнала - синус 125Гц + синус 375Гц:


А вот для просто синуса 375Гц:


Для понимания, вот сами сигналы:


Частота дискретизации сигнала - 8000Гц.
Теперь вопрос!
Как определить реальную амплитуду? В результатах работы программы амплитуда пляшет для двух синусов - по 2048 на частоту, для одного синуса - 4064 единиц. Что это за единицы? Как из привести к нормальному виду? И как из них получить в дб, какое значение принимать за 0Дб?
Реклама:
zenekk вне форума  
Непрочитано 11.08.2015, 18:36  
индюк
Гуру портала
 
Аватар для индюк
 
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,413
Сказал спасибо: 176
Сказали Спасибо 3,128 раз(а) в 2,017 сообщении(ях)
индюк на пути к лучшему
По умолчанию Re: ДПФ, как узнать реальную амплитуду гармоники

не смотрел программу.....
обычно же для преобразований на окно сначала умножают сигнал
функций окна тоже полно. все они влияют на те или оные точностные параметры
__________________
кагмаподэ магмаподэ
индюк вне форума  
Непрочитано 11.08.2015, 19:33  
raxp
Почётный гражданин KAZUS.RU
 
Регистрация: 28.05.2010
Сообщений: 1,118
Сказал спасибо: 150
Сказали Спасибо 604 раз(а) в 310 сообщении(ях)
raxp на пути к лучшему
По умолчанию Re: ДПФ, как узнать реальную амплитуду гармоники

...амплитуды гармоник в спектре принято выдавать на гора в децибеллах. К реальной амплитуде приводят нормированием к характеристикам физического канала связи, грубо говоря калибровкой.
__________________
Белорусский журнал «Радиолюбитель»
Youtube LaboratoryW
UR3QQJ
raxp вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
FAQ (ЧаВО) по PROTEUS для начинающих и не только dosikus Proteus 221 07.03.2024 22:45
как узнать что использует СОМ порт? dimonbest Микроконтроллеры, АЦП, память и т.д 40 29.12.2016 13:00
[Решено] Сборник перлов любителей кабельщины mikesmith Отвлекитесь, эмбеддеры! 135 14.08.2007 15:49
[Решено] Всем эмбеддерам посвящается... Decan Отвлекитесь, эмбеддеры! 0 24.10.2005 14:43


Часовой пояс GMT +4, время: 08:18.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot