EKirshin 0 28 июля, 2008 Опубликовано 28 июля, 2008 · Жалоба Осваиваю DSP в Matlab. Для дальнейшего движения вперёд хочу создать/найти функцию, которая генерит сигнал - набор синусоид с заданным уровнем, а таже подмешивает шум. Всё показалось простым до того момента как дело дошло до проверки сгенерированного сигнала на спектре. Основной вопрос - как правильно рассчитать амплитуду генерируемого шума, чтобы потом на спектре увидеть ровно тот самый SNR, что задавался в качестве параметра. Пытаясь создать такую функцию, я столкнулся со следующими проблемами/нюансами: 1. Расчёт амплитуды генерируемого шума. 2. Точное построение спектра сигнала. Как учитывать следующие факторы: - уменьшение энергии сигнала при домножении на оконную функцию - нормализация спектра учитывая длину выборки (как сохранить и нужно ли энергию сигнала). Необходимо ли учитывать теорему Парсеваля? - как учитывать различие комплексного и вещественного сигналов? Например, понятно, что если сигнал вещественный, то спектр его будет симметричным. Поэтому практически все примеры выводят только половину спектра, но энергия-то содержится в обоих частях спектра? - каково влияние числа точек FFT на уровень шума в спектре: 10log10(N/2) либо 10log10(sqrt(N))? И уже совсем примитивный вопрос: никак не удаётся сгенерить сигнал размахом в 1 и увидеть его на спектре на уровне 0db. Разъясните, пожалуйста, эти вопросы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
shf_05 0 28 июля, 2008 Опубликовано 28 июля, 2008 · Жалоба ну по порядку 1 амплитуду шума рассчитывать не надо- когда исп-те ф-ю randn, то из ее хелпа, видно, что она формирует сигнал с нулевым МО и ед. дисперсией, для изменения дисперсии просто умножайте ее выход на необх вам дисперсию . а если так уж и надо измерить, то есть ф-ии вычисяющие дисперсию и проч. хар-ки сигнала std, cov и тп (см statisicы toolbox) 2 окном одинаково ослабляется и сигнал и шум 3 если сигнал комплексный, то пусть и шум будет комплексный noise= hilbert(noise); а если вещественный коль спектр симметричный, то выводится его половина, можно и весь вывести. 4 для построения спектральных хар-к используйте ф-ии типа periodogramm, pburg и т.п. от числа точек в fft уровень шума поменяться не может, при увеличении числа точек в fft без увеличения числа отчетов что-либо практически полезное вряд ли удастся (см статью fft zoom на форуме), а так можно только попытаться уменьшить эффект "растекания" спектров, что достигается вдобавок окнами 5 если генерировать сигнал с размахом в 1, то это должен быть сигнал одной! частоты, тогда можно пытаться что-то увидеть, если это не синус, а суммас синусов или шум, то этого не сделать в принципе PS почитайте немного лекции про бпф, теорию случ. сигналов, а еще лучше совместите это с чтением чего нить типа "обработка сигналов в матлаб" или "цос в матлаб". это не издевка и не шутка, а чисто житейский совет))) ибо сам я задавал подобные вопросы, задаю и буду задавать, но приоритет должен быть у литературы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
eugen_pcad_ru 0 29 июля, 2008 Опубликовано 29 июля, 2008 · Жалоба В добавление к shf_05: у шума нет такого параметра, как амплитуда. Есть среднеквадратическое отклонение, квадрат которого и равен мощности шума (при 0-вой постоянной составляющей). Мощность гармонического сигнала = Um*Um/2, где Um - амплитуда гармоничесого сигнала (ГС). Итак: генерим ГС заданной амплитуды (мощности), примешиваем к нему шум с требуемым СКО. Получаем требуемое ОСШ (SNR). Если подмешивать несколько ГС, то мощность соответственно наращивается. Для моделирования подходят все указанные программы. Я пользовался SpectraPlus (или можно еще CoolEdit) - это программы для работы со звуком, в которых 0чень просто можно смотреть все эти параметры. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
shf_05 0 29 июля, 2008 Опубликовано 29 июля, 2008 · Жалоба Если подмешивать несколько ГС, то мощность соответственно наращивается. Для моделирования подходят все указанные программы. Я пользовался SpectraPlus (или можно еще CoolEdit) - это программы для работы со звуком, в которых 0чень просто можно смотреть все эти параметры. самое оптимальное не мой взгляд- матлаб, тут безграничные возможности в цос, а все эти параметры тоже можно увидеть Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EKirshin 0 29 июля, 2008 Опубликовано 29 июля, 2008 · Жалоба ну по порядку 1 амплитуду шума рассчитывать не надо- когда исп-те ф-ю randn, то из ее хелпа, видно, что она формирует сигнал с нулевым МО и ед. дисперсией, для изменения дисперсии просто умножайте ее выход на необх вам дисперсию . а если так уж и надо измерить, то есть ф-ии вычисяющие дисперсию и проч. хар-ки сигнала std, cov и тп (см statisicы toolbox) Да, но вот как раз и интересно, на какую дисперсию нужно домножить, чтобы получить нужный SNR. 2 окном одинаково ослабляется и сигнал и шум Нужно ли при этом компенсировать это ослабление, домножая сигнал на какую-то величину? Как она рассчитывается? от числа точек в fft уровень шума поменяться не может, при увеличении числа точек в fft без увеличения числа отчетов что-либо практически полезное вряд ли удастся (см статью fft zoom на форуме), а так можно только попытаться уменьшить эффект "растекания" спектров, что достигается вдобавок окнами Я и имею ввиду не просто количество точек fft, а количество точек в выборке. К примеру, генерируем сигнал с уровнем A, добавляем шум. Но ведь при этом увидим разлчиный SNR на спектре, если сгенерируем раздичное число точек выборки (и, соответственно, fft сделаем на то же число точек)? 5 если генерировать сигнал с размахом в 1, то это должен быть сигнал одной! частоты, тогда можно пытаться что-то увидеть, если это не синус, а суммас синусов или шум, то этого не сделать в принципе В Матлабе при генерации сигнала без шума получаю интересный эффект: во-первых, сигнал этот не достигает уровня 0 db и его уровень зависит от частоты. Есть предположение, что такой эффект получается из-за того, что полосы частот fft дискретны и чем ближе частот к границе "бинов", тем меньше должен быть уровень этой частоты. Верно ли это, либо причина в другом? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
shf_05 0 29 июля, 2008 Опубликовано 29 июля, 2008 · Жалоба Да, но вот как раз и интересно, на какую дисперсию нужно домножить, чтобы получить нужный SNR. Нужно ли при этом компенсировать это ослабление, домножая сигнал на какую-то величину? Как она рассчитывается? Я и имею ввиду не просто количество точек fft, а количество точек в выборке. К примеру, генерируем сигнал с уровнем A, добавляем шум. Но ведь при этом увидим разлчиный SNR на спектре, если сгенерируем раздичное число точек выборки (и, соответственно, fft сделаем на то же число точек)? В Матлабе при генерации сигнала без шума получаю интересный эффект: во-первых, сигнал этот не достигает уровня 0 db и его уровень зависит от частоты. Есть предположение, что такой эффект получается из-за того, что полосы частот fft дискретны и чем ближе частот к границе "бинов", тем меньше должен быть уровень этой частоты. Верно ли это, либо причина в другом? SNR= signal/noise, мощность сигнала вам известна, мощность шума равна дисперсии в квадрате, ее не надо расчитывать!- задайте какую надо если длина шума и длина сигнала равна, то от длины соотношение не зависит, если чтобы спектр таки был на 0 дБ, то пронормируйте его (самое простое - Sp=Sp./max(Sp)), где Sp- модуль спектра а вообще чтобы не изобретать велосипед используйте periodogram и функции ее класса почитайте про эффектр растекания спектра при несовпадении Fsignal и Fsample/N. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться