Осваиваю DSP в Matlab.
Для дальнейшего движения вперёд хочу создать/найти функцию, которая генерит сигнал - набор синусоид с заданным уровнем, а таже подмешивает шум. Всё показалось простым до того момента как дело дошло до проверки сгенерированного сигнала на спектре.
Основной вопрос - как правильно рассчитать амплитуду генерируемого шума, чтобы потом на спектре увидеть ровно тот самый SNR, что задавался в качестве параметра.
Пытаясь создать такую функцию, я столкнулся со следующими проблемами/нюансами:
1. Расчёт амплитуды генерируемого шума.
2. Точное построение спектра сигнала. Как учитывать следующие факторы:
- уменьшение энергии сигнала при домножении на оконную функцию
- нормализация спектра учитывая длину выборки (как сохранить и нужно ли энергию сигнала). Необходимо ли учитывать теорему Парсеваля?
- как учитывать различие комплексного и вещественного сигналов? Например, понятно, что если сигнал вещественный, то спектр его будет симметричным. Поэтому практически все примеры выводят только половину спектра, но энергия-то содержится в обоих частях спектра?
- каково влияние числа точек FFT на уровень шума в спектре: 10log10(N/2) либо 10log10(sqrt(N))?
И уже совсем примитивный вопрос: никак не удаётся сгенерить сигнал размахом в 1 и увидеть его на спектре на уровне 0db.
Разъясните, пожалуйста, эти вопросы.