Muhammad al-Xorazmiy nomidagi Toshkent axborot texnologiyalari universiteti Kompyuter injiniring fakulteti 210-20 guruh fakulteti talabasi Qarshiboyev Sirojiddin Parallel ishlov berish fanidan bajargan
2-Amaliy ishi
Bajardi: Qarshiboyev S
Tekshirdi: To‘rayev X
1.Bir o’lchovli signallar ustida qayta ishlash amallarini omp kutubxonasi imkoniyatlaridan foydalanib amalga oshirish. Signallarni qayta ishlash masalalari:
d)Signallarni spektral sohada siqish.
#include
#include // Include the necessary header for file operations
#include
#include
#include
#include
// Signalni tayyorlash
void generateSignal(std::vector& signal, double fs, double duration, double f0) {
int N = static_cast(fs * duration);
signal.resize(N);
for (int i = 0; i < N; ++i) {
signal[i] = sin(2 * 3.14 * f0 * i / fs);
}
}
// Fast Fourier Transform (FFT) uchun rekursiv funksiya
void fft(std::vector>& x) {
int N = x.size();
if (N <= 1) return;
std::vector> even(N / 2);
std::vector> odd(N / 2);
for (int i = 0; i < N / 2; ++i) {
even[i] = x[i * 2];
odd[i] = x[i * 2 + 1];
}
fft(even);
fft(odd);
for (int i = 0; i < N / 2; ++i) {
std::complex t = std::polar(1.0, -2 * 3.14 * i / N) * odd[i];
x[i] = even[i] + t;
x[i + N / 2] = even[i] - t;
}
}
int main() {
double fs = 1000.0; // O'lchovlar tezligi (Hz)
double duration = 1.0; // Signal davomiyligi (s)
double f0 = 5.0; // Signalning boshlang'ich chastoti (Hz)
std::vector signal;
generateSignal(signal, fs, duration, f0);
int N = signal.size();
std::vector> complexSignal(N);
for (int i = 0; i < N; ++i) {
complexSignal[i] = std::complex(signal[i], 0);
}
// FFT amalini parallel qilish
#pragma omp parallel
{
#pragma omp single
{
fft(complexSignal);
}
}
// Siqilgan signalni olish va chiqarish
std::vector siqish(N);
for (int i = 0; i < N; ++i) {
siqish[i] = std::abs(complexSignal[i]);
}
// Siqilgan signalni chiqarish
for (int i = 0; i < N; ++i) {
std::cout << siqish[i] << " ";
}
// File output for the spectral result
std::ofstream outfile("spectral_result.txt");
if (outfile.is_open()) {
for (int i = 0; i < N; ++i) {
outfile << siqish[i] << " ";
}
outfile.close();
std::cout << "\nSpectral result has been saved to 'spectral_result.txt'" << std::endl;
}
else {
std::cerr << "Unable to open the file for writing." << std::endl;
}
// File output for complexSignal (real and imaginary parts)
std::ofstream complexFile("complex_signal.txt");
if (complexFile.is_open()) {
for (int i = 0; i < N; ++i) {
complexFile << complexSignal[i].real() << " " << complexSignal[i].imag() << " ";
}
complexFile.close();
std::cout << "Complex signal has been saved to 'complex_signal.txt'" << std::endl;
}
else {
std::cerr << "Unable to open the complex signal file for writing." << std::endl;
}
return 0;
}
2.Ikki o’lchovli signallarni(tasvirlarni) qayta ishlash masalalarini omp kutubxonasi imkoniyatlaridan foydalanib amalga oshirish. Tasvirlani qayta ishlash masalalari:
d)tasvirlarni siqish.
import concurrent.futures
import matplotlib.pyplot as plt
from PIL import Image
def process_image(pixel):
# Pikselni qayta ishlash misol: masalan, pikselni grayscale qilish
gray_value = sum(pixel) // 3
return (gray_value, gray_value, gray_value)
def main():
# Ikki tasvirni o'qish
image1 = Image.open("image1.jpg")
# Tasvirlarni piksellarga ajratib olish
pixels1 = list(image1.getdata())
# Tasvirlarni qayta ishlash
with concurrent.futures.ThreadPoolExecutor() as executor:
result_pixels = list(executor.map(process_image, pixels1))
# Natijadagi tasvirni yaratish
result_image = Image.new("RGB", image1.size)
result_image.putdata(result_pixels)
# Tasvirni saqlash
plt.imshow(result_image)
plt.show()
plt.imshow(image1)
plt.show()
if __name__ == "__main__":
main()
Rasmning asl holati
Rasmning siqilgan holati
Dostları ilə paylaş: |